use std::collections::HashMap; use darling::{FromDeriveInput, FromField, FromMeta, FromVariant, util::Flag}; use syn::{Ident, LitStr}; #[derive(Debug, Default, FromMeta, Clone)] pub struct TagAttrs { pub rename: Option, pub ns: Option, } #[derive(Default, FromVariant)] #[darling(attributes(xml))] pub struct VariantAttrs { #[darling(flatten)] pub common: TagAttrs, pub other: Flag, pub skip_deserializing: Flag, // This is actually only for the PropName trait pub prop: Option, } #[derive(Default, FromDeriveInput, Clone)] #[darling(attributes(xml))] pub struct EnumAttrs { pub untagged: Flag, pub unit_variants_ident: Option, } #[derive(Default, FromDeriveInput, Clone)] #[darling(attributes(xml))] pub struct StructAttrs { pub root: Option, pub ns: Option, #[darling(default)] pub ns_prefix: HashMap, pub allow_invalid: Flag, } #[derive(Debug, Default, FromMeta, PartialEq)] pub enum FieldType { #[default] Tag, Attr, Text, Untagged, TagName, Namespace, } #[derive(Debug, Default, FromField)] #[darling(attributes(xml))] pub struct FieldAttrs { #[darling(flatten)] pub common: TagAttrs, pub flatten: Flag, pub default: Option, pub serialize_with: Option, #[darling(default, rename = "ty")] pub xml_ty: FieldType, }