#yang #bindings #libyang #data #dynamic #bundled #libyang2

sys libyang2-sys

libyang2的原始FFI绑定

17个不稳定版本 (8个破坏性更新)

0.9.0 2024年4月27日
0.8.0 2024年1月24日
0.7.0 2023年10月18日
0.6.0 2023年5月30日
0.1.6 2021年3月5日

#1363网络编程

Download history 1048/week @ 2024-04-29 1004/week @ 2024-05-06 229/week @ 2024-05-13 267/week @ 2024-05-20 260/week @ 2024-05-27 59/week @ 2024-06-03 56/week @ 2024-06-10 81/week @ 2024-06-17 94/week @ 2024-06-24 109/week @ 2024-07-01 93/week @ 2024-07-08 79/week @ 2024-07-15 71/week @ 2024-07-22 92/week @ 2024-07-29 42/week @ 2024-08-05 40/week @ 2024-08-12

每月252次下载
用于 2 crate

MIT 许可证

6MB
139K SLoC

C 109K SLoC // 0.2% comments Rust 28K SLoC // 0.0% comments Forge Config 836 SLoC // 0.7% comments Shell 416 SLoC // 0.2% comments TCL 321 SLoC // 0.3% comments RPM Specfile 103 SLoC Bitbake 4 SLoC

yang-rs

Crates.io Documentation MIT licensed Build Status codecov

Rust对libyang库的绑定。

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

Cargo.toml

[dependencies]
yang3 = "0.7"

设计目标

  • 使用惯用的Rust提供libyang的高级绑定
  • 利用Rust的拥有权系统在编译时检测API滥用问题
  • 自动资源管理
  • 零成本抽象

功能标志

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

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

示例

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

use std::fs::File;
use yang3::context::{Context, ContextFlags};
use yang3::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(())
}

注意传递给NO_STATEparse_file标志,因为示例json文件不包含状态数据。更多示例请参阅此处

许可证

本项目采用MIT许可证

贡献

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

无运行时依赖