#![allow(deprecated)]
use core::mem::MaybeUninit;
use libyml::success::is_success;
use libyml::{
yaml_parser_delete, yaml_parser_initialize, yaml_parser_parse,
yaml_parser_set_input_string, YamlEventT, YamlNoEvent, YamlParserT,
YamlStreamEndEvent,
};
fn main() {
let yaml = b"title: MyApp\nport: 8080\n";
unsafe {
let mut parser = MaybeUninit::<YamlParserT>::uninit();
assert!(is_success(
yaml_parser_initialize(parser.as_mut_ptr()).ok
));
let mut parser = parser.assume_init();
yaml_parser_set_input_string(
&mut parser,
yaml.as_ptr(),
yaml.len() as u64,
);
let mut event_count = 0_u32;
loop {
let mut event = MaybeUninit::<YamlEventT>::uninit();
if !is_success(
yaml_parser_parse(&mut parser, event.as_mut_ptr()).ok,
) {
eprintln!("parse failed");
break;
}
let event = event.assume_init();
event_count += 1;
if event.type_ == YamlStreamEndEvent
|| event.type_ == YamlNoEvent
{
break;
}
}
println!(
"parsed {event_count} events from {} bytes",
yaml.len()
);
yaml_parser_delete(&mut parser);
}
}