diff --git a/instant-xml-macros/src/de.rs b/instant-xml-macros/src/de.rs
index f666cd3..72ffd53 100644
--- a/instant-xml-macros/src/de.rs
+++ b/instant-xml-macros/src/de.rs
@@ -63,7 +63,7 @@ fn deserialize_scalar_enum(
};
let serialize_as = meta.serialize_as;
- variants.extend(quote!(Some(#serialize_as) => #ident::#v_ident,));
+ variants.extend(quote!(#serialize_as => #ident::#v_ident,));
}
let generics = meta.xml_generics(BTreeSet::new());
@@ -92,14 +92,18 @@ fn deserialize_scalar_enum(
return Err(Error::DuplicateValue);
}
- let value = match deserializer.take_str()? {
- #variants
- Some(val) => return Err(Error::UnexpectedValue(
- format!("enum variant not found for '{}'", val)
- )),
+ let cow_str = match deserializer.take_str()? {
+ Some(val) => val,
None => return Err(Error::MissingValue(#type_str)),
};
+ let value = match cow_str.as_ref() {
+ #variants
+ _ => return Err(Error::UnexpectedValue(
+ format!("enum variant not found for '{}'", cow_str),
+ )),
+ };
+
*into = Some(value);
Ok(())
}
diff --git a/instant-xml/src/de.rs b/instant-xml/src/de.rs
index 76cd47a..c2fbbc3 100644
--- a/instant-xml/src/de.rs
+++ b/instant-xml/src/de.rs
@@ -31,7 +31,7 @@ impl<'cx, 'xml> Deserializer<'cx, 'xml> {
}
}
- pub fn take_str(&mut self) -> Result