xso-proc: Allow #[xml(flag)] without params

Emmanuel Gil Peyrot created

The namespace defaults to the parent’s namespace, and the name to the
field name, so we can avoid needlessly duplicating that info.

Change summary

parsers/src/sm.rs               |  2 +-
parsers/src/starttls.rs         |  2 +-
parsers/src/util/macro_tests.rs |  2 +-
xso-proc/src/meta.rs            | 10 ++++++----
4 files changed, 9 insertions(+), 7 deletions(-)

Detailed changes

parsers/src/sm.rs 🔗

@@ -139,7 +139,7 @@ pub struct Resumed {
 #[xml(namespace = ns::SM, name = "sm")]
 pub struct StreamManagement {
     /// `<optional/>` flag.
-    #[xml(flag(name = "optional"))]
+    #[xml(flag)]
     pub optional: bool,
 }
 

parsers/src/starttls.rs 🔗

@@ -25,7 +25,7 @@ pub struct Proceed;
 #[xml(namespace = ns::TLS, name = "starttls")]
 pub struct StartTls {
     /// Marker for mandatory StartTLS.
-    #[xml(flag(name = "required"))]
+    #[xml(flag)]
     pub required: bool,
 }
 

parsers/src/util/macro_tests.rs 🔗

@@ -1977,7 +1977,7 @@ fn extract_ignore_unknown_stuff_roundtrip() {
 #[derive(FromXml, AsXml, PartialEq, Debug, Clone)]
 #[xml(namespace = NS1, name = "foo")]
 struct Flag {
-    #[xml(flag(namespace = NS1, name = "flag"))]
+    #[xml(flag)]
     flag: bool,
 }
 

xso-proc/src/meta.rs 🔗

@@ -1055,10 +1055,12 @@ impl XmlFieldMeta {
     /// Parse a `#[xml(flag)]` meta.
     fn flag_from_meta(meta: ParseNestedMeta<'_>) -> Result<Self> {
         let mut qname = QNameRef::default();
-        meta.parse_nested_meta(|meta| match qname.parse_incremental_from_meta(meta)? {
-            None => Ok(()),
-            Some(meta) => Err(Error::new_spanned(meta.path, "unsupported key")),
-        })?;
+        if meta.input.peek(syn::token::Paren) {
+            meta.parse_nested_meta(|meta| match qname.parse_incremental_from_meta(meta)? {
+                None => Ok(()),
+                Some(meta) => Err(Error::new_spanned(meta.path, "unsupported key")),
+            })?;
+        }
         Ok(Self::Flag {
             span: meta.path.span(),
             qname,