package Ġcom . jetbrains . rd . framework Ċ Ċ import Ġcom . jetbrains . rd . framework . impl . Rd Secure String Ċ import Ġcom . jetbrains . rd . util .* Ċ import Ġkotlin . reflect .* Ċ Ċ open Ġclass ĠUniversal Marshaller < T Ġ: ĠAny >( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġ_ type : ĠK Class <* >, ĊĠĠĠĠĠĠĠ Ġval Ġreader : Ġ( Serialization Ctx , ĠAbstract Buffer ) Ġ-> ĠT , ĊĠĠĠĠĠĠĠ Ġval Ġwriter : Ġ( Serialization Ctx , ĠAbstract Buffer , ĠT ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġval Ġpredefined Id : ĠInt ? Ġ= Ġnull ) ĊĠĠĠ Ġ: ĠI Marshaller < T > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġread ( ctx : ĠSerialization Ctx , Ġbuffer : ĠAbstract Buffer ) Ġ= Ġreader ( ctx , Ġbuffer ) ĊĠĠĠ Ġoverride Ġfun Ġwrite ( ctx : ĠSerialization Ctx , Ġbuffer : ĠAbstract Buffer , Ġvalue : ĠT ) Ġ= Ġwriter ( ctx , Ġbuffer , Ġvalue ) ĊĠĠĠ Ġoverride Ġval Ġid : ĠR d Id ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpredefined Id ?. let Ġ{ ĠR d Id ( it . to Long ()) Ġ} Ġ?: Ġsuper . id Ċ } ĊĊ Ċ @ Public Api Ċ @ Suppress (" unused ") Ċ open Ġclass ĠDeleg ated Marshaller < T From Ġ: ĠAny , ĠT To Ġ: ĠAny >( marshaller : ĠI Marshaller < T From >, Ġtype : ĠK Class <* >, Ġto : Ġ( T From ) Ġ-> ĠT To , Ġfrom : Ġ( T To ) Ġ-> ĠT From ) ĊĠĠĠ Ġ: ĠUniversal Marshaller < T To >( type , ĊĠĠĠ Ġreader Ġ= Ġ{ Ġctx , Ġstream Ġ-> Ġto ( marshaller . read ( ctx , Ġstream )) Ġ}, ĊĠĠĠ Ġwriter Ġ= Ġ{ Ġctx , Ġstream , Ġvalue Ġ-> Ġmarshaller . write ( ctx , Ġstream , Ġfrom ( value )) Ġ} Ċ ) Ċ Ċ object ĠFramework Marshall ers Ġ{ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġcreate ( cross inline Ġreader : Ġ( Abstract Buffer ) Ġ-> ĠT , Ġcross inline Ġwriter : Ġ( Abstract Buffer , ĠT ) Ġ-> ĠUnit , Ġpredefined Id : ĠInt ? Ġ= Ġnull ): ĠUniversal Marshaller < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUniversal Marshaller ( T :: class , Ġ{ Ġ_, Ġstream Ġ-> Ġreader ( stream ) Ġ}, Ġ{ Ġ_, Ġstream , Ġv Ġ-> Ġwriter ( stream , Ġv ) Ġ}, Ġpredefined Id ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠEnum < T >> Ġenum (): ĠUniversal Marshaller < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate ({ Ġit . read Enum < T >() Ġ}, Ġ{ Ġstream , Ġx Ġ-> Ġstream . write Enum ( x ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠEnum < T >> Ġenum Set (): ĠUniversal Marshaller < Enum Set < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate ({ Ġit . read Enum Set < T >() Ġ}, Ġ{ Ġstream , Ġx Ġ-> Ġstream . write Enum Set ( x ) Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinline Ġfun Ġ< T From Ġ: ĠAny , Ġre ified ĠT To Ġ: ĠAny > ĠI Marshaller < T From >. delegate ( cross inline Ġto : Ġ( T From ) Ġ-> ĠT To , Ġcross inline Ġfrom : Ġ( T To ) Ġ-> ĠT From ): ĠI Marshaller < T To > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠI Marshaller < T To > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġ_ type : ĠK Class < *> Ġget () Ġ= ĠT To :: class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread ( ctx : ĠSerialization Ctx , Ġbuffer : ĠAbstract Buffer ): ĠT To Ġ= Ġto ( this @ delegate . read ( ctx , Ġbuffer )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( ctx : ĠSerialization Ctx , Ġbuffer : ĠAbstract Buffer , Ġvalue : ĠT To ) Ġ= Ġthis @ delegate . write ( ctx , Ġbuffer , Ġfrom ( value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġval ĠInt 8 Ġ: ĠI Marshaller < Byte > Ġ= Ġcreate ( Abstract Buffer :: read Byte , ĠAbstract Buffer :: write Byte , Ġ 1 ) ĊĠĠĠ Ġval ĠInt 1 6 : ĠI Marshaller < Short > Ġ= Ġcreate ( Abstract Buffer :: read Short , ĠAbstract Buffer :: write Short , Ġ 2 ) ĊĠĠĠ Ġval ĠInt 3 2 : ĠI Marshaller < Int > Ġ= Ġcreate ( Abstract Buffer :: readInt , ĠAbstract Buffer :: writeInt , Ġ 3 ) ĊĠĠĠ Ġval ĠInt 6 4 : ĠI Marshaller < Long > Ġ= Ġcreate ( Abstract Buffer :: read Long , ĠAbstract Buffer :: write Long , Ġ 4 ) ĊĊĠĠĠ Ġval ĠFloat : ĠI Marshaller < Float > Ġ= Ġcreate ( Abstract Buffer :: read Float , ĠAbstract Buffer :: write Float , Ġ 5 ) ĊĠĠĠ Ġval ĠDouble : ĠI Marshaller < Double > Ġ= Ġcreate ( Abstract Buffer :: read Double , ĠAbstract Buffer :: write Double , Ġ 6 ) ĊĠĠĠ Ġval ĠChar : ĠI Marshaller < Char > Ġ= Ġcreate ( Abstract Buffer :: read Char , ĠAbstract Buffer :: write Char , Ġ 7 ) ĊĠĠĠ Ġval ĠBool : ĠI Marshaller < Boolean > Ġ= Ġcreate ( Abstract Buffer :: read Boolean , ĠAbstract Buffer :: write Boolean , Ġ 8 ) ĊĊĠĠĠ Ġ// empty ĊĠĠĠ Ġval ĠVoid : ĠI Marshaller < Unit > Ġ= Ġcreate ({ Ġ}, Ġ{ Ġ_, Ġ_ Ġ-> Ġ}, Ġ 9 ) ĊĊĠĠĠ Ġ// normal Ġstring ĊĠĠĠ Ġval ĠString : ĠUniversal Marshaller < String > Ġ= Ġcreate ( Abstract Buffer :: readString , ĠAbstract Buffer :: writeString , Ġ 1 0 ) ĊĊĠĠĠ Ġ// aliases ĊĠĠĠ Ġval ĠByte Ġ= ĠInt 8 ĊĠĠĠ Ġval ĠShort Ġ= ĠInt 1 6 ĊĠĠĠ Ġval ĠInt Ġ= ĠInt 3 2 ĊĠĠĠ Ġval ĠLong Ġ= ĠInt 6 4 ĊĊĊĠĠĠ Ġ// jvm - based ĊĠĠĠ Ġval ĠGuid : ĠUniversal Marshaller < UUID > Ġ= Ġcreate ({ Ġit . read Uuid () Ġ}, ĠAbstract Buffer :: write Uuid , Ġ 1 1 ) ĊĠĠĠ Ġval ĠDateTime : ĠUniversal Marshaller < Date > Ġ= Ġcreate ( Abstract Buffer :: read DateTime , ĠAbstract Buffer :: write DateTime , Ġ 1 2 ) ĊĠĠĠ Ġval ĠUri : ĠUniversal Marshaller < URI > Ġ= Ġcreate ({ Ġit . read Uri () Ġ}, ĠAbstract Buffer :: write Uri , Ġ 1 3 ) ĊĊĠĠĠ Ġ// rd Id ĊĠĠĠ Ġval ĠR d Id : ĠI Marshaller < Rd Id > Ġ= Ġcreate ( Abstract Buffer :: read Rd Id , ĠAbstract Buffer :: write Rd Id , Ġ 1 4 ) ĊĊĠĠĠ Ġ// string Ġfor Ġpasswords ĊĠĠĠ Ġval ĠSecure String : ĠI Marshaller < Rd Secure String > Ġ= Ġcreate ({ ĠR d Secure String ( it . readString ()) Ġ}, Ġ{ Ġbuf , Ġstr Ġ-> Ġbuf . writeString ( str . contents ) Ġ}, Ġ 1 5 ) ĊĊĠĠĠ Ġ// arrays ĊĠĠĠ Ġval ĠByteArray : ĠUniversal Marshaller < ByteArray > Ġ= Ġcreate ( Abstract Buffer :: read ByteArray , ĠAbstract Buffer :: write ByteArray , Ġ 3 1 ) ĊĠĠĠ Ġval ĠShort Array : ĠUniversal Marshaller < Short Array > Ġ= Ġcreate ( Abstract Buffer :: read Short Array , ĠAbstract Buffer :: write Short Array , Ġ 3 2 ) ĊĠĠĠ Ġval ĠInt Array : ĠUniversal Marshaller < IntArray > Ġ= Ġcreate ( Abstract Buffer :: read IntArray , ĠAbstract Buffer :: write IntArray , Ġ 3 3 ) ĊĠĠĠ Ġval ĠLong Array : ĠUniversal Marshaller < Long Array > Ġ= Ġcreate ( Abstract Buffer :: read Long Array , ĠAbstract Buffer :: write Long Array , Ġ 3 4 ) ĊĊĠĠĠ Ġval ĠFloat Array : ĠUniversal Marshaller < Float Array > Ġ= Ġcreate ( Abstract Buffer :: read Float Array , ĠAbstract Buffer :: write Float Array , Ġ 3 5 ) ĊĠĠĠ Ġval ĠDouble Array : ĠUniversal Marshaller < Double Array > Ġ= Ġcreate ( Abstract Buffer :: read Double Array , ĠAbstract Buffer :: write Double Array , Ġ 3 6 ) ĊĊĠĠĠ Ġval ĠChar Array : ĠUniversal Marshaller < CharArray > Ġ= Ġcreate ( Abstract Buffer :: read CharArray , ĠAbstract Buffer :: write CharArray , Ġ 3 7 ) ĊĠĠĠ Ġval ĠBoolean Array : ĠUniversal Marshaller < Boolean Array > Ġ= Ġcreate ( Abstract Buffer :: read Boolean Array , ĠAbstract Buffer :: write Boolean Array , Ġ 3 8 ) ĊĊĊĠĠĠ Ġ// unsigned ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠU Byte Ġ: ĠI Marshaller < U Byte > Ġ= Ġcreate ( Abstract Buffer :: read U Byte , ĠAbstract Buffer :: write U Byte , Ġ 4 1 ) ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠU Short : ĠI Marshaller < U Short > Ġ= Ġcreate ( Abstract Buffer :: read U Short , ĠAbstract Buffer :: write U Short , Ġ 4 2 ) ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠUInt : ĠI Marshaller < UInt > Ġ= Ġcreate ( Abstract Buffer :: read UInt , ĠAbstract Buffer :: write UInt , Ġ 4 3 ) ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠU Long : ĠI Marshaller < UL ong > Ġ= Ġcreate ( Abstract Buffer :: read UL ong , ĠAbstract Buffer :: write UL ong , Ġ 4 4 ) ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠU ByteArray : ĠUniversal Marshaller < U ByteArray > Ġ= Ġcreate ( Abstract Buffer :: read U ByteArray , ĠAbstract Buffer :: write U ByteArray , Ġ 4 5 ) ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠU Short Array : ĠUniversal Marshaller < U Short Array > Ġ= Ġcreate ( Abstract Buffer :: read U Short Array , ĠAbstract Buffer :: write U Short Array , Ġ 4 6 ) ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠUInt Array : ĠUniversal Marshaller < UInt Array > Ġ= Ġcreate ( Abstract Buffer :: read UInt Array , ĠAbstract Buffer :: write UInt Array , Ġ 4 7 ) ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġval ĠU Long Array : ĠUniversal Marshaller < UL ong Array > Ġ= Ġcreate ( Abstract Buffer :: read UL ong Array , ĠAbstract Buffer :: write UL ong Array , Ġ 4 8 ) ĊĊĠĠĠ Ġfun Ġregister In ( serializers : ĠI Serial izers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġserializers . register ( Int 8 ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Int 1 6 ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Int 3 2 ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Int 6 4 ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Float ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Double ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Char ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Bool ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Void ) ĊĊĊĠĠĠĠĠĠĠ Ġserializers . register ( String ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Guid ) Ġ// ĠWe Ġuse ĠMicrosoft ĠGUID ĠStructure Ġfor Ġmarshall ing , Ġsee Ġhttps :// en . wikipedia . org / wiki / Glob ally _ unique _ identifier # Binary _ encoding ĊĠĠĠĠĠĠĠ Ġserializers . register ( DateTime ) Ġ// ĠWe Ġuse Ġ. NET ĠDateTime . Ticks Ġfor Ġmarshall ing , Ġsee Ġhttp :// stackoverflow . com / questions / 3 7 0 6 3 0 6 / c - sharp - datetime - ticks - e quivalent - in - java / 3 7 0 6 3 2 0 # 3 7 0 6 3 2 0 ĊĠĠĠĠĠĠĠ Ġserializers . register ( Uri ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Rd Id ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Secure String ) ĊĊĠĠĠĠĠĠĠ Ġserializers . register ( ByteArray ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Short Array ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( IntArray ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Long Array ) ĊĊĠĠĠĠĠĠĠ Ġserializers . register ( Float Array ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Double Array ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( CharArray ) ĊĠĠĠĠĠĠĠ Ġserializers . register ( Boolean Array ) ĊĠĠĠ Ġ} Ċ Ċ }