package Ġcom . st il ll yn nt he clo set . kot lr . json . wrapper Ċ Ċ import Ġcom . squareup . mos hi . FromJson Ċ 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 Ċ import Ġcom . squareup . mos hi . ToJson Ċ import Ġcom . squareup . mos hi . Types Ċ import Ġcom . st il ll yn nt he clo set . kot lr . types . Blog Ċ import Ġcom . st il ll yn nt he clo set . kot lr . types . Post Ċ import Ġcom . st il ll yn nt he clo set . kot lr . types . User Ċ import Ġkotlin . Boolean Ċ import Ġkotlin . Int Ċ import Ġkotlin . Long Ċ import Ġkotlin . String Ċ Ċ /** Ċ Ġ* ĠUser Json Adapter Ġ- ĠA Ġcustom Ġadapter Ġto Ġhelp ĠM oshi Ġparse Ġ[ User ] Ġobjects . Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġnecessary Ġbecause Ġdepending Ġon Ġthe Ġcircumstances , Ġthe Ġ` following ` Ġproperty Ġcan Ġeither Ġbe Ġa Ġboolean Ċ Ġ* Ġrepresenting Ġif Ġyou Ġare Ġfollowing Ġthat Ġuser , Ġor Ġan Ġint Ġof Ġthe Ġnumber Ġof Ġb logs Ġthat Ġthis Ġuser Ġfollows . Ċ Ġ* Ċ Ġ* Ġ@ author Ġhigh th under Ċ Ġ* Ġ@ since Ġ 2 0 1 8 - 1 1 - 1 0 Ċ Ġ*/ Ċ internal Ġclass ĠUser Json Adapter ( mos hi : ĠM oshi ) Ġ: ĠJson Adapter < User >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġoptions : ĠJson Reader . Options Ġ= ĊĠĠĠĠĠĠĠ ĠJson Reader . Options . of (" blogs ", Ġ" name ", Ġ" following ", Ġ" url ", Ġ" updated ", Ġ" likes ", Ġ" default _ post _ format ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable ListOf Blog Adapter : ĠJson Adapter < List < Blog > ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTypes . new Parameterized Type ( List :: class . java , ĠBlog :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" blogs " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġnullable String Adapter : ĠJson Adapter < String ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( String :: class . java , Ġempty Set (), Ġ" name ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable Int Adapter : ĠJson Adapter < Int ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( Int :: class . java ObjectType , Ġempty Set (), Ġ" total Following ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable Boolean Adapter : ĠJson Adapter < Boolean ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( Boolean :: class . java ObjectType , Ġempty Set (), Ġ" is User Follow ed ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable Long Adapter : ĠJson Adapter < Long ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( Long :: class . java ObjectType , Ġempty Set (), Ġ" updated ") ĊĊĠĠĠ Ġprivate Ġval Ġnullable Post Format Adapter : ĠJson Adapter < Post . Post Format ?> Ġ= ĊĠĠĠĠĠĠĠ Ġm oshi . adapter ( Post . Post Format :: class . java , Ġempty Set (), Ġ" default Post Format ") ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Generated Json Adapter ( User )" ĊĊĠĠĠ Ġ@ FromJson ĊĠĠĠ Ġoverride Ġfun Ġfrom Json ( reader : ĠJson Reader ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġb logs : ĠList < Blog >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġb logs Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġname Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Following : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Following Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis User Follow ed : ĠBoolean ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġis User Follow ed Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġurl Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġupdated : ĠLong ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġupdated Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġlikes : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġlikes Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġdefault Post Format : ĠPost . Post Format ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġdefault Post Format Set Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreader . begin Object () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( reader . select Name ( options )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb logs Ġ= Ġnullable ListOf Blog Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb logs Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġnullable String Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reader . peek () Ġ== ĠJson Reader . Token . NUMBER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Following Ġ= Ġnullable Int Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Following Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis User Follow ed Ġ= Ġnullable Boolean Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis User Follow ed Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġnullable String Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Ġ= Ġnullable Long Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġnullable Int Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Post Format Ġ= Ġnullable Post Format Adapter . fromJson ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Post Format Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUnknown Ġname , Ġskip Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . skip Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . skip Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreader . end Object () ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠUser () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb logs Ġ= Ġif Ġ( blogs Set ) Ġb logs Ġelse Ġresult . blogs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġif Ġ( name Set ) Ġname Ġelse Ġresult . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Following Ġ= Ġif Ġ( total Following Set ) Ġtotal Following Ġelse Ġresult . total Following , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis User Follow ed Ġ= Ġif Ġ( is User Follow ed Set ) Ġis User Follow ed Ġelse Ġresult . is User Follow ed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġif Ġ( url Set ) Ġurl Ġelse Ġresult . url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Ġ= Ġif Ġ( updated Set ) Ġupdated Ġelse Ġresult . updated , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġif Ġ( likes Set ) Ġlikes Ġelse Ġresult . likes , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Post Format Ġ= Ġif Ġ( default Post Format Set ) Ġdefault Post Format Ġelse Ġresult . default Post Format , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ToJson ĊĠĠĠ Ġoverride Ġfun ĠtoJson ( writer : ĠJson Writer , Ġvalue : ĠUser ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" value Ġwas Ġnull ! ĠWrap Ġin Ġ. null Safe () Ġto Ġwrite Ġnullable Ġvalues .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . begin Object () ĊĠĠĠĠĠĠĠ Ġwriter . name (" blogs ") ĊĠĠĠĠĠĠĠ Ġnullable ListOf Blog Adapter . toJson ( writer , Ġvalue . blogs ) ĊĠĠĠĠĠĠĠ Ġwriter . name (" name ") ĊĠĠĠĠĠĠĠ Ġnullable String Adapter . toJson ( writer , Ġvalue . name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value . total Following Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . name (" following ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Int Adapter . toJson ( writer , Ġvalue . total Following ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . name (" following ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Boolean Adapter . toJson ( writer , Ġvalue . is User Follow ed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . name (" url ") ĊĠĠĠĠĠĠĠ Ġnullable String Adapter . toJson ( writer , Ġvalue . url ) ĊĠĠĠĠĠĠĠ Ġwriter . name (" updated ") ĊĠĠĠĠĠĠĠ Ġnullable Long Adapter . toJson ( writer , Ġvalue . updated ) ĊĠĠĠĠĠĠĠ Ġwriter . name (" likes ") ĊĠĠĠĠĠĠĠ Ġnullable Int Adapter . toJson ( writer , Ġvalue . likes ) ĊĠĠĠĠĠĠĠ Ġwriter . name (" default _ post _ format ") ĊĠĠĠĠĠĠĠ Ġnullable Post Format Adapter . toJson ( writer , Ġvalue . default Post Format ) ĊĠĠĠĠĠĠĠ Ġwriter . end Object () ĊĠĠĠ Ġ} Ċ } Ċ