/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠSquare ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . squareup . wire Ċ Ċ import Ġcom . squareup . mos hi . Json Adapter Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . Types Ċ import Ġcom . squareup . wire . internal . Enum Json Formatter Ċ import Ġcom . squareup . wire . internal . create Runtime Message Adapter Ċ import Ġjava . lang . reflect . Type Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Json Adapter . Factory ] Ġthat Ġallows ĠWire Ġmessages Ġto Ġbe Ġserialized Ġand Ġdeserialized Ġusing Ġthe Ċ Ġ* ĠM oshi ĠJson Ġlibrary . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠM oshi Ġm oshi Ġ= Ġnew ĠM oshi . Builder () Ċ Ġ* ĠĠĠĠ Ġ. add ( new ĠWire Json Adapter Factory ()) Ċ Ġ* ĠĠĠĠ Ġ. build (); Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠThe Ġresulting Ġ[ M oshi ] Ġinstance Ġwill Ġbe Ġable Ġto Ġserialize Ġand Ġdeserialize ĠWire Ġ[ Message ] Ġtypes , Ċ Ġ* Ġincluding Ġextensions . ĠIt Ġignores Ġunknown Ġfield Ġvalues . ĠThe ĠJSON Ġencoding Ġis Ġintended Ġto Ġbe Ċ Ġ* Ġcompatible Ġwith Ġthe Ġ[ protobuf - java - format ]( https :// code . google . com / p / protobuf - java - format /) Ċ Ġ* Ġlibrary . Ċ Ġ* Ċ Ġ* ĠIn ĠProto 3 , Ġif Ġa Ġfield Ġis Ġset Ġto Ġits Ġdefault Ġ( or Ġidentity ) Ġvalue , Ġit Ġwill Ġbe Ġomitted Ġin Ġthe Ċ Ġ* ĠJSON - encoded Ġdata . ĠSet Ġ[ write Identity Values ] Ġto Ġtrue Ġif Ġyou Ġwant ĠWire Ġto Ġalways Ġwrite Ġvalues , Ċ Ġ* Ġincluding Ġdefault Ġones . Ċ Ġ*/ Ċ class ĠWire Json Adapter Factory Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġprivate Ġval Ġtype Url To Adapter : ĠMap < String , ĠProto Adapter <* >> Ġ= Ġmap Of (), ĊĠ Ġprivate Ġval Ġwrite Identity Values : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ: ĠJson Adapter . Factory Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġa Ġnew ĠWire Json Adapter Factory Ġthat Ġcan Ġencode Ġthe Ġmessages Ġfor Ġ[ adapters ] Ġif Ġthey 're ĊĠĠ Ġ* Ġused Ġwith Ġ[ Any Message ]. ĊĠĠ Ġ*/ ĊĠ Ġfun Ġplus ( adapters : ĠList < Proto Adapter <* >> ): ĠWire Json Adapter Factory Ġ{ ĊĠĠĠ Ġval Ġnew Map Ġ= Ġtype Url To Adapter . to Mutable Map () ĊĠĠĠ Ġfor Ġ( adapter Ġin Ġadapters ) Ġ{ ĊĠĠĠĠĠ Ġval Ġkey Ġ= Ġadapter . type Url Ġ?: Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠ Ġ" re compile Ġ${ adapter . type } Ġto Ġuse Ġit Ġwith ĠWire Json Adapter Factory " ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġnew Map [ key ] Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠWire Json Adapter Factory ( new Map , Ġwrite Identity Values ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġa Ġnew ĠWire Json Adapter Factory Ġthat Ġcan Ġencode Ġthe Ġmessages Ġfor Ġ[ adapter ] Ġif Ġthey 're ĊĠĠ Ġ* Ġused Ġwith Ġ[ Any Message ]. ĊĠĠ Ġ*/ ĊĠ Ġfun Ġplus ( adapter : ĠProto Adapter < *> ): ĠWire Json Adapter Factory Ġ{ ĊĠĠĠ Ġreturn Ġplus ( listOf ( adapter )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate ( ĊĠĠĠ Ġtype : ĠType , ĊĠĠĠ Ġannotations : ĠSet < Annotation >, ĊĠĠĠ Ġm oshi : ĠM oshi ĊĠ Ġ): ĠJson Adapter < *> ? Ġ{ ĊĠĠĠ Ġval Ġraw Type Ġ= ĠTypes . getRaw Type ( type ) ĊĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġannotations . isNotEmpty () Ġ-> Ġnull ĊĠĠĠĠĠ Ġraw Type Ġ== ĠAny Message :: class . java Ġ-> ĠAny Message Json Adapter ( mos hi , Ġtype Url To Adapter ) ĊĠĠĠĠĠ ĠMessage :: class . java . isAssignableFrom ( raw Type ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Adapter Ġ= Ġcreate Runtime Message Adapter < Nothing , ĠNothing >( type Ġas ĠClass < Nothing >, Ġwrite Identity Values ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Adapters Ġ= ĠM oshi Json Integration . json Adapters ( message Adapter , Ġm oshi ) ĊĠĠĠĠĠĠĠ Ġval Ġred acted Fields Adapter Ġ= Ġm oshi . adapter < List < String >>( ĊĠĠĠĠĠĠĠĠĠ ĠTypes . new Parameterized Type ( List :: class . java , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠMessage Json Adapter ( message Adapter , Ġjson Adapters , Ġred acted Fields Adapter ). null Safe () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠWire Enum :: class . java . isAssignableFrom ( raw Type ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenum Adapter Ġ= ĠRuntime Enum Adapter . create ( type Ġas ĠClass < Nothing >) ĊĠĠĠĠĠĠĠ Ġval Ġenum Json Formatter Ġ= ĠEnum Json Formatter ( enum Adapter ) ĊĠĠĠĠĠĠĠ ĠEnum Json Adapter ( enum Json Formatter ). null Safe () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ