package Ġhe li os . instances Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . Try Ċ import Ġhe li os . core .* Ċ import Ġhe li os . syntax . json . as Js Number Or Error Ċ import Ġhe li os . syntax . json . as Js String Or Error Ċ import Ġhe li os . type classes . Decoder Ċ import Ġhe li os . type classes . Encoder Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util . UUID Ċ Ċ interface ĠUUID Encoder Ġ: ĠEncoder < UUID > Ġ{ ĊĠ Ġoverride Ġfun ĠUUID . encode (): ĠJson Ġ= ĠJs String ( this . toString ()) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġobject Ġ: ĠUUID Encoder Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ interface ĠUUID Decoder Ġ: ĠDecoder < UUID > Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠUUID > Ġ= ĊĠĠĠ Ġvalue . as Js String Or Error Ġ{ ĊĠĠĠĠĠ ĠTry Ġ{ ĠUUID . fromString ( it . value . toString ()) Ġ}. to Either Ġ{ Ġex Ġ-> ĊĠĠĠĠĠĠĠ ĠException On De coding ( value , Ġ" Invalid ĠString Ġcannot Ġbe Ġdecoded Ġto ĠUUID ", Ġex ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġobject Ġ: ĠUUID Decoder Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ interface ĠBigDecimal Encoder Ġ: ĠEncoder < BigDecimal > Ġ{ ĊĠ Ġoverride Ġfun ĠBigDecimal . encode (): ĠJson Ġ= ĠJs Number ( this ) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġobject Ġ: ĠBigDecimal Encoder Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ interface ĠBigDecimal Decoder Ġ: ĠDecoder < BigDecimal > Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠBigDecimal > Ġ= ĊĠĠĠ Ġvalue . as Js Number Or Error ( Js Number De coding Error . Js BigDecimal Error ( value )) Ġ{ ĊĠĠĠĠĠ ĠTry ( it :: to BigDecimal ). to Either Ġ{ ĠJs Number De coding Error . Js BigDecimal Error ( value ) Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġobject Ġ: ĠBigDecimal Decoder Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ interface ĠBigInteger Encoder Ġ: ĠEncoder < BigInteger > Ġ{ ĊĠ Ġoverride Ġfun ĠBigInteger . encode (): ĠJson Ġ= ĠJs Number ( this ) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġobject Ġ: ĠBigInteger Encoder Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ interface ĠBigInteger Decoder Ġ: ĠDecoder < BigInteger > Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠBigInteger > Ġ= ĊĠĠĠ Ġvalue . as Js Number Or Error ( Js Number De coding Error . Js BigInteger Error ( value )) Ġ{ ĊĠĠĠĠĠ ĠTry ( it :: to BigInteger ). to Either Ġ{ ĠJs Number De coding Error . Js BigInteger Error ( value ) Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġinstance Ġ= Ġobject Ġ: ĠBigInteger Decoder Ġ{} ĊĠ Ġ} Ċ } Ċ