package Ġcom . hand truth . mc . p aket . util Ċ Ċ import Ġcom . hand truth . mc . p aket . Codec Ċ import Ġcom . hand truth . mc . p aket . Code cs Ċ import Ġcom . hand truth . mc . p aket . get Ċ import Ġio . ktor . utils . io . core .* Ċ import Ġkotlinx . serialization . Serialization Strategy Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . encoding . Abstract Encoder Ċ import Ġkotlinx . serialization . encoding . Composite Encoder Ċ import Ġkotlinx . serialization . modules . Serial izers Module Ċ Ċ internal Ġclass ĠP aket Encoder ( ĊĠĠĠ Ġprivate Ġval Ġcodecs : ĠCode cs , ĊĠĠĠ Ġprivate Ġval Ġoutput : ĠOutput , ĊĠĠĠ Ġoverride Ġval Ġserializers Module : ĠSerial izers Module Ċ ) Ġ: ĠAbstract Encoder () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġuse Codec : ĠCodec < *> ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġencode ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuse Codec ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ĠCodec < T >). write ( output , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Codec Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġcodecs . get < T >(). write ( output , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode Boolean ( value : ĠBoolean ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Char ( value : ĠChar ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Byte ( value : ĠByte ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Short ( value : ĠShort ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Int ( value : ĠInt ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Long ( value : ĠLong ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Float ( value : ĠFloat ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Double ( value : ĠDouble ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode String ( value : ĠString ) Ġ= Ġencode ( value ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Enum ( enum Descriptor : ĠSerial Descriptor , Ġindex : ĠInt ) Ġ= Ġencode ( index ) ĊĊĠĠĠ Ġoverride Ġfun Ġencode Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġoutput . write Byte ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode NotNull Mark () Ġ{ ĊĠĠĠĠĠĠĠ Ġoutput . write Byte ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Collection ( descriptor : ĠSerial Descriptor , Ġcollection Size : ĠInt ): ĠComposite Encoder Ġ{ ĊĠĠĠĠĠĠĠ Ġencode ( collection Size . to UInt ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . begin Collection ( descriptor , Ġcollection Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġencode Serializable Value ( serializer : ĠSerialization Strategy < T >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( code cs . get OrNull ( serializer . descriptor . serial Name ) Ġas ĠCodec < T > ?) ?. write ( output , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġserializer . serialize ( this , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ