@ file : Opt In ( kotlin x . serialization . Experimental Serialization Api :: class , Ġkotlinx . serialization . Internal Serialization Api :: class ) Ċ Ċ package Ġmod . luck y . tools Ċ Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . descriptors .* Ċ import Ġkotlinx . serialization . builtins .* Ċ import Ġkotlinx . serialization . encoding .* Ċ import Ġkotlinx . serialization . json .* Ċ import Ġmod . luck y . common . attribute .* Ċ import Ġcom . char les k orn . k aml .* Ċ import Ġjava . io . File Ċ Ċ enum Ġclass ĠBlock State Type Ġ{ ĊĠĠĠ ĠBOOLEAN , ĊĠĠĠ ĠNUMBER , ĊĠĠĠ ĠSTRING , Ċ } Ċ Ċ class ĠBlock State ( ĊĠĠĠ Ġval Ġblock State Type : ĠBlock State Type , ĊĠĠĠ Ġval Ġvalue : ĠAny , Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġto Attr (): ĠAttr Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( block State Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBlock State Type . BOOLEAN Ġ-> Ġboolean Attr Of ( value Ġas ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBlock State Type . NUMBER Ġ-> ĠValue Attr ( Attr Type . BYTE , Ġ( value Ġas ĠNumber ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBlock State Type . STRING Ġ-> Ġstring Attr Of ( value Ġas ĠString ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠBlock State Ġ&& Ġvalue Ġ== Ġother . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠValue Serializer Ġ: ĠAny Serializer () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġserializers Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class Ġto ĠBoolean . serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class Ġto ĠInt . serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class Ġto ĠString . serializer (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠBlock State :: class ) ĠĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Serializer < BlockState > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= Ġbuild Serial Descriptor (" BlockState ", ĠSerial Kind . CONTEXT UAL ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠBlock State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . encode Serializable Value ( Value Serializer , Ġvalue . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠBlock State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Decoder Ġ= Ġdecoder . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue Decoder . decode Serializable Element < Any >( descriptor , Ġ 0 , ĠValue Serializer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> ĠBlock State ( BlockState Type . BOOLEAN , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> ĠBlock State ( BlockState Type . NUMBER , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> ĠBlock State ( BlockState Type . STRING , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Invalid Ġblock Ġstate Ġvalue Ġ'${ value }' ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Attr ( attr : ĠAttr ): ĠBlock State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( attr . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttr Type . BOOLEAN Ġ-> ĠBlock State ( BlockState Type . BOOLEAN , Ġ( attr Ġas ĠValue Attr ). value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttr Type . BYTE Ġ-> ĠBlock State ( BlockState Type . NUMBER , Ġ(( attr Ġas ĠValue Attr ). value Ġas ĠByte ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttr Type . STRING Ġ-> ĠBlock State ( BlockState Type . STRING , Ġ( attr Ġas ĠValue Attr ). value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠBlock States Ġ= ĠMap < String , ĠBlock State > Ċ