rdc-macros 0.1.0

Macros for rdc crate
Documentation
use syn::Attribute;

pub fn find_serde_rename<'a>(mut attributes: impl Iterator<Item=&'a Attribute>) -> Option<String> {
    attributes.find(|attr| {
        attr.path.is_ident("serde")
    }).and_then(|attr| {
        attr.parse_meta().ok()
    }).and_then(|meta| {
        if let syn::Meta::List(list) = meta {
            list.nested.iter().find(|nested| {
                if let syn::NestedMeta::Meta(meta) = nested {
                    meta.path().is_ident("rename")
                } else {
                    false
                }
            }).and_then(|nested| {
                if let syn::NestedMeta::Meta(meta) = nested {
                    if let syn::Meta::NameValue(name_value) = meta {
                        if let syn::Lit::Str(lit_str) = &name_value.lit {
                            Some(lit_str.value())
                        } else {
                            None
                        }
                    } else {
                        None
                    }
                } else {
                    None
                }
            })
        } else {
            None
        }
    })
}