/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . serialization . json Ċ Ċ import Ġkotlinx . serialization .* Ċ Ċ /** Ċ Ġ* ĠEncoder Ġused Ġby Ġ[ Json ] Ġduring Ġserialization . Ċ Ġ* ĠThis Ġinterface Ġcan Ġbe Ġused Ġto Ġinject Ġdesired Ġbehaviour Ġinto Ġa Ġserialization Ġprocess Ġof Ġ[ Json ]. Ċ Ġ* Ċ Ġ* ĠTyp ical Ġexample Ġof Ġthe Ġusage : Ċ Ġ* Ġ``` Ċ Ġ* Ġ// ĠClass Ġrepresenting ĠEither < Left | Right > Ċ Ġ* Ġsealed Ġclass ĠDummy Either Ġ{ Ċ Ġ* ĠĠ Ġdata Ġclass ĠLeft ( val Ġerror Msg : ĠString ) Ġ: ĠDummy Either () Ċ Ġ* ĠĠ Ġdata Ġclass ĠRight ( val Ġdata : ĠPayload ) Ġ: ĠDummy Either () Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġ// ĠSerializer Ġinject s Ġcustom Ġbehaviour Ġby Ġinspect ing Ġobject Ġcontent Ġand Ġwriting Ċ Ġ* Ġobject ĠEither Serializer Ġ: ĠK Serializer < Dummy Either > Ġ{ Ċ Ġ* ĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠSerial Class Desc Impl (" Dummy Either ") Ċ Ġ* Ċ Ġ* ĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠDummy Either Ġ{ Ċ Ġ* ĠĠĠĠ Ġval Ġinput Ġ= Ġdecoder Ġas ? ĠJson Input Ġ?: Ġthrow ĠSerialization Exception (" This Ġclass Ġcan Ġbe Ġloaded Ġonly Ġby ĠJson ") Ċ Ġ* ĠĠĠĠ Ġval Ġtree Ġ= Ġinput . decode Json () Ġas ? ĠJsonObject Ġ?: Ġthrow ĠSerialization Exception (" Expected ĠJsonObject ") Ċ Ġ* ĠĠĠĠ Ġif Ġ(" error " Ġin Ġtree ) Ġreturn ĠDummy Either . Left ( tree . get Primitive (" error "). content ) Ċ Ġ* ĠĠĠĠ Ġreturn ĠDummy Either . Right ( input . json . decode Json ( tree , ĠPayload . serializer ())) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠDummy Either ) Ġ{ Ċ Ġ* ĠĠĠĠ Ġval Ġoutput Ġ= Ġencoder Ġas ? ĠJson Output Ġ?: Ġthrow ĠSerialization Exception (" This Ġclass Ġcan Ġbe Ġsaved Ġonly Ġby ĠJson ") Ċ Ġ* ĠĠĠĠ Ġval Ġtree Ġ= Ġwhen Ġ( obj ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠ Ġis ĠDummy Either . Left Ġ-> ĠJsonObject ( map Of (" error " Ġto ĠJson Literal ( obj . error Msg ))) Ċ Ġ* ĠĠĠĠĠĠ Ġis ĠDummy Either . Right Ġ-> Ġoutput . json . toJson ( obj . data , ĠPayload . serializer ()) Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġoutput . encode Json ( tree ) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ public Ġinterface ĠJson Output : ĠEncoder , ĠComposite Encoder Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġinstance Ġof Ġthe Ġcurrent Ġ[ Json ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġjson : ĠJson ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġgiven Ġ[ element ] Ġto Ġthe Ġoutput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġencode Json ( element : ĠJson Element ) Ċ }