/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ package Ġaws . smithy . kotlin . runtime . serde . json Ċ Ċ import Ġaws . smithy . kotlin . runtime . serde .* Ċ import Ġaws . smithy . kotlin . runtime . time . Instant Ċ import Ġaws . smithy . kotlin . runtime . time . Timestamp Format Ċ Ċ class ĠJsonSerializer Ġ: ĠSerializer , ĠList Serializer , ĠMap Serializer , ĠStruct Serializer Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdouble s ToString ify Ġ= Ġset Of ( Double . NEGATIVE _ INFINITY , ĠDouble . POSITIVE _ INFINITY , ĠDouble . NaN ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfloats ToString ify Ġ= Ġset Of ( Float . NEGATIVE _ INFINITY , ĠFloat . POSITIVE _ INFINITY , ĠFloat . NaN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġjson Writer Ġ= Ġjson Stream Writer () ĊĊĠĠĠ Ġoverride Ġfun Ġto ByteArray (): ĠByteArray Ġ= ĊĠĠĠĠĠĠĠ Ġjson Writer . bytes Ġ?: Ġthrow ĠSerialization Exception (" Serializer Ġpayload Ġis Ġempty ") ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Struct ( descriptor : ĠS dk FieldDescriptor ): ĠStruct Serializer Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . begin Object () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin List ( descriptor : ĠS dk FieldDescriptor ): ĠList Serializer Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . begin Array () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Map ( descriptor : ĠS dk FieldDescriptor ): ĠMap Serializer Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . begin Object () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Struct () Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . end Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend List () Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . end Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . end Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠS dk Serializable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġvalue . serialize ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Int ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Long ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Float ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize String ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Double ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Boolean ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠByte ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Byte ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Short ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Char ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfield ( descriptor : ĠS dk FieldDescriptor , Ġvalue : ĠInstant , Ġformat : ĠTimestamp Format ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Instant ( value , Ġformat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnull Field ( descriptor : ĠS dk FieldDescriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstruct Field ( descriptor : ĠS dk FieldDescriptor , Ġblock : ĠStruct Serializer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Struct ( descriptor , Ġblock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Field ( descriptor : ĠS dk FieldDescriptor , Ġblock : ĠList Serializer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize List ( descriptor , Ġblock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmap Field ( descriptor : ĠS dk FieldDescriptor , Ġblock : ĠMap Serializer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( descriptor . serial Name ) ĊĠĠĠĠĠĠĠ Ġserialize Map ( descriptor , Ġblock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Int ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠLong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Long ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠFloat ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Float ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize String ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠS dk Serializable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġvalue ?. serialize ( this ) Ġ?: Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠDouble ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Double ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Boolean ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠByte ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Byte ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠShort ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Short ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠChar ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Char ( value ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentry ( key : ĠString , Ġvalue : ĠInstant ?, Ġformat : ĠTimestamp Format ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġserialize Instant ( value , Ġformat ) Ġelse Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Entry ( key : ĠString , Ġlist Descriptor : ĠS dk FieldDescriptor , Ġblock : ĠList Serializer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġbegin List ( list Descriptor ) ĊĠĠĠĠĠĠĠ Ġblock . invoke ( this ) ĊĠĠĠĠĠĠĠ Ġend List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmap Entry ( key : ĠString , Ġmap Descriptor : ĠS dk FieldDescriptor , Ġblock : ĠMap Serializer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Name ( key ) ĊĠĠĠĠĠĠĠ Ġbegin Map ( map Descriptor ) ĊĠĠĠĠĠĠĠ Ġblock . invoke ( this ) ĊĠĠĠĠĠĠĠ Ġend Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . write Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Boolean ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Byte ( value : ĠByte ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Short ( value : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Char ( value : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Int ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Long ( value : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Float ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( float s ToString ify . contains ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Double ( value : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( double s ToString ify . contains ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize String ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Writer . writeValue ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Sdk Serializable ( value : ĠS dk Serializable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue . serialize ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Instant ( value : ĠInstant , Ġformat : ĠTimestamp Format ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp Format . EPOCH _ SECONDS Ġ-> Ġjson Writer . write Raw Value ( value . format ( format )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp Format . ISO _ 8 6 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimestamp Format . RFC _ 5 3 2 2 Ġ-> Ġjson Writer . writeValue ( value . format ( format )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ