Skip to content

lukasfri/xmlity

Repository files navigation

XMLity   Build Status Latest Version Latest Docs xmlity msrv

XMLity is a (de)serialization library for XML, inspired by Serde and improves upon XML (de)serialization libraries such as yaserde and quick-xml by providing a more flexible API that is more powerful, utilising primarily a trial and error approach to parsing XML. This can inherently be a bit slower than other libraries, but it allows for more complex XML structures to be parsed.


Get started

To get started, we recommend you check out the documentation and the examples.

Example

  1. Add XMLity and XMLity-compatible (de)serializer library. In this example we use xmlity-quick-xml.
[dependencies]

xmlity = { version = "0.0.8", features = ["derive"] }

xmlity-quick-xml = "0.0.8"
  1. Write defintions and use:
extern crate xmlity_quick_xml;

use xmlity::{Serialize, Deserialize};;

#[derive(Serialize, Deserialize)]
#[xelement(name = "name")]
struct Name(String);

#[derive(Serialize, Deserialize)]
#[xelement(name = "age")]
struct Age(u8);

#[derive(Serialize, Deserialize)]
#[xelement(name = "person")]
struct Person {
    name: Name,
    age: Age,
}

let person = Person {
    name: Name("John".to_string()),
    age: Age(42),
};

let xml = xmlity_quick_xml::to_string(&person).expect("Failed to serialize");
assert_eq!(xml, r#"<person><name>John</name><age>42</age></person>"#);

let person: Person = xmlity_quick_xml::from_str(&xml).expect("Failed to deserialize");
assert_eq!(person.name.0, "John");
assert_eq!(person.age.0, 42);

Why use XMLity instead of other XML libraries?

  • serde-xml-rs: Lacking proper namespace support and other features.
  • yaserde: Lacking support for trial-and-error deserialization, a requirement for full coverage of XML schemas.
  • quick-xml(serde feature): Lacking support for namespaces.

Other resources

  • The official XML schema generator: Coming soon! It's already very feature-rich and is good enough to bootstrap itself by deserializing XML schemas using its own generated code, however it still requires some cleanup before its ready for public use.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in XMLity by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

No description, website, or topics provided.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages