package Ġke k me ch . k ben . domain Ċ Ċ import Ġke k me ch . k ben . domain . adapters . Any Type Adapter Ċ import Ġke k me ch . k ben . domain . adapters . Enum Type Adapter Ċ import Ġke k me ch . k ben . domain . adapters . Iterable Type Adapter Ċ import Ġke k me ch . k ben . domain . adapters . Map Type Adapter Ċ import Ġke k me ch . k ben . domain . dto . B encode Element Ċ import Ġke k me ch . k ben . io . B encode OutputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠSerialization Context ( ĊĠĠĠ Ġstandard Type Adapters : ĠMap < K Class < out ĠAny >, ĠType Adapter < out ĠAny >>, ĊĠĠĠ Ġcustom Type Adapters : ĠMap < K Class < out ĠAny >, ĠType Adapter < out ĠAny >>, Ċ ) Ġ: ĠAbstract Context ( standard Type Adapters , Ġcustom Type Adapters ) Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġto B encode ( obj : ĠT ): ĠB encode Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Adapter Ġ= Ġfind Type Adapter For ( obj :: class Ġas ĠK Class < T >) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter . to B encode ( obj , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġis ĠIterable < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIterable Type Adapter < T >(). to B encode ( obj Ġas ĠIterable < T >, Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġis ĠMap < *, Ġ*> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap Type Adapter < T >(). to B encode ( obj Ġas ĠMap < String , ĠT >, Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġis ĠEnum < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Type Adapter (). to B encode ( obj , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAny Type Adapter < T >(). to B encode ( obj , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġ< T Ġ: ĠAny > Ġto B encode ByteArray ( obj : ĠT ): ĠByteArray Ġ= ĊĠĠĠĠĠĠĠ ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĠB encode OutputStream ( this ). write ( to B encode ( obj )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toByteArray () Ċ }