dynamic-graphql-derive 0.10.2

Dynamic GraphQL schema macro
Documentation
use std::ops::Deref;
use std::ops::DerefMut;

use darling::FromAttributes;

use crate::utils::attributes::Attributes;
use crate::utils::docs_utils::get_rustdoc;

#[derive(Debug, Clone)]
pub struct WithDoc<D> {
    pub doc: Option<String>,
    pub inner: D,
}

impl<D> Deref for WithDoc<D> {
    type Target = D;

    fn deref(&self) -> &Self::Target {
        &self.inner
    }
}

impl<D> DerefMut for WithDoc<D> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.inner
    }
}

impl<D> AsRef<D> for WithDoc<D> {
    fn as_ref(&self) -> &D {
        &self.inner
    }
}

impl<D: FromAttributes> FromAttributes for WithDoc<D> {
    fn from_attributes(items: &[syn::Attribute]) -> darling::Result<Self> {
        let doc = get_rustdoc(items)?;
        let inner = D::from_attributes(items)?;
        Ok(WithDoc { doc, inner })
    }
}

impl<A: Attributes> Attributes for WithDoc<A> {
    const ATTRIBUTES: &'static [&'static str] = A::ATTRIBUTES;
}