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 在 网络编程
每月252次下载
用于 2 crate
6MB
139K SLoC
yang-rs
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.0、cmake 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_STATE
的parse_file
标志,因为示例json文件不包含状态数据。更多示例请参阅此处。
许可证
本项目采用MIT许可证。
贡献
欢迎在GitHub上提交错误报告和拉取请求:https://github.com/holo-routing/yang-rs。