use crate::parser::types::Field; use crate::{ registry, ContextSelectionSet, InputValueError, InputValueResult, OutputValueType, Positioned, Scalar, ScalarType, ServerResult, Type, Value, }; use std::borrow::Cow; /// The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. #[Scalar(internal)] impl ScalarType for String { fn parse(value: Value) -> InputValueResult { match value { Value::String(s) => Ok(s), _ => Err(InputValueError::expected_type(value)), } } fn is_valid(value: &Value) -> bool { matches!(value, Value::String(_)) } fn to_value(&self) -> Value { Value::String(self.clone()) } } impl<'a> Type for &'a str { fn type_name() -> Cow<'static, str> { Cow::Borrowed("String") } fn create_type_info(registry: &mut registry::Registry) -> String { ::create_type_info(registry) } } #[async_trait::async_trait] impl<'a> OutputValueType for &'a str { async fn resolve( &self, _: &ContextSelectionSet<'_>, _field: &Positioned, ) -> ServerResult { Ok(Value::String((*self).to_string())) } }