/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ @ file : Use Serial izers ( Nullable Int Serializer :: class , ĠNon Nullable Int Serializer :: class ) Ċ Ċ package Ġkotlinx . serialization Ċ Ċ import Ġkotlinx . serialization . Serialization For Nullable Type On File Test .* Ċ import Ġkotlinx . serialization . descriptors .* Ċ import Ġkotlinx . serialization . encoding .* Ċ import Ġkotlinx . serialization . json .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠSerialization For Nullable Type On File Test Ġ{ ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠH older ( val Ġnullable : ĠInt ?, Ġval Ġnon Nullable : ĠInt ) ĊĊĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠInt :: class ) ĊĠĠĠ Ġobject ĠNullable Int Serializer Ġ: ĠK Serializer < Int ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠPrimitive Serial Descriptor (" Nullable Int Serializer ", ĠPrimitive Kind . INT ). nullable ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġencoder . encode Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġencoder . encode Int ( value Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( decoder . decode NotNull Mark ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġdecoder . decode Int () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . decode Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠInt :: class ) ĊĠĠĠ Ġobject ĠNon Nullable Int Serializer Ġ: ĠK Serializer < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠPrimitive Serial Descriptor (" NotNull Int Serializer ", ĠPrimitive Kind . INT ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencoder . encode Int ( value Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( decoder . decode Int () Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest File Level () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals (""" {" nullable ": null ," non Nullable ": 5 2 } """, ĠJson . encode ToString ( Holder ( nullable Ġ= Ġnull , Ġnon Nullable Ġ= Ġ 5 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals (""" {" nullable ": 1 ," non Nullable ": 2 } """, ĠJson . encode ToString ( Holder ( nullable Ġ= Ġ 0 , Ġnon Nullable Ġ= Ġ 0 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals (""" {" nullable ": 1 1 ," non Nullable ": 5 2 } """, ĠJson . encode ToString ( Holder ( nullable Ġ= Ġ 1 0 , Ġnon Nullable Ġ= Ġ 5 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Holder ( nullable Ġ= Ġ 0 , Ġnon Nullable Ġ= Ġ 5 0 ), ĠJson . decode FromString (""" {" nullable ": 1 ," non Nullable ": 5 2 } "" ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Holder ( nullable Ġ= Ġnull , Ġnon Nullable Ġ= Ġ 5 0 ), ĠJson . decode FromString (""" {" nullable ": null ," non Nullable ": 5 2 } "" ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Holder ( nullable Ġ= Ġ 1 0 , Ġnon Nullable Ġ= Ġ 5 0 ), ĠJson . decode FromString (""" {" nullable ": 1 1 ," non Nullable ": 5 2 } "" ")) ĊĠĠĠ Ġ} Ċ } Ċ