package Ġworld . ce pi . k st om . serializer Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . Serializer Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . build Class Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . element Ċ import Ġkotlinx . serialization . encoding .* Ċ import Ġnet . ky ori . ad venture . key . Key Ċ import Ġnet . ky ori . ad venture . sound . Sound Ċ import Ġjava . lang . Exception Ċ Ċ @ Serializer ( for Class Ġ= ĠSound :: class ) Ċ @ Opt In ( Experimental Serialization Api :: class ) Ċ object ĠSound Serializer Ġ: ĠK Serializer < Sound > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĊĠĠĠĠĠĠĠ Ġbuild Class Serial Descriptor (" Sound ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < String >(" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < String >(" source ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < Float >(" volume ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < Float >(" pitch ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠSound ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder . encode Structure ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode String Element ( descriptor , Ġ 0 , Ġvalue . name (). value ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode String Element ( descriptor , Ġ 1 , Ġvalue . source (). name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Float Element ( descriptor , Ġ 2 , Ġvalue . volume ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Float Element ( descriptor , Ġ 3 , Ġvalue . pitch ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠSound Ġ= ĊĠĠĠĠĠĠĠ Ġdecoder . decode Structure ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsource Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvolume Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpitch Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( decode Se quent ially ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġdecode String Element ( descriptor , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġdecode String Element ( descriptor , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvolume Ġ= Ġdecode Float Element ( descriptor , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpitch Ġ= Ġdecode Float Element ( descriptor , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( val Ġindex Ġ= Ġdecode Element Index (( descriptor ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġname Ġ= Ġdecode String Element ( descriptor , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsource Ġ= Ġdecode String Element ( descriptor , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġvolume Ġ= Ġdecode Float Element ( descriptor , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġpitch Ġ= Ġdecode Float Element ( descriptor , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Decoder . DECODE _ DONE Ġ-> Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġindex : Ġ$ index ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsound Source Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSound . Source . valueOf ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Sound Ġsource Ġis Ġinvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSound . sound ( Key . key ( name ), Ġsound Source , Ġvolume , Ġpitch ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }