rusty_gql/resolver/
optional.rs1use 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}