2020-03-03 11:15:18 +00:00
use crate ::registry ;
2020-03-05 13:34:31 +00:00
use crate ::{ ContextSelectionSet , GQLOutputValue , GQLScalar , GQLType , Result , Value } ;
2020-03-02 00:24:49 +00:00
use std ::borrow ::Cow ;
2020-03-03 11:15:18 +00:00
const STRING_DESC :& 'static 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-05 06:23:55 +00:00
impl GQLScalar 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-03-04 02:38:07 +00:00
fn parse ( value : & Value ) -> Option < Self > {
2020-03-02 00:24:49 +00:00
match value {
2020-03-04 02:38:07 +00:00
Value ::String ( s ) = > Some ( s . clone ( ) ) ,
2020-03-03 11:15:18 +00:00
_ = > None ,
2020-03-02 00:24:49 +00:00
}
}
fn to_json ( & self ) -> Result < serde_json ::Value > {
Ok ( self . clone ( ) . into ( ) )
}
}
impl < ' a > GQLType for & ' a str {
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-03-04 06:24:44 +00:00
registry . create_type ::< Self , _ > ( | _ | registry ::Type ::Scalar {
2020-03-03 11:15:18 +00:00
name : Self ::type_name ( ) . to_string ( ) ,
description : Some ( STRING_DESC ) ,
} )
2020-03-03 03:48:00 +00:00
}
2020-03-02 00:24:49 +00:00
}
#[ async_trait::async_trait ]
impl < ' a > GQLOutputValue for & ' a str {
async fn resolve ( & self , _ : & ContextSelectionSet < '_ > ) -> Result < serde_json ::Value > {
Ok ( self . to_string ( ) . into ( ) )
}
}