arc-ext 0.1.0

Extensions for Arc<T> such as field projection
Documentation
use async_graphql::OutputType;

use crate::{ArcProject, ArcProjectOption};

#[async_graphql::async_trait::async_trait]
impl<T: ?Sized + Unpin, U: ?Sized + OutputType> OutputType for ArcProjectOption<'_, '_, T, U> {
    fn type_name() -> std::borrow::Cow<'static, str> {
        Option::<&U>::type_name()
    }

    fn create_type_info(registry: &mut async_graphql::registry::Registry) -> String {
        Option::<&U>::create_type_info(registry)
    }

    async fn resolve(
        &self,
        ctx: &async_graphql::ContextSelectionSet<'_>,
        field: &async_graphql::Positioned<async_graphql::parser::types::Field>,
    ) -> async_graphql::ServerResult<async_graphql::Value> {
        Option::<&U>::resolve(&self.as_option(), ctx, field).await
    }
}

#[async_graphql::async_trait::async_trait]
impl<T: ?Sized + Unpin, U: OutputType> OutputType for ArcProject<'_, '_, T, U> {
    fn type_name() -> std::borrow::Cow<'static, str> {
        <&U>::type_name()
    }

    fn create_type_info(registry: &mut async_graphql::registry::Registry) -> String {
        <&U>::create_type_info(registry)
    }

    async fn resolve(
        &self,
        ctx: &async_graphql::ContextSelectionSet<'_>,
        field: &async_graphql::Positioned<async_graphql::parser::types::Field>,
    ) -> async_graphql::ServerResult<async_graphql::Value> {
        <&U>::resolve(&&**self, ctx, field).await
    }
}