use serde_yml::libyml::parser::{Event, Parser};
use std::borrow::Cow;
#[allow(clippy::single_match)]
pub(crate) fn main() {
println!("\n❯ Executing examples/libyml/parser_examples.rs");
{
let input = Cow::Borrowed(b"foo: bar\n");
let mut parser = Parser::new(Cow::Borrowed(input.as_ref()));
match parser.parse_next_event() {
Ok((event, _)) => {
match event {
Event::StreamStart => {
println!("\n✅ Stream start event parsed successfully.")
}
_ => println!("\n❌ Unexpected event."),
}
}
Err(err) => println!("Error parsing event: {:?}", err),
}
}
{
let input = Cow::Borrowed(b"foo: bar\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::StreamEnd) {
println!("\n✅ Stream end event parsed successfully.");
break;
}
}
}
{
let input = Cow::Borrowed(b"---\nfoo: bar\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::DocumentStart) {
println!(
"\n✅ Document start event parsed successfully."
);
break;
}
}
}
{
let input =
Cow::Borrowed(b"foo: bar\n---\nbaz: qux\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::DocumentEnd) {
println!(
"\n✅ Document end event parsed successfully."
);
break;
}
}
}
{
let input = Cow::Borrowed(b"bar\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if let Event::Scalar(scalar) = event {
println!(
"\n✅ Scalar event parsed successfully with value: {:?}",
scalar.value
);
break;
}
}
}
{
let input = Cow::Borrowed(b"- item1\n- item2\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::SequenceStart(_)) {
println!(
"\n✅ Sequence start event parsed successfully."
);
break;
}
}
}
{
let input = Cow::Borrowed(b"- item1\n- item2\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::SequenceEnd) {
println!(
"\n✅ Sequence end event parsed successfully."
);
break;
}
}
}
{
let input = Cow::Borrowed(b"key: value\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::MappingStart(_)) {
println!(
"\n✅ Mapping start event parsed successfully."
);
break;
}
}
}
{
let input = Cow::Borrowed(b"key: value\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::MappingEnd) {
println!("\n✅ Mapping end event parsed successfully.");
break;
}
}
}
{
let input = Cow::Borrowed(b"unexpected: [value").as_ref(); let mut parser = Parser::new(Cow::Borrowed(input));
match parser.parse_next_event() {
Ok(_) => println!(
"\n❌ Unexpectedly parsed malformed input without error."
),
Err(err) => {
println!("\n❌ Error parsing malformed input: {:?}", err)
}
}
}
{
let input = Cow::Borrowed(b"").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
match parser.parse_next_event() {
Ok((event, _)) => match event {
Event::StreamEnd => println!("Stream end event parsed successfully for empty input."),
_ => println!("Unexpected event for empty input."),
},
Err(err) => println!("Error parsing empty input: {:?}", err),
}
}
{
let input =
Cow::Borrowed(b"- item1\n- - nested1\n - nested2\n")
.as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
let mut found_nested_start = false;
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::SequenceStart(_)) {
if found_nested_start {
println!("\n✅ Nested sequence start event parsed successfully.");
break;
} else {
found_nested_start = true;
}
}
}
if !found_nested_start {
println!("\n❌ Nested sequence start event was not found.");
}
}
{
let input =
Cow::Borrowed(b"- item1\nkey: value\n- item2\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
let mut found_sequence = false;
let mut found_mapping = false;
while let Ok((event, _)) = parser.parse_next_event() {
if matches!(event, Event::SequenceStart(_)) {
found_sequence = true;
}
if matches!(event, Event::MappingStart(_)) {
found_mapping = true;
}
if found_sequence && found_mapping {
println!("\n✅ Mixed content parsed successfully (sequence and mapping).");
break;
}
}
if !found_sequence {
println!("\n❌ Sequence start event was not found.");
}
if !found_mapping {
println!("\n❌ Mapping start event was not found.");
}
}
{
let input = Cow::Borrowed(b"invalid: [yaml").as_ref(); let mut parser = Parser::new(Cow::Borrowed(input));
match parser.parse_next_event() {
Ok(_) => println!(
"\n❌ Unexpectedly parsed invalid input without error."
),
Err(err) => println!(
"\n✅ Correctly handled error for invalid input: {:?}",
err
),
}
}
{
let input = Cow::Borrowed(b"foo: bar\n").as_ref();
let parser = Parser::new(Cow::Borrowed(input));
if parser.is_ok() {
println!("\n✅ Parser initialized successfully.");
} else {
println!("\n❌ Parser failed to initialize.");
}
}
{
let input = Cow::Borrowed(
b"- item1\n- item2:\n - nested1\n - nested2\n- item3\n",
)
.as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
match event {
Event::SequenceStart(_) => {
println!("\n✅ Sequence start event found.")
}
Event::MappingStart(_) => {
println!("\n✅ Mapping start event found.")
}
Event::Scalar(scalar) => {
println!("\n✅ Scalar value: {:?}", scalar.value)
}
_ => {}
}
}
}
{
let input =
Cow::Borrowed(b"# This is a comment\nfoo: bar\n").as_ref();
let mut parser = Parser::new(Cow::Borrowed(input));
while let Ok((event, _)) = parser.parse_next_event() {
match event {
Event::Scalar(scalar) => {
println!("\n✅ Scalar value: {:?}", scalar.value)
}
_ => {}
}
}
}
}