30 个版本 (16 个破坏性更新)

0.17.0 2024年8月1日
0.16.0 2024年7月12日
0.15.0 2024年7月12日
0.9.0 2024年1月24日
0.1.7 2021年3月5日

#226解析器实现

Download history 1687/week @ 2024-04-29 1002/week @ 2024-05-06 392/week @ 2024-05-13 246/week @ 2024-05-20 442/week @ 2024-05-27 59/week @ 2024-06-03 49/week @ 2024-06-10 66/week @ 2024-06-17 95/week @ 2024-06-24 283/week @ 2024-07-01 401/week @ 2024-07-08 93/week @ 2024-07-15 64/week @ 2024-07-22 336/week @ 2024-07-29 36/week @ 2024-08-05 40/week @ 2024-08-12

每月483次下载
sysrepo 中使用

MIT 许可证

120KB
2.5K SLoC

yang2-rs

Crates.io Documentation MIT licensed Build Status codecov

Rust 对 libyang2 库的绑定。

有关 libyang2 的原始 FFI 绑定,请参阅 libyang2-sys

Cargo.toml

[dependencies]
yang2 = "0.17"

设计目标

  • 使用 Rust 语法提供对 libyang2 的高层绑定
  • 利用 Rust 的所有权系统在编译时检测 API 使用错误问题
  • 自动资源管理
  • 零成本抽象

功能标志

默认情况下,yang2-rs 使用预生成的 FFI 绑定并使用动态链接来加载 libyang2。但是,以下功能标志可以用来改变这种行为

  • bundled:指示 cargo 从源代码下载和构建 libyang2。结果对象被组合成与该包链接的静态归档。当不希望有 libyang2 的动态链接依赖项时,可以使用此功能。
    • 额外的构建要求: cc 1.0cmake 0.1,C 编译器和 CMake。
  • use_bindgen:动态生成新的 C FFI 绑定,而不是使用预生成的绑定。当需要更新此包以使用较新的 libyang2 版本时很有用。
    • 额外的构建要求: bindgen 0.68.0

示例

一个基本的示例,该示例解析和验证 JSON 实例数据,然后将其转换为 XML 格式

use std::fs::File;
use yang2::context::{Context, ContextFlags};
use yang2::data::{
    Data, DataFormat, DataParserFlags, DataPrinterFlags, DataTree,
    DataValidationFlags,
};

static SEARCH_DIR: &str = "./assets/yang/";

fn main() -> std::io::Result<()> {
    // Initialize context.
    let mut ctx = Context::new(ContextFlags::NO_YANGLIBRARY)
        .expect("Failed to create context");
    ctx.set_searchdir(SEARCH_DIR)
        .expect("Failed to set YANG search directory");

    // Load YANG modules.
    for module_name in &["ietf-interfaces", "iana-if-type"] {
        ctx.load_module(module_name, None, &[])
            .expect("Failed to load module");
    }

    // Parse and validate data tree in the JSON format.
    let dtree = DataTree::parse_file(
        &ctx,
        File::open("./assets/data/interfaces.json")?,
        DataFormat::JSON,
        DataParserFlags::empty(),
        DataValidationFlags::NO_STATE,
    )
    .expect("Failed to parse data tree");

    // Print data tree in the XML format.
    dtree
        .print_file(
            std::io::stdout(),
            DataFormat::XML,
            DataPrinterFlags::WD_ALL | DataPrinterFlags::WITH_SIBLINGS,
        )
        .expect("Failed to print data tree");

    Ok(())
}

注意传递给 parse_fileNO_STATE 标志,因为示例 json 文件不包含状态数据。更多示例可以在 此处 找到。

许可证

此项目根据 MIT 许可证 许可。

贡献

欢迎在 GitHub 上提交错误报告和拉取请求 https://github.com/holo-routing/yang2-rs

依赖项

~7.5MB
~163K SLoC