/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 7 ĠDev yn ĠGo ets ch Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġdev . yn . event . serialization Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġdev . yn . util . string . to ByteBuffer Ċ import Ġorg . f unktion ale . either . Either Ċ import Ġorg . f unktion ale . tri es . Try Ċ import Ġjava . nio . ByteBuffer Ċ Ċ interface ĠSerialization < E , ĠT > Ġ{ ĊĠĠĠ Ġfun Ġserialize ( thing : ĠT ): ĠByteBuffer ĊĠĠĠ Ġfun Ġdeserialize ( bytes : ĠByteBuffer ): ĠEither < E , ĠT > Ċ } Ċ Ċ abstract Ġclass ĠJack son Serialization < E , ĠT >( val ĠobjectMapper : ĠObjectMapper ): ĠSerialization < E , ĠT > Ġ{ ĊĠĠĠ Ġabstract Ġval Ġclazz : ĠClass < T > ĊĠĠĠ Ġabstract Ġval Ġjson Error : Ġ( Throwable ) Ġ-> ĠE ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( thing : ĠT ): ĠByteBuffer Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . writeValue AsString ( thing ). to ByteBuffer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( bytes : ĠByteBuffer ): ĠEither < E , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTry Ġ{ ĠobjectMapper . readValue ( bytes . array (), Ġclazz ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Either () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. left (). map ( json Error ) ĊĠĠĠ Ġ} Ċ }