diff --git a/instant-xml-macros/src/de.rs b/instant-xml-macros/src/de.rs
index 72ffd53..03ebdae 100644
--- a/instant-xml-macros/src/de.rs
+++ b/instant-xml-macros/src/de.rs
@@ -66,6 +66,8 @@ fn deserialize_scalar_enum(
variants.extend(quote!(#serialize_as => #ident::#v_ident,));
}
+ let default_namespace = meta.default_namespace();
+
let generics = meta.xml_generics(BTreeSet::new());
let (impl_generics, _, _) = generics.split_for_impl();
let (_, ty_generics, where_clause) = input.generics.split_for_impl();
@@ -75,10 +77,7 @@ fn deserialize_scalar_enum(
impl #impl_generics FromXml<'xml> for #ident #ty_generics #where_clause {
#[inline]
fn matches(id: ::instant_xml::Id<'_>, field: Option<::instant_xml::Id<'_>>) -> bool {
- match field {
- Some(field) => id == field,
- None => false,
- }
+ id == ::instant_xml::Id { ns: #default_namespace, name: id.name }
}
fn deserialize<'cx>(
diff --git a/instant-xml-macros/src/ser.rs b/instant-xml-macros/src/ser.rs
index e431f33..a4457dd 100644
--- a/instant-xml-macros/src/ser.rs
+++ b/instant-xml-macros/src/ser.rs
@@ -56,6 +56,8 @@ fn serialize_scalar_enum(
variants.extend(quote!(#ident::#v_ident => #serialize_as,));
}
+ let default_namespace = meta.default_namespace();
+
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
quote!(
impl #impl_generics ToXml for #ident #ty_generics #where_clause {
@@ -66,7 +68,7 @@ fn serialize_scalar_enum(
) -> Result<(), instant_xml::Error> {
let prefix = match field {
Some(id) => {
- let prefix = serializer.write_start(id.name, id.ns)?;
+ let prefix = serializer.write_start(id.name, #default_namespace)?;
serializer.end_start()?;
Some((prefix, id.name))
}
diff --git a/instant-xml/tests/scalar-enum.rs b/instant-xml/tests/scalar-enum.rs
new file mode 100644
index 0000000..237a93d
--- /dev/null
+++ b/instant-xml/tests/scalar-enum.rs
@@ -0,0 +1,44 @@
+use similar_asserts::assert_eq;
+
+use instant_xml::{from_str, to_string, FromXml, ToXml};
+
+#[derive(Debug, Eq, FromXml, PartialEq, ToXml)]
+#[xml(scalar)]
+enum Foo {
+ A,
+ B,
+}
+
+#[derive(Debug, Eq, FromXml, PartialEq, ToXml)]
+struct Container {
+ foo: Foo,
+}
+
+#[test]
+fn scalar_enum() {
+ let v = Container { foo: Foo::A };
+ let xml = r#"A"#;
+ assert_eq!(xml, to_string(&v).unwrap());
+ assert_eq!(v, from_str(xml).unwrap());
+}
+
+#[derive(Debug, Eq, FromXml, PartialEq, ToXml)]
+#[xml(scalar, ns("URI", x = "URI"))]
+enum Bar {
+ A,
+ B,
+}
+
+#[derive(Debug, Eq, FromXml, PartialEq, ToXml)]
+#[xml(ns("OTHER", x = "URI"))]
+struct NsContainer {
+ bar: Bar,
+}
+
+#[test]
+fn scalar_enum_ns() {
+ let v = NsContainer { bar: Bar::A };
+ let xml = r#"A"#;
+ assert_eq!(xml, to_string(&v).unwrap());
+ assert_eq!(v, from_str(xml).unwrap());
+}