add stuff
This commit is contained in:
parent
0194185cdc
commit
96714af9cb
5 changed files with 2357 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/target
|
1042
Cargo.lock
generated
Normal file
1042
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
11
Cargo.toml
Normal file
11
Cargo.toml
Normal file
|
@ -0,0 +1,11 @@
|
|||
[package]
|
||||
name = "calendar_db"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
icalendar = "0.15.8"
|
||||
icu = "1.3.2"
|
||||
sqlite = "0.31.1"
|
1193
holidays.ics
Normal file
1193
holidays.ics
Normal file
File diff suppressed because it is too large
Load diff
110
src/main.rs
Normal file
110
src/main.rs
Normal file
|
@ -0,0 +1,110 @@
|
|||
use std::collections::HashMap;
|
||||
use std::fs;
|
||||
|
||||
use icu::calendar::types::IsoWeekday;
|
||||
use icu::calendar::Date;
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
struct DateStruct {
|
||||
year: i32,
|
||||
month: u8,
|
||||
day: u8,
|
||||
}
|
||||
|
||||
struct DayStruct {
|
||||
datestring: String,
|
||||
date: DateStruct,
|
||||
day_of_week: IsoWeekday,
|
||||
day_of_year: u16,
|
||||
days_in_month: u8,
|
||||
days_in_year: u16,
|
||||
week_of_month: u32,
|
||||
}
|
||||
|
||||
struct EventStruct {
|
||||
datestring: String,
|
||||
date: DateStruct,
|
||||
summary: String,
|
||||
}
|
||||
|
||||
fn holidaze() -> HashMap<String, String> {
|
||||
let input = fs::read_to_string("holidays.ics").unwrap();
|
||||
let unfolded = icalendar::parser::unfold(input.as_str());
|
||||
let calendar = icalendar::parser::read_calendar(unfolded.as_str());
|
||||
|
||||
let mut holiday_map = HashMap::<String, String>::new();
|
||||
|
||||
for holiday in calendar.unwrap().components {
|
||||
let date_data = holiday.properties[2].val.as_str().split_at(4);
|
||||
let event_data = holiday.properties[4].val.as_str();
|
||||
|
||||
let date_struct = DateStruct {
|
||||
year: date_data.0.parse::<i32>().unwrap(),
|
||||
month: date_data.1.split_at(2).0.parse::<u8>().unwrap(),
|
||||
day: date_data.1.split_at(2).1.parse::<u8>().unwrap(),
|
||||
};
|
||||
|
||||
let date_iso = Date::try_new_iso_date(
|
||||
date_struct.year.clone(),
|
||||
date_struct.month.clone(),
|
||||
date_struct.day.clone(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let day_struct = DayStruct {
|
||||
date: date_struct.clone(),
|
||||
datestring: format!(
|
||||
"{:?}{:02}{:02}",
|
||||
&date_struct.year, &date_struct.month, &date_struct.day,
|
||||
),
|
||||
day_of_week: date_iso.day_of_week(),
|
||||
day_of_year: date_iso.day_of_year_info().day_of_year,
|
||||
days_in_month: date_iso.days_in_month(),
|
||||
days_in_year: date_iso.days_in_year(),
|
||||
week_of_month: date_iso.week_of_month(IsoWeekday::Sunday).0,
|
||||
};
|
||||
|
||||
let event_struct = EventStruct {
|
||||
date: date_struct,
|
||||
datestring: day_struct.datestring,
|
||||
summary: event_data.replace("\\", ""),
|
||||
};
|
||||
|
||||
holiday_map.insert(
|
||||
event_struct.datestring.to_string(),
|
||||
event_struct.summary.to_string(),
|
||||
);
|
||||
}
|
||||
|
||||
return holiday_map;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let holidays_map = holidaze();
|
||||
|
||||
let connection = sqlite::open(":memory:").unwrap();
|
||||
|
||||
connection.execute("CREATE TABLE calendar (datestring TEXT, summary TEXT)").unwrap();
|
||||
|
||||
for key in holidays_map.keys() {
|
||||
let query = format!(
|
||||
"
|
||||
INSERT INTO calendar VALUES ({}, {:?});
|
||||
",
|
||||
key, holidays_map.get(key).unwrap(),
|
||||
);
|
||||
|
||||
connection.execute(query).unwrap();
|
||||
}
|
||||
|
||||
let query = "SELECT * FROM calendar where summary like '%birthday%'";
|
||||
|
||||
connection
|
||||
.iterate(query, |pairs| {
|
||||
for &(name, value) in pairs.iter() {
|
||||
println!("{} = {}", name, value.unwrap());
|
||||
}
|
||||
true
|
||||
})
|
||||
.unwrap();
|
||||
}
|
Loading…
Add table
Reference in a new issue