dynamic-graphql-derive 0.10.2

Dynamic GraphQL schema macro
Documentation
use darling::FromMeta;
use darling::ast::NestedMeta;

use crate::utils::meta_match::MatchMetaPath;
use crate::utils::meta_match::MatchNestedMetaList;

#[derive(Debug, Clone)]
pub struct PathAttr(pub syn::Path);

impl MatchNestedMetaList for PathAttr {
    fn match_nested_meta_list(list: &[NestedMeta]) -> Option<darling::Result<Self>>
    where
        Self: Sized,
    {
        let inner = <(MatchMetaPath,)>::match_nested_meta_list(list);
        inner.map(|r| r.map(|(r1,)| PathAttr(r1.0)))
    }
}

impl FromMeta for PathAttr {
    fn from_list(items: &[NestedMeta]) -> darling::Result<Self> {
        let path = PathAttr::match_nested_meta_list(items);
        if let Some(p) = path {
            return p;
        }
        Err(darling::Error::custom("Invalid path"))
    }
}