2020-09-06 06:16:36 +00:00
use crate ::parser ::types ::Field ;
2020-05-10 10:27:46 +00:00
use crate ::{
2020-05-20 00:18:28 +00:00
registry , ContextSelectionSet , InputValueError , InputValueResult , OutputValueType , Positioned ,
Result , ScalarType , Type , Value ,
2020-05-10 10:27:46 +00:00
} ;
2020-04-27 09:58:10 +00:00
use async_graphql_derive ::Scalar ;
2020-03-02 00:24:49 +00:00
use std ::borrow ::Cow ;
2020-05-19 05:27:01 +00:00
/// 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.
2020-04-27 09:58:10 +00:00
#[ Scalar(internal) ]
impl ScalarType for String {
2020-05-11 13:47:24 +00:00
fn parse ( value : Value ) -> InputValueResult < Self > {
2020-03-02 00:24:49 +00:00
match value {
2020-05-16 13:14:26 +00:00
Value ::String ( s ) = > Ok ( s ) ,
2020-05-11 13:47:24 +00:00
_ = > Err ( InputValueError ::ExpectedType ( value ) ) ,
2020-03-02 00:24:49 +00:00
}
}
2020-03-08 12:35:36 +00:00
fn is_valid ( value : & Value ) -> bool {
match value {
Value ::String ( _ ) = > true ,
_ = > false ,
}
}
2020-05-26 10:34:43 +00:00
fn to_value ( & self ) -> Value {
Value ::String ( self . clone ( ) )
2020-03-02 00:24:49 +00:00
}
}
2020-03-19 09:20:12 +00:00
impl < ' a > Type for & ' a str {
2020-03-02 00:24:49 +00:00
fn type_name ( ) -> Cow < 'static , str > {
2020-03-03 11:15:18 +00:00
Cow ::Borrowed ( " String " )
2020-03-02 00:24:49 +00:00
}
2020-03-03 03:48:00 +00:00
2020-03-03 11:15:18 +00:00
fn create_type_info ( registry : & mut registry ::Registry ) -> String {
2020-05-19 05:27:01 +00:00
< String as Type > ::create_type_info ( registry )
2020-03-03 03:48:00 +00:00
}
2020-03-02 00:24:49 +00:00
}
#[ async_trait::async_trait ]
2020-03-19 09:20:12 +00:00
impl < ' a > OutputValueType for & ' a str {
2020-05-20 00:18:28 +00:00
async fn resolve (
& self ,
_ : & ContextSelectionSet < '_ > ,
_field : & Positioned < Field > ,
) -> Result < serde_json ::Value > {
2020-05-05 13:06:48 +00:00
Ok ( ( * self ) . into ( ) )
2020-03-02 00:24:49 +00:00
}
}