2020-05-09 09:55:04 +00:00
use crate ::parser ::Pos ;
2020-05-10 10:27:46 +00:00
use crate ::{
registry , ContextSelectionSet , InputValueError , InputValueResult , OutputValueType , Result ,
ScalarType , Type , Value ,
} ;
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-03-21 01:32:13 +00:00
const STRING_DESC : & str = " 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-03-03 11:15:18 +00:00
2020-04-27 09:58:10 +00:00
#[ Scalar(internal) ]
impl ScalarType for String {
2020-03-02 00:24:49 +00:00
fn type_name ( ) -> & 'static str {
2020-03-03 11:15:18 +00:00
" String "
}
fn description ( ) -> Option < & 'static str > {
Some ( STRING_DESC )
2020-03-02 00:24:49 +00:00
}
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-03-25 03:39:28 +00:00
fn to_json ( & self ) -> Result < serde_json ::Value > {
Ok ( self . clone ( ) . into ( ) )
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-15 02:08:37 +00:00
registry . create_type ::< Self , _ > ( | _ | registry ::MetaType ::Scalar {
2020-03-03 11:15:18 +00:00
name : Self ::type_name ( ) . to_string ( ) ,
description : Some ( STRING_DESC ) ,
2020-03-08 12:35:36 +00:00
is_valid : | value | match value {
Value ::String ( _ ) = > true ,
_ = > false ,
} ,
2020-03-03 11:15:18 +00:00
} )
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-05 13:06:48 +00:00
async fn resolve ( & self , _ : & ContextSelectionSet < '_ > , _pos : Pos ) -> Result < serde_json ::Value > {
Ok ( ( * self ) . into ( ) )
2020-03-02 00:24:49 +00:00
}
}