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 • Rust 包仓库 1048/week @ 2024-04-29 • Rust 包仓库 1004/week @ 2024-05-06 • Rust 包仓库 229/week @ 2024-05-13 • Rust 包仓库 267/week @ 2024-05-20 • Rust 包仓库 260/week @ 2024-05-27 • Rust 包仓库 59/week @ 2024-06-03 • Rust 包仓库 56/week @ 2024-06-10 • Rust 包仓库 81/week @ 2024-06-17 • Rust 包仓库 94/week @ 2024-06-24 • Rust 包仓库 109/week @ 2024-07-01 • Rust 包仓库 93/week @ 2024-07-08 • Rust 包仓库 79/week @ 2024-07-15 • Rust 包仓库 71/week @ 2024-07-22 • Rust 包仓库 92/week @ 2024-07-29 • Rust 包仓库 42/week @ 2024-08-05 • Rust 包仓库 40/week @ 2024-08-12 • Rust 包仓库

每月252次下载
用于 2 crate

MIT 许可证

6MB
139K SLoC

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

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

无运行时依赖