package Ġcom . jay r ave . mos hi . pri st ine Models Ċ Ċ import Ġcom . squareup . mos hi . Json Adapter Ċ import Ġcom . squareup . mos hi . Json Reader Ċ import Ġcom . squareup . mos hi . Json Writer Ċ import Ġcom . squareup . mos hi . M oshi Ċ Ċ internal Ġclass ĠField Mapping Impl < in ĠT Ġ: ĠAny , ĠF >( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString , Ġoverride Ġval Ġvalue Can BeNull : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Extractor : ĠProperty Extractor < T , ĠF >, ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġjson Adapter : ĠJson Adapter < F >? Ġ= Ġnull ) Ġ: ĊĠĠĠĠĠĠĠ ĠField Mapping < T , ĠF > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġread Values Ġ= ĠThread Local < F ?> () ĊĊĠĠĠ Ġoverride Ġfun Ġexisting Json Adapter Or Acquire From ( mos hi : ĠM oshi ): ĠJson Adapter < F > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Adapter Ġ?: Ġm oshi . adapter ( property Extractor . type ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġacquire Json Adapter If Required ( mos hi : ĠM oshi ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( json Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Adapter Ġ= Ġm oshi . adapter ( property Extractor . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Throws ( Value Can Not Be NullException :: class ) ĊĠĠĠ Ġfun Ġlast Read Value In Current Thread (): ĠF Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIt Ġseems Ġthat Ġeven Ġif Ġ[ F ] Ġis Ġa Ġnon - null Ġtype , Ġthis Ġmethod Ġwill Ġhapp ily Ġreturn Ġa ĊĠĠĠĠĠĠĠ Ġ// Ġ` null ` Ġvalue Ġ( they Ġare Ġno Ġnull ability Ġchecks ĠI Ġcould Ġsee Ġin Ġthe Ġde compiled Ġcode . ĊĠĠĠĠĠĠĠ Ġ// ĠI Ġguess Ġbecause Ġof Ġer asure Ġthere Ġisn 't Ġenough Ġinformation ). ĠTherefore Ġdo Ġa Ġmanual ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġ& Ġthrow Ġif Ġrequired ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġread Values . get () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value Can BeNull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġvalue Ġas ĠF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠValue Can Not Be NullException ("$ name Ġcan 't Ġbe Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġclear Last Read Value In Current Thread () Ġ= Ġread Values . remove () ĊĠĠĠ Ġfun Ġread ( reader : ĠJson Reader ) Ġ= Ġread Values . set ( acquire d Adapter (). fromJson ( reader )) ĊĠĠĠ Ġfun Ġwrite ( writer : ĠJson Writer , Ġmodel : ĠT ) Ġ= Ġacquired Adapter (). toJson ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter , Ġproperty Extractor . extract From ( model ) ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġprivate Ġfun Ġacquired Adapter (): ĠJson Adapter < F > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Adapter Ġ?: Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Adapter Ġis Ġstill Ġnot Ġacquired Ġfor Ġproperty : Ġ$ name " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThrow n Ġwhen Ġ` null ` Ġseems Ġto Ġbe Ġthe Ġvalue Ġfor Ġa Ġnon - null Ġtype ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġclass ĠValue Can Not Be NullException ( message : ĠString ) Ġ: ĠRuntimeException ( message ) Ċ }