Version NEXT: * Changes - Fix some Clippy warnings Version 0.3.0, release 2025-10-28: * Changes - Bump minidom dep to 0.18, which has breaking changes. Version 0.2.0, released 2025-09-17: 0000-00-00 Jonas Schäfer * Breaking - The methods of `TextCodec` now have `&self` receivers. This also implies that `#[xml(text(codec = ..))]` now takes expressions instead of type paths. Because all implementations provided by `xso` were in fact unit structs, this should not change most invocations, with one exception: The type argument of `Base64` was removed. Replace all `Base64` references with `Base64.filtered(Foo)` to update your code. This change overall allows for more flexibility in the implementation of text codecs. - `xml:lang` attributes are now silently discarded during deserialisation unless captured by `#[xml(attribute = "xml:lang")]` or equivalent. This is because `xml:lang` is special as per XML 1.0 § 2.12 and it is generally preferable to allow it to occur anywhere in the document. - The `FromXml::from_events` and `FromEventsBuilder::feed` functions gained an additional argument to support `xml:lang` inheritance. * Added - Support for child elements in derive macros. Child elements may also be wrapped in Option or Box or in containers like Vec or HashSet. - Support for overriding the names of the types generated by the derive macros. - Support for deriving FromXml and AsXml on enums. - Support for extracting data from child elements without intermediate structs. - Support for collecting all unknown children in a single field as collection of `minidom::Element`, or one unknown child as a `minidom::Element`, or zero or one unknown children as an `Option`. - Support for "transparent" structs (newtype-like patterns for XSO). - FromXmlText and AsXmlText are now implemented for jid::NodePart, jid::DomainPart, and jid::ResourcePart (!485) - Support for optional child elements, the presence of which are translated into a boolean (`#[xml(flag)]`). - Generic TextCodec implementation for all base64 engines provided by the base64 crate (if the `base64` feature is enabled). - New `codec` field on `attribute` meta, to support decoding and encoding using any `TextCodec`. - Support for `no_std` usage (the alloc crate is required, though). - Add a PrintRawXml helper struct to be able to display raw xml, useful for debug logs. - Support to selectively discard attributes or text content during parsing (!552). - Implement `AsXml` and `FromXml` for serde_json::Value` behind `serde_json` feature. - Support for a post-deserialization callback function call. (!553) - Support for correctly inheriting `xml:lang` values throughout the XML document. - `xso::convert_via_fromstr_and_display`, a declarative macro to provide `AsXmlText` and `FromXmlText` implementations based on the standard library's `Display` and `FromStr` traits. - `AsXmlDyn`, a dyn-compatible variant of `AsXml` (!573). - `FromXml::xml_name_matcher()` and related types, which allow `FromXml` implementors to provide cacheable hints to callers about which XML elements are valid candidates for parsing (!573). - `Xso`, a Box-like struct which can hold a dynamically-typed XSO, alongside related traits and (declarative) macros (!573). - `XsoVec`, a container which can hold dynamically-typed XSOs (!573). * Changes - Generated AsXml iterator and FromXml builder types are now doc(hidden), to not clutter hand-written documentation with auto generated garbage (something certain big tech companies could take an example of, honestly). - Fixed bug where putting an attribute field below any non-attribute field in a struct definition would cause a compile-time error when deriving `AsXml`. - Update rxml dependency to 0.13. - xso now rejects conflicting `#[xml(attribute)]` (and `#[xml(lang)]`) specifications at compile time. - Deprecate `try_from_element` in favour of `transform`. Version 0.1.2: 2024-07-26 Jonas Schäfer * Added - FromXmlText and AsXmlText are now implemented on char. * Fixed - Docs build on docs.rs now shows feature-gated items. Version 0.1.1: 2024-07-25 Maxime “pep” Buquet * Added - Import various text codecs from parsers: FixedHex, ColonSeparatedHex, EmptyAsError. Version 0.1.0: 2024-07-25 Jonas Schäfer * Initial release of this crate