From 5c30f8e99863c01afbe3ea53b0d36715d6a47213 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Valencia Londono <¨valencialondonojuansebastian@gmail.com¨> Date: Wed, 15 Jul 2026 10:05:30 -0500 Subject: [PATCH 1/4] chore: register parse_string example in Cargo.toml --- crates/tinyxml2/Cargo.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/tinyxml2/Cargo.toml b/crates/tinyxml2/Cargo.toml index 698d23f..728135f 100644 --- a/crates/tinyxml2/Cargo.toml +++ b/crates/tinyxml2/Cargo.toml @@ -29,6 +29,11 @@ name = "parse_file" path = "../../examples/parse_file.rs" required-features = ["std"] +[[example]] +name = "parse_string" +path = "../../examples/parse_string.rs" +required-features = ["std"] + [[example]] name = "build_dom" path = "../../examples/build_dom.rs" From 66876bd6b17d8691f9176e8237a93af8ed24fa53 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Valencia Londono <¨valencialondonojuansebastian@gmail.com¨> Date: Wed, 15 Jul 2026 11:44:08 -0500 Subject: [PATCH 2/4] chore: add parse_string example with XmlError pattern matching --- examples/parse_string.rs | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 examples/parse_string.rs diff --git a/examples/parse_string.rs b/examples/parse_string.rs new file mode 100644 index 0000000..6a67f13 --- /dev/null +++ b/examples/parse_string.rs @@ -0,0 +1,44 @@ +//! Parses malformed XML strings and demonstrates how to handle different +//! [`XmlError`] variants with pattern matching. + +use tinyxml2::{Document, XmlError}; + +fn main() { + try_parse("", "mismatched tags"); + try_parse("", "empty document"); + try_parse("", "unclosed tag"); +} + +fn try_parse(xml: &str, desc: &str) { + match Document::parse(xml) { + Ok(_doc) => { + // Successful parse + } + Err(e) => { + println!("--- {desc} ---"); + println!(" error: {e}"); + match &e { + XmlError::EmptyDocument => { + println!(" cause: the input contains no XML content"); + } + XmlError::MismatchedElement { + expected, + found, + line, + } => { + println!(" cause: expected , found at line {line}"); + } + XmlError::Parse { kind, line, message } => { + println!(" cause: {kind:?} error at line {line}"); + if let Some(msg) = message { + println!(" detail: {msg}"); + } + } + _ => { + println!(" cause: unexpected error — {e}"); + } + } + println!(); + } + } +} From cc893352096a400443ef355b72cfc3de32fee9b6 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Valencia Londono <¨valencialondonojuansebastian@gmail.com¨> Date: Wed, 15 Jul 2026 11:46:08 -0500 Subject: [PATCH 3/4] chore: add parse_string.rs error handling example --- crates/tinyxml2/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/tinyxml2/Cargo.toml b/crates/tinyxml2/Cargo.toml index 728135f..d627e71 100644 --- a/crates/tinyxml2/Cargo.toml +++ b/crates/tinyxml2/Cargo.toml @@ -30,7 +30,7 @@ path = "../../examples/parse_file.rs" required-features = ["std"] [[example]] -name = "parse_string" +name = "parse_string_error_handling" path = "../../examples/parse_string.rs" required-features = ["std"] From 3ab820ba5a25b770c71bf5f5afa3627fe38953d2 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Valencia Londono <¨valencialondonojuansebastian@gmail.com¨> Date: Wed, 15 Jul 2026 11:52:37 -0500 Subject: [PATCH 4/4] fix: fix cargo fmt errors --- examples/parse_string.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/parse_string.rs b/examples/parse_string.rs index 6a67f13..2e73487 100644 --- a/examples/parse_string.rs +++ b/examples/parse_string.rs @@ -28,7 +28,11 @@ fn try_parse(xml: &str, desc: &str) { } => { println!(" cause: expected , found at line {line}"); } - XmlError::Parse { kind, line, message } => { + XmlError::Parse { + kind, + line, + message, + } => { println!(" cause: {kind:?} error at line {line}"); if let Some(msg) = message { println!(" detail: {msg}");