1 个不稳定版本
新版本 0.1.0 | 2024年8月11日 |
---|
#552 在 解析器实现
每月103 次下载
1MB
23K SLoC
aeolia
基于开放iCalendar标准格式的日历工具。
这个库仍在开发中,尚未准备好使用。它包含iCalendar数据的解析器、构建器、验证器和序列化器。还有一些未处理的案例和大量的测试覆盖缺失,这可能会揭示实现中的差距。
这个库不会也不打算提供iCalendar应用程序的功能,它旨在用于构建此类应用程序。
示例
从文件中加载日历
use aetolia::prelude::*;
let calendar_file = std::fs::File::open("sample.ics").unwrap();
let parsed = load_ical(calendar_file).unwrap();
println!("Loaded calendar with {} objects", parsed.len());
验证日历
use aetolia::prelude::*;
let test_content = "BEGIN:VCALENDAR\r\n\
VERSION:2.0\r\n\
PRODID:sample\r\n\
BEGIN:VEVENT\r\n\
DTSTAMP:20220101T000000Z\r\n\
UID:123\r\n\
UID:145\r\n\
END:VEVENT\r\n\
END:VCALENDAR\r\n";
let parsed = load_ical(test_content.as_bytes()).unwrap();
let validation_errors = validate_model(&parsed[0]).unwrap();
for error in validation_errors {
eprintln!("{}", error);
}
生成日历并序列化
use aetolia::prelude::*;
let calendar = ICalObject::builder()
.add_max_version("2.0")
.finish_property()
.add_product_id("sample")
.finish_property()
.add_event_component()
.add_date_time_stamp(
time::Date::from_calendar_date(2024, time::Month::August, 8).unwrap(),
time::Time::from_hms(15, 0, 0).unwrap(),
)
.finish_property()
.add_unique_identifier("test-id")
.finish_property()
.finish_component()
.build();
let mut target = Vec::new();
calendar.write_model(&mut target).unwrap();
println!("{}", String::from_utf8(target).unwrap());
依赖项
~2MB
~39K SLoC