package Ġkotlinx . kotlin ui čĊč Ċ import Ġandroid . graphics . Rect č Ċ import Ġandroid . util . Size F č Ċ import Ġkotlinx . ptype . P Type č Ċ import Ġkotlinx . serialization .* č Ċ import Ġkotlinx . serialization . descriptors .* č Ċ import Ġkotlinx . serialization . encoding .* čĊč Ċ @ Serializable ( with Ġ= ĠRot ated Shape . Serializer :: class ) č Ċ data Ġclass ĠRot ated Shape < Content Ġ: ĠShape >( čĊĠĠĠ Ġval Ġshape : ĠContent , čĊĠĠĠ Ġval Ġangle : ĠAngle , čĊĠĠĠ Ġval Ġanchor : ĠUnit Point č Ċ ) Ġ: ĠIn set table Shape Ġ{ čĊĠĠĠ Ġoverride Ġfun Ġpath ( rect : ĠRect ): ĠPath Ġ= Ġerror (" Never ") čĊĠĠĠ Ġoverride Ġfun Ġinset ( by : ĠFloat ): ĠView Ġ= Ġerror (" Check ") Ġ// modifier (_ Inset ( by )) čĊĠĠĠ Ġoverride Ġval Ġbody : ĠView čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġerror (" Never ") čĊčĊĠĠĠ Ġ// : ĠCod able čĊĠĠĠ Ġinternal Ġclass ĠSerializer < Content Ġ: ĠShape > Ġ: ĠK Serializer < Rot ated Shape < Content >> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcontent Serializer Ġ= ĠPol ymorphic Serializer ( Any :: class ) čĊčĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Class Serial Descriptor (": Rot ated Shape ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement (" shape ", Ġcontent Serializer . descriptor ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement < Angle >(" angle ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement < Unit Point >(" anchor ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠRot ated Shape < Content >) Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . encode Structure ( descriptor ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( descriptor , Ġ 0 , Ġcontent Serializer , Ġvalue . shape ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( descriptor , Ġ 1 , ĠAngle . Serializer , Ġvalue . angle ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( descriptor , Ġ 2 , ĠUnit Point . Serializer , Ġvalue . anchor ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠRot ated Shape < Content > Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . decode Structure ( descriptor ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġshape : ĠContent čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġangle : ĠAngle čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġanchor : ĠUnit Point čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġindex Ġ= Ġdecode Element Index ( descriptor )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġshape Ġ= Ġdecode Serializable Element ( descriptor , Ġ 0 , Ġcontent Serializer ) Ġas ĠContent čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġangle Ġ= Ġdecode Serializable Element ( descriptor , Ġ 1 , ĠAngle . Serializer ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġanchor Ġ= Ġdecode Serializable Element ( descriptor , Ġ 2 , ĠUnit Point . Serializer ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Decoder . DECODE _ DONE Ġ-> Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġindex : Ġ$ index ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRot ated Shape ( shape , Ġangle , Ġanchor ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġ// : ĠRegister čĊĠĠĠĠĠĠĠ Ġfun Ġregister () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Type . register < Rot ated Shape < Shape >>() čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ fun ĠShape . rotation ( angle : ĠAngle , Ġanchor : ĠUnit Point Ġ= ĠUnit Point . center ): ĠRot ated Shape < Shape > Ġ= čĊĠĠĠ ĠRot ated Shape ( this , Ġangle , Ġanchor )