package Ġhe li os . instances Ċ Ċ import Ġarrow . core .* Ċ import Ġarrow . core . extensions . either . applic ative . applic ative Ċ import Ġarrow . core . extensions . either . applic ative . map 2 Ċ import Ġarrow . extension Ċ import Ġhe li os . core .* Ċ import Ġhe li os . type classes .* Ċ Ċ fun Ġ< A > ĠOption . Companion . encoder ( encoder A : ĠEncoder < A >) Ġ= Ġobject Ġ: ĠEncoder < Option < A >> Ġ{ ĊĠ Ġoverride Ġfun ĠOption < A >. encode (): ĠJson Ġ= ĊĠĠĠ Ġfold ({ ĠJs Null Ġ}, Ġ{ Ġencoder A . run Ġ{ Ġit . encode () Ġ} Ġ}) Ċ } Ċ Ċ fun Ġ< A > ĠOption . Companion . decoder ( decoder A : ĠDecoder < A >) Ġ= Ġobject Ġ: ĠDecoder < Option < A >> Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠOption < A >> Ġ= ĊĠĠĠ Ġif Ġ( value . isNull ) ĠNone . right () Ġelse Ġdecoder A . decode ( value ). map Ġ{ ĠSome ( it ) Ġ} Ċ } Ċ Ċ fun Ġ< A , ĠB > ĠEither . Companion . encoder ( encoder A : ĠEncoder < A >, Ġencoder B : ĠEncoder < B >) Ġ= Ġobject Ġ: ĠEncoder < Either < A , ĠB >> Ġ{ ĊĠ Ġoverride Ġfun ĠEither < A , ĠB >. encode (): ĠJson Ġ= ĊĠĠĠ Ġfold ({ Ġencoder A . run Ġ{ Ġit . encode () Ġ} Ġ}, ĊĠĠĠĠĠ Ġ{ Ġencoder B . run Ġ{ Ġit . encode () Ġ} Ġ}) Ċ } Ċ Ċ fun Ġ< A , ĠB > ĠEither . Companion . decoder ( decoder A : ĠDecoder < A >, Ġdecoder B : ĠDecoder < B >) Ġ= Ġobject Ġ: ĠDecoder < Either < A , ĠB >> Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠEither < A , ĠB >> Ġ= ĊĠĠĠ Ġdecoder B . decode ( value ). fold ({ Ġdecoder A . decode ( value ). map Ġ{ Ġit . left () Ġ} Ġ}, ĊĠĠĠĠĠ Ġ{ Ġv Ġ-> Ġv . right (). map Ġ{ Ġit . right () Ġ} Ġ}) Ċ } Ċ Ċ fun Ġ< A , ĠB > ĠTuple 2 . Companion . encoder ( encoder A : ĠEncoder < A >, Ġencoder B : ĠEncoder < B >) Ġ= Ġobject Ġ: ĠEncoder < Tuple 2 < A , ĠB >> Ġ{ ĊĠ Ġoverride Ġfun ĠTuple 2 < A , ĠB >. encode (): ĠJson Ġ= ĠJs Array ( ĊĠĠĠ ĠlistOf ( ĊĠĠĠĠĠ Ġencoder A . run Ġ{ Ġa . encode () Ġ}, ĊĠĠĠĠĠ Ġencoder B . run Ġ{ Ġb . encode () Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ) Ċ } Ċ Ċ fun Ġ< A , ĠB > ĠTuple 2 . Companion . decoder ( decoder A : ĠDecoder < A >, Ġdecoder B : ĠDecoder < B >) Ġ= Ġobject Ġ: ĠDecoder < Tuple 2 < A , ĠB >> Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠTuple 2 < A , ĠB >> Ġ{ ĊĠĠĠ Ġval Ġarr Ġ= Ġvalue . as Js Array (). toList (). flatMap Ġ{ Ġit . value Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( arr . size Ġ== Ġ 2 ) ĊĠĠĠĠĠ Ġdecoder A . decode ( arr . first ()). map 2 ( decoder B . decode ( arr . last ())) Ġ{ Ġit Ġ}. fix () ĊĠĠĠ Ġelse ĠArray De coding Error ( value ). left () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< A , ĠB , ĠC > ĠTuple 3 . Companion . encoder ( ĊĠ Ġencoder A : ĠEncoder < A >, ĊĠ Ġencoder B : ĠEncoder < B >, ĊĠ Ġencoder C : ĠEncoder < C > Ċ ) Ġ= Ġobject Ġ: ĠEncoder < Tuple 3 < A , ĠB , ĠC >> Ġ{ ĊĠ Ġoverride Ġfun ĠTuple 3 < A , ĠB , ĠC >. encode (): ĠJson Ġ= ĠJs Array ( ĊĠĠĠ ĠlistOf ( ĊĠĠĠĠĠ Ġencoder A . run Ġ{ Ġa . encode () Ġ}, ĊĠĠĠĠĠ Ġencoder B . run Ġ{ Ġb . encode () Ġ}, ĊĠĠĠĠĠ Ġencoder C . run Ġ{ Ġc . encode () Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ) Ċ } Ċ Ċ fun Ġ< A , ĠB , ĠC > ĠTuple 3 . Companion . decoder ( ĊĠ Ġdecoder A : ĠDecoder < A >, ĊĠ Ġdecoder B : ĠDecoder < B >, ĊĠ Ġdecoder C : ĠDecoder < C > Ċ ) Ġ= Ġobject Ġ: ĠDecoder < Tuple 3 < A , ĠB , ĠC >> Ġ{ ĊĠ Ġoverride Ġfun Ġdecode ( value : ĠJson ): ĠEither < De coding Error , ĠTuple 3 < A , ĠB , ĠC >> Ġ{ ĊĠĠĠ Ġval Ġarr Ġ= Ġvalue . as Js Array (). toList (). flatMap Ġ{ Ġit . value Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( arr . size Ġ== Ġ 3 ) ĊĠĠĠĠĠ ĠEither . applic ative < De coding Error >(). map ( ĊĠĠĠĠĠĠĠ Ġdecoder A . decode ( arr [ 0 ]), ĊĠĠĠĠĠĠĠ Ġdecoder B . decode ( arr [ 1 ]), ĊĠĠĠĠĠĠĠ Ġdecoder C . decode ( arr [ 2 ]) ĊĠĠĠĠĠ Ġ) Ġ{ Ġit Ġ}. fix () ĊĠĠĠ Ġelse ĠArray De coding Error ( value ). left () ĊĠ Ġ} Ċ } ĊĊ