1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use crate::parser::types::Field; use crate::resolver_utils::resolve_list; use crate::{ registry, ContextSelectionSet, OutputValueType, Positioned, ServerResult, Type, Value, }; use std::borrow::Cow; impl<'a, T: Type + 'a> Type for &'a [T] { fn type_name() -> Cow<'static, str> { Cow::Owned(format!("[{}]", T::qualified_type_name())) } fn qualified_type_name() -> String { format!("[{}]!", T::qualified_type_name()) } fn create_type_info(registry: &mut registry::Registry) -> String { T::create_type_info(registry); Self::qualified_type_name() } } #[async_trait::async_trait] impl<T: OutputValueType + Send + Sync> OutputValueType for &[T] { async fn resolve( &self, ctx: &ContextSelectionSet<'_>, field: &Positioned<Field>, ) -> ServerResult<Value> { resolve_list(ctx, field, self.iter()).await } }