wundergraph/query_builder/types/field_value_resolver/
mod.rs

1use super::WundergraphValue;
2use crate::error::Result;
3use crate::scalar::WundergraphScalarValue;
4use diesel::backend::Backend;
5use juniper::{Executor, Selection};
6
7mod direct_resolver;
8mod has_one_resolver;
9
10/// A internal helper trait indicating how to resolve a given type while query
11/// execution
12pub trait ResolveWundergraphFieldValue<DB: Backend, Ctx>: WundergraphValue + Sized {
13    /// A type implementing `FieldValueResolver` used to resolve values of
14    /// this type during query execution
15    type Resolver: FieldValueResolver<Self, DB, Ctx>;
16}
17
18pub trait FieldValueResolver<T, DB, Ctx>
19where
20    T: WundergraphValue,
21    DB: Backend,
22{
23    fn new(elements: usize) -> Self;
24
25    fn resolve_value(
26        &mut self,
27        value: T::PlaceHolder,
28        look_ahead: &juniper::LookAheadSelection<'_, WundergraphScalarValue>,
29        selection: Option<&'_ [Selection<'_, WundergraphScalarValue>]>,
30        executor: &Executor<'_, Ctx, WundergraphScalarValue>,
31    ) -> Result<Option<juniper::Value<WundergraphScalarValue>>>;
32
33    fn finalize(
34        self,
35        global_args: &[juniper::LookAheadArgument<WundergraphScalarValue>],
36        look_ahead: &juniper::LookAheadSelection<'_, WundergraphScalarValue>,
37        selection: Option<&'_ [Selection<'_, WundergraphScalarValue>]>,
38        executor: &Executor<'_, Ctx, WundergraphScalarValue>,
39    ) -> Result<Option<Vec<juniper::Value<WundergraphScalarValue>>>>;
40}