package Ġexamples Ċ Ċ import Ġexamples . Coding Example . Event Ċ import Ġexamples . Coding Example . Event Codec Ċ import Ġio . fluid sonic . json .* Ċ import Ġjava . time .* ĊĊ Ċ fun Ġmain () Ġ{ Ċ ĉ // ĠUsing Ġa Ġcodec Ġfor Ġdecoding ĠAND Ġencoding Ġspecific Ġclasses Ġsimpl ifies Ġboth , ĠJSON Ġparsing ĠAND Ġserialization Ġ:) ĊĊ ĉ val Ġoriginal Ġ= ĠlistOf ( Ċĉ ĉ Event ( id Ġ= Ġ 1 , Ġdate Ġ= ĠInstant . of Epoch Second ( 1 0 0 0 0 0 0 0 0 0 ), Ġtitle Ġ= Ġ" One ", Ġtype Ġ= ĠEvent . Type . GO OD _ N IGHT _ OF _ SLEEP ), Ċĉ ĉ Event ( id Ġ= Ġ 2 , Ġdate Ġ= ĠInstant . of Epoch Second ( 2 0 0 0 0 0 0 0 0 0 ), Ġtitle Ġ= Ġ" Two ", Ġtype Ġ= ĠEvent . Type . VERY _ IMPORTANT _ ME ET ING ), Ċĉ ĉ Event ( id Ġ= Ġ 3 , Ġdate Ġ= ĠInstant . of Epoch Second ( 3 0 0 0 0 0 0 0 0 0 ), Ġtitle Ġ= Ġ" Three ", Ġtype Ġ= ĠEvent . Type . GO OD _ N IGHT _ OF _ SLEEP ), Ċĉ ĉ Event ( id Ġ= Ġ 4 , Ġdate Ġ= ĠInstant . of Epoch Second ( 4 0 0 0 0 0 0 0 0 0 ), Ġtitle Ġ= Ġ" Four ", Ġtype Ġ= ĠEvent . Type . GO OD _ N IGHT _ OF _ SLEEP ), Ċĉ ĉ Event ( id Ġ= Ġ 5 , Ġdate Ġ= ĠInstant . of Epoch Second ( 5 0 0 0 0 0 0 0 0 0 ), Ġtitle Ġ= Ġ" Five ", Ġtype Ġ= ĠEvent . Type . M UM ), Ċĉ ĉ Event ( id Ġ= Ġ 6 , Ġtitle Ġ= Ġ" Six ", Ġtype Ġ= ĠEvent . Type . GO OD _ N IGHT _ OF _ SLEEP ) Ċ ĉ ) ĊĊ ĉ val Ġserializer Ġ= ĠJson Coding Serializer . builder () Ċĉ ĉ . encoding With ( Event Codec ) Ċĉ ĉ . build () ĊĊ ĉ val Ġjson Ġ= Ġserializer . serialize Value ( original ) ĊĊ ĉ val Ġparser Ġ= ĠJson Coding Parser . builder () Ċĉ ĉ . de coding With ( Event Codec ) Ċĉ ĉ . build () ĊĊ ĉ val Ġparsed Ġ= Ġparser . parse Value OfType < List < Event >>( json ) ĊĊ ĉ check ( original Ġ== Ġparsed ) Ġ// Ġto ĠJSON Ġand Ġback ! ĊĊ ĉ println ( parsed ) Ċ } ĊĊ Ċ @ Suppress (" Enum Entry Name ") Ċ private Ġobject ĠCoding Example Ġ{ ĊĊĊ ĉ data Ġclass ĠEvent ( Ċĉ ĉ val Ġid : ĠInt , Ċĉ ĉ val Ġdate : ĠInstant ? Ġ= Ġnull , Ċĉ ĉ val Ġtitle : ĠString , Ċĉ ĉ val Ġtype : ĠType Ċ ĉ ) Ġ{ ĊĊĉ ĉ enum Ġclass ĠType Ġ{ ĊĊĉĉ ĉ GO OD _ N IGHT _ OF _ SLEEP , Ċĉĉ ĉ M UM , Ċĉĉ ĉ VERY _ IMPORTANT _ ME ET ING Ċĉ ĉ } Ċ ĉ } ĊĊĊ ĉ object ĠEvent Codec Ġ: ĠAbstract Json Codec < Event , ĠJson Coding Context >() Ġ{ ĊĊĉ ĉ override Ġfun ĠJson Decoder < Json Coding Context >. decode ( valueType : ĠJson Coding Type < Event >): ĠEvent Ġ{ Ċĉĉ ĉ var Ġid : ĠInt ? Ġ= Ġnull Ċĉĉ ĉ var Ġdate : ĠInstant ? Ġ= Ġnull Ċĉĉ ĉ var Ġtitle : ĠString ? Ġ= Ġnull Ċĉĉ ĉ var Ġtype : ĠEvent . Type ? Ġ= Ġnull ĊĊĉĉ ĉ read From Map By Element Value Ġ{ Ġkey Ġ-> Ċĉĉĉ ĉ when Ġ( key ) Ġ{ Ċĉĉĉĉ ĉ " id " Ġ-> Ġid Ġ= Ġread Int () Ċĉĉĉĉ ĉ " date " Ġ-> Ġdate Ġ= Ġread Value OfType () Ċĉĉĉĉ ĉ " title " Ġ-> Ġtitle Ġ= Ġread String () Ċĉĉĉĉ ĉ " type " Ġ-> Ġtype Ġ= Ġread Value OfType () Ċĉĉĉĉ ĉ else Ġ-> Ġskip Value () Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĊĉĉ ĉ return ĠEvent ( Ċĉĉĉ ĉ id Ġ= Ġid Ġ?: Ġmissing Property Error (" id "), Ċĉĉĉ ĉ date Ġ= Ġdate , Ċĉĉĉ ĉ title Ġ= Ġtitle Ġ?: Ġmissing Property Error (" title "), Ċĉĉĉ ĉ type Ġ= Ġtype Ġ?: Ġmissing Property Error (" type ") Ċĉĉ ĉ ) Ċĉ ĉ } ĊĊĊĉ ĉ override Ġfun ĠJson Encoder < Json Coding Context >. encode ( value : ĠEvent ) Ġ{ Ċĉĉ ĉ write Into Map Ġ{ Ċĉĉĉ ĉ write Map Element (" id ", Ġint Ġ= Ġvalue . id ) Ċĉĉĉ ĉ write Map Element (" date ", Ġvalue Ġ= Ġvalue . date , Ġskip If Null Ġ= Ġtrue ) Ċĉĉĉ ĉ write Map Element (" title ", Ġstring Ġ= Ġvalue . title ) Ċĉĉĉ ĉ write Map Element (" type ", Ġvalue Ġ= Ġvalue . type ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ } Ċ