mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 22:52:22 +00:00
xml: new variant flag and fixes to generic types
This commit is contained in:
57
crates/xml/tests/propertyupdate.rs
Normal file
57
crates/xml/tests/propertyupdate.rs
Normal file
@@ -0,0 +1,57 @@
|
||||
use rustical_xml::{Unparsed, XmlDeserialize, XmlDocument, XmlRootTag};
|
||||
|
||||
#[test]
|
||||
fn test_propertyupdate() {
|
||||
#[derive(XmlDeserialize)]
|
||||
struct SetPropertyElement<T: XmlDeserialize> {
|
||||
prop: T,
|
||||
}
|
||||
|
||||
#[derive(XmlDeserialize)]
|
||||
struct TagName {
|
||||
#[xml(ty = "tag_name")]
|
||||
name: String,
|
||||
}
|
||||
|
||||
#[derive(XmlDeserialize)]
|
||||
struct PropertyElement {
|
||||
#[xml(ty = "untagged")]
|
||||
property: TagName,
|
||||
}
|
||||
|
||||
#[derive(XmlDeserialize)]
|
||||
struct RemovePropertyElement {
|
||||
prop: PropertyElement,
|
||||
}
|
||||
|
||||
#[derive(XmlDeserialize)]
|
||||
enum Operation<T: XmlDeserialize> {
|
||||
Set(SetPropertyElement<T>),
|
||||
Remove(RemovePropertyElement),
|
||||
}
|
||||
|
||||
#[derive(XmlDeserialize, XmlRootTag)]
|
||||
#[xml(root = b"propertyupdate")]
|
||||
struct PropertyupdateElement<T: XmlDeserialize> {
|
||||
#[xml(ty = "untagged", flatten)]
|
||||
operations: Vec<Operation<T>>,
|
||||
}
|
||||
|
||||
let doc = PropertyupdateElement::<Unparsed>::parse_str(
|
||||
r#"
|
||||
<propertyupdate>
|
||||
<set>
|
||||
<prop>
|
||||
<displayname>Hello</displayname>
|
||||
</prop>
|
||||
</set>
|
||||
<remove>
|
||||
<prop>
|
||||
<displayname />
|
||||
</prop>
|
||||
</remove>
|
||||
</propertyupdate>
|
||||
"#,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
Reference in New Issue
Block a user