package Ġcom . github . d ud gn s 0 5 0 7 . core . mos hi Ċ Ċ import Ġcom . squareup . mos hi .* Ċ import Ġcom . squareup . mos hi . internal . Util Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ class ĠMy Standard Json Adapters Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠBOOLEAN _ JSON _ ADAPTER : ĠJson Adapter < Boolean > Ġ= Ġobject Ġ: ĠJson Adapter < Boolean >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreader . next Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Boolean )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠDOUBLE _ JSON _ ADAPTER : ĠJson Adapter < Double > Ġ= Ġobject Ġ: ĠJson Adapter < Double >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreader . next Double () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠDouble ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Double )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠFLOAT _ JSON _ ADAPTER : ĠJson Adapter < Float > Ġ= Ġobject Ġ: ĠJson Adapter < Float >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġreader . next Double (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDouble Ġcheck Ġfor Ġinfinity Ġafter Ġfloat Ġconversion ; Ġmany Ġdouble s Ġ> ĠFloat . MAX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! reader . is Len ient Ġ&& Ġjava . lang . Float . isIn finite ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJson DataException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" JSON Ġfor bids ĠNaN Ġand Ġinf init ies : Ġ" Ġ+ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġat Ġpath Ġ" Ġ+ Ġreader . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠFloat ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠManual Ġnull Ġpointer Ġcheck Ġfor Ġthe Ġfloat . class Ġadapter . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe ĠNumber Ġoverload Ġso Ġwe Ġwrite Ġout Ġfloat Ġprecision Ġinstead Ġof Ġdouble Ġprecision . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Float )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠINTEGER _ JSON _ ADAPTER : ĠJson Adapter < Int > Ġ= Ġobject Ġ: ĠJson Adapter < Int >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreader . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Integer )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠLONG _ JSON _ ADAPTER : ĠJson Adapter < Long > Ġ= Ġobject Ġ: ĠJson Adapter < Long >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreader . next Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Long )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠSTRING _ JSON _ ADAPTER : ĠJson Adapter < String > Ġ= Ġobject Ġ: ĠJson Adapter < String >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreader . next String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( String )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠERROR _ FORMAT Ġ= Ġ" Expected Ġ% s Ġbut Ġwas Ġ% s Ġat Ġpath Ġ% s " ĊĊĠĠĠĠĠĠĠ Ġval ĠBYTE _ JSON _ ADAPTER : ĠJson Adapter < Byte > Ġ= Ġobject Ġ: ĠJson Adapter < Byte >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠByte Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrange Check Next Int ( reader , Ġ" a Ġbyte ", ĠByte . MIN _ VALUE . toInt (), Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠByte ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value (( value . toInt () Ġand Ġ 0 xff ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Byte )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠCHARACTER _ JSON _ ADAPTER : ĠJson Adapter < Char > Ġ= Ġobject Ġ: ĠJson Adapter < Char >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠChar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġreader . next String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . length Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJson DataException ( String . format ( ERROR _ FORMAT , Ġ" a Ġchar ", Ġ'" '. toString () Ġ+ Ġvalue Ġ+ Ġ'" ', Ġreader . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠChar ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Character )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠSH ORT _ JSON _ ADAPTER : ĠJson Adapter < Short > Ġ= Ġobject Ġ: ĠJson Adapter < Short >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠShort Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrange Check Next Int ( reader , Ġ" a Ġshort ", ĠShort . MIN _ VALUE . toInt (), ĠShort . MAX _ VALUE . toInt ()). to Short () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠShort ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( value . toInt (). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Short )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠF ACT ORY : ĠJson Adapter . Factory Ġ= ĠJson Adapter . Factory Ġ{ Ġtype , Ġannotations , Ġm oshi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotations . isNotEmpty ()) Ġreturn @ Factory Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠBoolean :: class . java Primitive Type ) Ġreturn @ Factory ĠBOOLEAN _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠByte :: class . java Primitive Type ) Ġreturn @ Factory ĠBYTE _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠChar :: class . java Primitive Type ) Ġreturn @ Factory ĠCHARACTER _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠDouble :: class . java Primitive Type ) Ġreturn @ Factory ĠDOUBLE _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠFloat :: class . java Primitive Type ) Ġreturn @ Factory ĠFLOAT _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠInt :: class . java Primitive Type ) Ġreturn @ Factory ĠINTEGER _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠLong :: class . java Primitive Type ) Ġreturn @ Factory ĠLONG _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠShort :: class . java Primitive Type ) Ġreturn @ Factory ĠSH ORT _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠBoolean :: class . java ) Ġreturn @ Factory ĠBOOLEAN _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠByte :: class . java ) Ġreturn @ Factory ĠBYTE _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠChar :: class . java ) Ġreturn @ Factory ĠCHARACTER _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠDouble :: class . java ) Ġreturn @ Factory ĠDOUBLE _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠFloat :: class . java ) Ġreturn @ Factory ĠFLOAT _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠInt :: class . java ) Ġreturn @ Factory ĠINTEGER _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠLong :: class . java ) Ġreturn @ Factory ĠLONG _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠShort :: class . java ) Ġreturn @ Factory ĠSH ORT _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠString :: class . java ) Ġreturn @ Factory ĠSTRING _ JSON _ ADAPTER . null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ=== ĠAny :: class . java ) Ġreturn @ Factory ĠObject Json Adapter ( mos hi ). null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Type Ġ= ĠTypes . getRaw Type ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerated Adapter Ġ= ĠUtil . generated Adapter ( mos hi , Ġtype , Ġraw Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( generated Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Factory Ġgenerated Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Type . is Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Json Adapter ( raw Type Ġas ĠClass < out ĠEnum <* >> ). null Safe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġrange Check Next Int ( reader : ĠJson Reader , Ġtype Message : ĠString ?, Ġmin : ĠInt , Ġmax : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġreader . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ< Ġmin Ġ|| Ġvalue Ġ> Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJson DataException ( String . format ( ERROR _ FORMAT , Ġtype Message , Ġvalue , Ġreader . path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġclass ĠEnum Json Adapter < T Ġ: ĠEnum < T >>( private Ġval Ġenum Type : ĠClass < T >) Ġ: ĠJson Adapter < T >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġname Strings : ĠArray < String ?> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġconstants : ĠArray < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġoptions : ĠJson Reader . Options ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġreader . select String ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġreturn Ġconstants [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan Ġconsume Ġthe Ġstring Ġsafely , Ġwe Ġare Ġterminating Ġanyway . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġreader . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġreader . next String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJson DataException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" Expected Ġone Ġof Ġ" Ġ+ ĠlistOf (* name Strings ) Ġ+ Ġ" Ġbut Ġwas Ġ" Ġ+ Ġname Ġ+ Ġ" Ġat Ġpath Ġ" Ġ+ Ġpath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . value ( name Strings [ value !!. ordinal ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter (" Ġ+ Ġenum Type . name Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstants Ġ= Ġenum Type . enum Constants ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Strings Ġ= ĠarrayOf Null s ( constants . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġconstants . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstant Ġ= Ġconstants [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġenum Type . getField ( constant . name ). getAnnotation ( Json :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġannotation ?. name Ġ?: Ġconstant . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Strings [ i ] Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= ĠJson Reader . Options . of (* name Strings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Field Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Missing Ġfield Ġin Ġ" Ġ+ Ġenum Type . name , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġadapter Ġis Ġused Ġwhen Ġthe Ġdeclared Ġtype Ġis Ġ` java . lang . Object `. ĠTypically Ġthe Ġruntime ĊĠĠĠĠĠĠĠĠ Ġ* Ġtype Ġis Ġsomething Ġelse , Ġand Ġwhen Ġencoding ĠJSON Ġthis Ġdeleg ates Ġto Ġthe Ġruntime Ġtype 's Ġadapter . ĊĠĠĠĠĠĠĠĠ Ġ* ĠFor Ġdecoding Ġ( where Ġthere Ġis Ġno Ġruntime Ġtype Ġto Ġinspect ), Ġthis Ġuses Ġmaps Ġand Ġlists . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġadapter Ġneeds Ġa ĠM oshi Ġinstance Ġto Ġlook Ġup Ġthe Ġappropriate Ġadapter Ġfor Ġruntime Ġtypes Ġas ĊĠĠĠĠĠĠĠĠ Ġ* Ġthey Ġare Ġencountered . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġclass ĠObject Json Adapter ( private Ġval Ġm oshi : ĠM oshi ) Ġ: ĠJson Adapter < Any ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlist Json Adapter : ĠJson Adapter < List <* >> Ġ= Ġm oshi . adapter < List < *> >( Mutable List :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap Adapter : ĠJson Adapter < Map < *, Ġ* >> Ġ= Ġm oshi . adapter < Map < *, Ġ* >>( Mutable Map :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstring Adapter : ĠJson Adapter < String > Ġ= Ġm oshi . adapter ( String :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdouble Adapter : ĠJson Adapter < Double > Ġ= Ġm oshi . adapter ( Double :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġboolean Adapter : ĠJson Adapter < Boolean > Ġ= Ġm oshi . adapter ( Boolean :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( reader . peek ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . Token . BEGIN _ ARRAY Ġ-> Ġlist Json Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . Token . BEGIN _ OBJECT Ġ-> Ġmap Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . Token . STRING Ġ-> Ġstring Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . Token . NUMBER Ġ-> Ġdouble Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . Token . BOOLEAN Ġ-> Ġboolean Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader . Token . NULL Ġ-> Ġreader . next Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġa Ġvalue Ġbut Ġwas Ġ" Ġ+ Ġreader . peek () Ġ+ Ġ" Ġat Ġpath Ġ" Ġ+ Ġreader . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Class : ĠClass < *> Ġ= Ġvalue !!. java Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Class Ġ== ĠAny :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . begin Object () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . end Object () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm oshi . adapter < Any >( toJson Type ( value Class ), ĠUtil . NO _ AN NOT ATIONS ). toJson ( writer , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġtype Ġto Ġlook Ġup Ġa Ġtype Ġadapter Ġfor Ġwhen Ġwriting Ġ` value ` Ġto ĠJSON . ĠWithout ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthis , Ġattempts Ġto Ġemit Ġstandard Ġtypes Ġlike Ġ` Linked HashMap ` Ġwould Ġfail Ġbecause ĠM oshi Ġdoesn 't ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġprovide Ġbuilt - in Ġadapters Ġfor Ġimplementation Ġtypes . ĠIt Ġknows Ġhow Ġto Ġ** write ** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthose Ġtypes , Ġbut Ġlack s Ġa Ġmechanism Ġto Ġread Ġthem Ġbecause Ġit Ġdoesn 't Ġknow Ġhow Ġto Ġfind Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġappropriate Ġconstructor . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun ĠtoJson Type ( value Class : ĠClass < *> ): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Mutable Map :: class . java . isAssignableFrom ( value Class )) Ġreturn ĠMutable Map :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Mutable Collection :: class . java . isAssignableFrom ( value Class )) ĠMutable Collection :: class . java Ġelse Ġvalue Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Json Adapter ( Object )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }