bitflags-derive-macros 0.0.5

bitflags-aware #[derive] macros.
Documentation
pub(crate) mod serialize {
    use proc_macro2::TokenStream;

    pub(crate) fn expand(item: syn::DeriveInput) -> Result<TokenStream, syn::Error> {
        let ident = item.ident;
        let (impl_generics, ty_generics, where_clause) = item.generics.split_for_impl();

        Ok(
            quote!(impl #impl_generics bitflags_derive::__private::serde::Serialize for #ident #ty_generics #where_clause {
                fn serialize<S: bitflags_derive::__private::serde::Serializer>(&self, serializer: S) -> bitflags_derive::__private::core::result::Result<S::Ok, S::Error> {
                    bitflags_derive::__private::serde::serialize(self, serializer)
                }
            }),
        )
    }
}

pub(crate) mod deserialize {
    use proc_macro2::{Span, TokenStream};

    pub(crate) fn expand(item: syn::DeriveInput) -> Result<TokenStream, syn::Error> {
        let ident = item.ident;

        let de_lt = syn::Lifetime::new("'bitflags_derive_de", Span::call_site());

        let mut de_generics = item.generics.clone();
        de_generics
            .params
            .push_value(syn::GenericParam::Lifetime(syn::LifetimeParam::new(
                de_lt.clone(),
            )));

        let (impl_generics, _, where_clause) = de_generics.split_for_impl();
        let (_, ty_generics, _) = item.generics.split_for_impl();

        Ok(
            quote!(impl #impl_generics bitflags_derive::__private::serde::Deserialize<#de_lt> for #ident #ty_generics #where_clause {
                fn deserialize<D: bitflags_derive::__private::serde::Deserializer<#de_lt>>(deserializer: D) -> bitflags_derive::__private::core::result::Result<Self, D::Error> {
                    bitflags_derive::__private::serde::deserialize(deserializer)
                }
            }),
        )
    }
}