rusty_gql/resolver/
optional.rs

1use crate::{
2    CollectFields, Context, FieldResolver, GqlValue, ResolverResult, SelectionSetContext,
3    SelectionSetResolver,
4};
5
6#[async_trait::async_trait]
7impl<T: FieldResolver> FieldResolver for Option<T> {
8    async fn resolve_field(&self, ctx: &Context<'_>) -> ResolverResult<Option<GqlValue>> {
9        match self {
10            Some(resolver) => resolver.resolve_field(ctx).await,
11            None => Ok(Some(GqlValue::Null)),
12        }
13    }
14    fn type_name() -> String {
15        T::type_name()
16    }
17}
18
19impl<T: FieldResolver> CollectFields for Option<T> {}
20
21#[async_trait::async_trait]
22impl<T: SelectionSetResolver> SelectionSetResolver for Option<T> {
23    async fn resolve_selection_set(
24        &self,
25        ctx: &SelectionSetContext<'_>,
26    ) -> ResolverResult<GqlValue> {
27        match self {
28            Some(resolver) => resolver.resolve_selection_set(ctx).await,
29            None => Ok(GqlValue::Null),
30        }
31    }
32}