Rust bindings for the [libyang2] library.
For raw FFI bindings for libyang2, see [libyang2-sys].
toml
[dependencies]
yang2 = "0.1"
A basic example that parses and validates JSON instance data, and then converts it to the XML format: ```rust,no_run 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 ctx = Context::new(ContextFlags::NOYANGLIBRARY) .expect("Failed to create context"); ctx.setsearchdir(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::empty(),
)
.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(())
} ```
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/rwestphal/yang2-rs.