package Ġtests . coding Ċ Ċ import Ġio . fluid sonic . json .* Ċ import Ġtests . coding . J aeger .* ĊĊ Ċ internal Ġobject ĠJ aeger Codec Ġ: ĠAbstract Json Codec < J aeger , ĠTest Coder Context >( Ċ ĉ additional Providers Ġ= ĠlistOf ( StatusCode c ) Ċ ) Ġ{ ĊĊ ĉ override Ġfun ĠJson Decoder < Test Coder Context >. decode ( valueType : ĠJson Coding Type < J aeger >): ĠJ aeger Ġ{ Ċĉ ĉ var Ġheight : ĠDouble ? Ġ= Ġnull Ċĉ ĉ var Ġlaunch Date : ĠYear Month Day ? Ġ= Ġnull Ċĉ ĉ var Ġmark : ĠInt ? Ġ= Ġnull Ċĉ ĉ var Ġname : ĠString ? Ġ= Ġnull Ċĉ ĉ var Ġorigin : ĠString ? Ġ= Ġnull Ċĉ ĉ var Ġstatus : ĠStatus ? Ġ= Ġnull Ċĉ ĉ var Ġweight : ĠDouble ? Ġ= Ġnull ĊĊĉ ĉ read From Map By Element Value Ġ{ Ġkey Ġ-> Ċĉĉ ĉ when Ġ( key ) Ġ{ Ċĉĉĉ ĉ Keys . height Ġ-> Ġheight Ġ= Ġread Double () Ċĉĉĉ ĉ Keys . launch Date Ġ-> Ġlaunch Date Ġ= Ġread Value OfType () Ċĉĉĉ ĉ Keys . mark Ġ-> Ġmark Ġ= Ġread Int () Ċĉĉĉ ĉ Keys . name Ġ-> Ġname Ġ= Ġread String () Ċĉĉĉ ĉ Keys . origin Ġ-> Ġorigin Ġ= Ġread String () Ċĉĉĉ ĉ Keys . status Ġ-> Ġstatus Ġ= Ġread Value OfType () Ċĉĉĉ ĉ Keys . weight Ġ-> Ġweight Ġ= Ġread Double () Ċĉĉĉ ĉ else Ġ-> Ġskip Value () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return ĠJ aeger ( Ċĉĉ ĉ height Ġ= Ġheight Ġ?: Ġmissing Property Error (" height "), Ċĉĉ ĉ launch Date Ġ= Ġlaunch Date Ġ?: Ġmissing Property Error (" launch Date "), Ċĉĉ ĉ mark Ġ= Ġmark Ġ?: Ġmissing Property Error (" mark "), Ċĉĉ ĉ name Ġ= Ġname Ġ?: Ġmissing Property Error (" name "), Ċĉĉ ĉ origin Ġ= Ġorigin Ġ?: Ġmissing Property Error (" origin "), Ċĉĉ ĉ status Ġ= Ġstatus Ġ?: Ġmissing Property Error (" status "), Ċĉĉ ĉ weight Ġ= Ġweight Ġ?: Ġmissing Property Error (" weight ") Ċĉ ĉ ) Ċ ĉ } ĊĊĊ ĉ override Ġfun ĠJson Encoder < Test Coder Context >. encode ( value : ĠJ aeger ) Ġ{ Ċĉ ĉ write Into Map Ġ{ Ċĉĉ ĉ write Map Element ( Keys . height , Ġdouble Ġ= Ġvalue . height ) Ċĉĉ ĉ write Map Element ( Keys . launch Date , Ġvalue Ġ= Ġvalue . launch Date ) Ċĉĉ ĉ write Map Element ( Keys . mark , Ġint Ġ= Ġvalue . mark ) Ċĉĉ ĉ write Map Element ( Keys . name , Ġstring Ġ= Ġvalue . name ) Ċĉĉ ĉ write Map Element ( Keys . origin , Ġstring Ġ= Ġvalue . origin ) Ċĉĉ ĉ write Map Element ( Keys . status , Ġvalue Ġ= Ġvalue . status ) Ċĉĉ ĉ write Map Element ( Keys . weight , Ġdouble Ġ= Ġvalue . weight ) Ċĉ ĉ } Ċ ĉ } ĊĊĊ ĉ private Ġobject ĠKeys Ġ{ ĊĊĉ ĉ const Ġval Ġheight Ġ= Ġ" height " Ċĉ ĉ const Ġval Ġlaunch Date Ġ= Ġ" launch Date " Ċĉ ĉ const Ġval Ġmark Ġ= Ġ" mark " Ċĉ ĉ const Ġval Ġname Ġ= Ġ" name " Ċĉ ĉ const Ġval Ġorigin Ġ= Ġ" origin " Ċĉ ĉ const Ġval Ġstatus Ġ= Ġ" status " Ċĉ ĉ const Ġval Ġweight Ġ= Ġ" weight " Ċ ĉ } ĊĊĊ ĉ object ĠStatus Codec Ġ: ĠAbstract Json Codec < Status , ĠTest Coder Context >() Ġ{ ĊĊĉ ĉ override Ġfun ĠJson Decoder < Test Coder Context >. decode ( valueType : ĠJson Coding Type < Status >) Ġ= Ċĉĉ ĉ when Ġ( val Ġid Ġ= Ġread String ()) Ġ{ Ċĉĉĉ ĉ " destroy ed " Ġ-> ĠStatus . destroy ed Ċĉĉĉ ĉ else Ġ-> Ġinvalid ValueError (" unknown ĠJ Ã¤ ger Ġstatus : Ġ$ id ") Ċĉĉ ĉ } ĊĊĊĉ ĉ override Ġfun ĠJson Encoder < Test Coder Context >. encode ( value : ĠStatus ) Ġ{ Ċĉĉ ĉ writeString ( when Ġ( value ) Ġ{ Ċĉĉĉ ĉ Status . destroy ed Ġ-> Ġ" destroy ed " Ċĉĉ ĉ }) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ