package Ġio . github . wic ke dev . graphql . scal ars Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġgraphql . Assert Ċ import Ġgraphql . language .* Ċ import Ġgraphql . scal ars . util . Kit Ċ import Ġgraphql . scal ars . util . Kit . typeName Ċ import Ġgraphql . schema . Co erc ing Ċ import Ġgraphql . schema . Co erc ing Parse Literal Exception Ċ import Ġgraphql . schema . Co erc ing Parse Value Exception Ċ import Ġgraphql . schema . GraphQL Scalar Type Ċ import Ġgraphql . util . Fp Kit Ċ import Ġio . r 2 dbc . postgresql . codec . Json Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util . function . Consumer Ċ Ċ val ĠJSON _ OBJECT _ CO ERC ING : ĠCo erc ing < Json ?, ĠAny ?> Ġ= Ġobject Ġ: ĠCo erc ing < Json ?, ĠAny ?> Ġ{ ĊĠĠĠ Ġval Ġmapper : ĠObjectMapper Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( input : ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠJson ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġinput . asString (). trim () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisArray Ġ= Ġjson . startsWith ("[ ") Ġ&& Ġjson . endsWith (" ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( json , ĠList :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( json , ĠMap :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠCo erc ing Parse Value Exception (" Expected Ġtype Ġ' Json ' Ġbut Ġwas Ġ'${ typeName ( input )} '. ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse Value ( input : ĠAny ): ĠJson Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠJson ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠCo erc ing Parse Value Exception (" Expected Ġtype Ġ' Json ' Ġbut Ġwas Ġ'${ typeName ( input )} '. ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse Literal ( input : ĠAny ): ĠJson Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Literal ( input , Ġempty Map ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse Literal ( input : ĠAny , Ġvariables : ĠMap < String , ĠAny ?> ): ĠJson Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJson . of ( parse Json ( input , Ġvariables ). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Json ( input : ĠAny ?, Ġvariables : ĠMap < String , ĠAny ?> ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! is ĠValue < *> Ġ-> Ġthrow ĠCo erc ing Parse Literal Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected ĠAST Ġtype Ġ' Value ' Ġbut Ġwas Ġ'" Ġ+ ĠKit . typeName ( input ) Ġ+ Ġ" '. " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNull Value Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVariable Reference Ġ-> Ġvariables [ input . name ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠArray Value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġparse Literal ( it , Ġvariables ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠObject Value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġinput . object Fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Values : ĠMutable Map < String , ĠAny ?> Ġ= ĠLinkedHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . forEach ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsumer Ġ{ Ġfld : ĠObject Field Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Value Ġ= Ġparse Literal ( fld . value , Ġvariables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Values [ fld . name ] Ġ= Ġparsed Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Value Ġ-> Ġinput . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Value Ġ-> Ġinput . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Value Ġ-> Ġinput . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Value Ġ-> Ġinput . is Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum Value Ġ-> Ġinput . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAssert . assert Should Never H appen (" We Ġhave Ġcovered Ġall ĠValue Ġtypes ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue To Literal ( input : ĠAny ): ĠValue < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString Value ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFloat Value ( BigDecimal . valueOf ( input . toDouble ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFloat Value ( BigDecimal . valueOf ( input )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠBigDecimal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFloat Value ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠBigInteger ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInt Value ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠNumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInt Value ( BigInteger . valueOf ( input . to Long ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBoolean Value ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Fp Kit . is Iterable ( input )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhandle Iterable ( Fp Kit . to Iterable < Any >( input )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġis ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhandle Map ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" The ĠObject Scalar Ġcant Ġhandle Ġvalues Ġof Ġtype Ġ: Ġ" Ġ+ Ġinput . java Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Map ( map : ĠMap < *, Ġ* >): ĠValue < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠObject Value . new Object Value () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġmap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġkey . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlit Ġ= Ġvalue To Literal ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . object Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Field . new Object Field (). name ( name ). value ( lit ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Iterable ( input : ĠIterable < *> ): ĠValue < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues : ĠMutable List < Value < *> ?> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( value To Literal ( value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠArray Value . new Array Value (). values ( values ). build () ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠPostgres Json Scalar : ĠGraphQL Scalar Type Ġ= ĠGraphQL Scalar Type . new Scalar () ĊĠĠĠ Ġ. name (" JSON ") ĊĠĠĠ Ġ. description (" A ĠJSON Ġscalar ") ĊĠĠĠ Ġ. co erc ing ( JSON _ OBJECT _ CO ERC ING ) ĊĠĠĠ Ġ. build ()