package Ġsystems . danger . kotlin . models . serializers Ċ Ċ 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 Ġsystems . danger . kotlin . sdk . Violation Ċ Ċ @ Experimental Serialization Api Ċ @ Serializer ( for Class Ġ= ĠVi olation Serializer :: class ) Ċ object ĠVi olation Serializer Ġ: ĠK Serializer < Violation > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbuild Class Serial Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" systems . danger . kotlin . sdk . Violation " ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < String >(" message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < String >(" file ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement < Int >(" line ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠVi olation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecoder . decode Structure ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġmessage : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġindex Ġ= Ġdecode Element Index ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġmessage Ġ= Ġdecode String Element ( descriptor , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġfile Ġ= Ġdecode String Element ( descriptor , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġline Ġ= Ġdecode Int Element ( descriptor , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Decoder . DECODE _ DONE Ġ-> Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġindex : Ġ$ index ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVi olation ( message , Ġfile , Ġline ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠVi olation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder . encode Structure ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode String Element ( descriptor , Ġ 0 , Ġvalue . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . file ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencode String Element ( descriptor , Ġ 1 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . line ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencode Int Element ( descriptor , Ġ 2 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ