xml-rs based serializer and deserializer for Serde (compatible with 1.0)
use serde::{Deserialize, Serialize};
use serde_xml_rs::{from_str, to_string};
#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct Item {
name: String,
source: String,
}
fn main() {
let src = r#"<?xml version="1.0" encoding="UTF-8"?><Item><name>Banana</name>
Store
</Item>"#;
let should_be = Item {
name: "Banana".to_string(),
source: "Store".to_string(),
};
let item: Item = from_str(src).unwrap();
assert_eq!(item, should_be);
let reserialized_item = to_string(&item).unwrap();
assert_eq!(src, reserialized_item);
}
Notably:
- The $value name has been changed to #content (could become configurable in the future).
- Fields that are deserialized from attributes must now have a name that starts with a @. This aligns with what was introduced in the serializer.
See MIGRATION.md for more details, and tips on how to migrate.
$ claude mcp add serde-xml-rs \
-- python -m otcore.mcp_server <graph>