1 个不稳定版本

新版本 0.1.0 2024年8月11日

#552解析器实现

Download history 103/week @ 2024-08-09

每月103 次下载

MPL-2.0 许可证

1MB
23K SLoC

aeolia

Build coverage

基于开放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