xml-stinks 0.1.0

Powerful & easy manual XML deserialization using quick-xml
Documentation
macro_rules! trait_alias {
    (
        $(#[$attr: meta])*
        $visibility: vis $name: ident$(<$($type_param: ident),*>)?
            $(: $first_bound: tt $(+ $bound: tt)*)?;
    ) => {
        $(#[$attr])*
        $visibility trait $name $(<$($type_param),*>)? $(: $first_bound $(+ $bound)*)? {}

        impl<
            T: $($first_bound $(+ $bound)*)?,
            $($($type_param),*)?
        > $name$(<$($type_param),*>)? for T {}
    };

    // Rule where the trait bounds will only be applied if the specified feature is enabled
    (
        bounds_when_feature = $bounds_feature: literal,
        $(#[$attr: meta])*
        $visibility: vis $name: ident$(<$($type_param: ident),*>)?
            $(: $first_bound: tt $(+ $bound: tt)*)?;
    ) => {
        #[cfg(feature = $bounds_feature)]
        trait_alias! {
            $(#[$attr])*
            $visibility $name$(<$($type_param),*>)?
                $(: $first_bound $(+ $bound)*)?;
        }

        #[cfg(not(feature = $bounds_feature))]
        trait_alias! {
            $(#[$attr])*
            $visibility $name$(<$($type_param),*>)?;
        }
    }
}

macro_rules! feature_alternate {
    (
        feature = $feature: literal,
        $(#[doc = $doc: literal])*
        when_enabled = $when_enabled: item,
        when_disabled = $when_disabled: item
    ) => {
        $(#[doc = $doc])*
        #[cfg(feature = $feature)]
        $when_enabled

        $(#[doc = $doc])*
        #[cfg(not(feature = $feature))]
        $when_disabled
    };
}

pub(crate) use {feature_alternate, trait_alias};