Crates.io | yang2 |
lib.rs | yang2 |
version | 0.17.0 |
source | src |
created_at | 2021-01-02 20:45:10.490723 |
updated_at | 2024-08-01 18:57:10.964465 |
description | libyang2 bindings for Rust |
homepage | |
repository | https://github.com/holo-routing/yang2-rs |
max_upload_size | |
id | 330741 |
size | 204,766 |
Rust bindings for the libyang2 library.
For raw FFI bindings for libyang2, see libyang2-sys.
[dependencies]
yang2 = "0.17"
By default, yang2-rs uses pre-generated FFI bindings and uses dynamic linking to load libyang2. The following feature flags, however, can be used to change that behavior:
A basic example that parses and validates JSON instance data, and then converts it to the XML format:
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(())
}
Note the NO_STATE
flag passed to parse_file
since the example json file does not contain state data.
More examples can be found here.
This project is licensed under the MIT license.
Bug reports and pull requests are welcome on GitHub at https://github.com/holo-routing/yang2-rs.