9 个版本 (4 个重大更新)

0.5.0 2023 年 12 月 14 日
0.4.1 2023 年 12 月 6 日
0.3.1 2023 年 12 月 5 日
0.2.2 2023 年 12 月 5 日
0.1.0 2023 年 12 月 1 日

#1019解析器实现

Download history 4/week @ 2024-03-12 10/week @ 2024-03-26 47/week @ 2024-04-02 1/week @ 2024-05-21

每月 120 次下载

MIT 许可证

55KB
1.5K SLoC

网络铁路 CIF 解析器

使用方法

读取时间表

您可以使用以下代码将 CIF 文件解析到时间表数据库中:

use nr_cif::prelude::*;

use std::fs::File;

let f = File::open("full-or-partial.cif").expect("cannot read file");
let cif_result = parse_cif(f);
match cif_result {
    Ok(file) => {
        let mut schedule = ScheduleDatabase::new();
        let errors = schedule.apply_file(&file);
        log::info!("Complete.\n{schedule:#?}\nErrors: {errors:?}");
    },
    Err(e) => panic!("{e}"),
}

注意: 这并不总是暴露记录中的每个字段。

以原始方式解析数据

您可以使用以下代码将 CIF 文件解析到记录数组中:

use nr_cif::prelude::*;

use std::fs::File;

let f = File::open("full-or-partial.cif").expect("cannot read file");
let cif_result = parse_cif(f);
match cif_result {
    Ok(file) => {
        for record in file.records() {
            // do something with each record
        }
    },
    Err(e) => panic!("{e}"),
}

然后可以手动进一步处理。

功能

功能 目的
serde 在对象上启用序列化和反序列化。
panic-on-first-error 如果发现解析错误,则引发恐慌。主要适用于测试。

依赖项

~1.4–2.2MB
~42K SLoC