package Ġorg . http 4 k . format Ċ Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . node . Array Node Ċ import Ġcom . fasterxml . jackson . databind . node . BigInteger Node Ċ import Ġcom . fasterxml . jackson . databind . node . Boolean Node Ċ import Ġcom . fasterxml . jackson . databind . node . Decimal Node Ċ import Ġcom . fasterxml . jackson . databind . node . Null Node Ċ import Ġcom . fasterxml . jackson . databind . node . Numeric Node Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġcom . fasterxml . jackson . databind . node . Text Node Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . convert Value Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson Type Ref Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġorg . http 4 k . core . Body Ċ import Ġorg . http 4 k . core . ContentType Ċ import Ġorg . http 4 k . core . ContentType . Companion . APPLICATION _ JSON Ċ import Ġorg . http 4 k . lens . Bi Di Body Lens Spec Ċ import Ġorg . http 4 k . lens . Content Neg otiation Ċ import Ġorg . http 4 k . lens . Content Neg otiation . Companion . None Ċ import Ġorg . http 4 k . lens . string Ċ import Ġorg . http 4 k . websocket . Ws Message Ċ import Ġjava . io . InputStream Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġkotlin . reflect . K Class Ċ Ċ open Ġclass ĠConfigur able Jack son ( val Ġmapper : ĠObjectMapper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault ContentType : ĠContentType Ġ= ĠAP PLICATION _ JSON ) Ġ: ĠAuto Marshall ing Json < JsonNode >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtypeOf ( value : ĠJsonNode ): ĠJson Type Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠText Node Ġ-> ĠJson Type . String ĊĠĠĠĠĠĠĠ Ġis ĠBoolean Node Ġ-> ĠJson Type . Boolean ĊĠĠĠĠĠĠĠ Ġis ĠNumeric Node Ġ-> ĠJson Type . Number ĊĠĠĠĠĠĠĠ Ġis ĠArray Node Ġ-> ĠJson Type . Array ĊĠĠĠĠĠĠĠ Ġis ĠObject Node Ġ-> ĠJson Type . Object ĊĠĠĠĠĠĠĠ Ġis ĠNull Node Ġ-> ĠJson Type . Null ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Don 't Ġknow Ġnow Ġto Ġtranslate Ġ$ value ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠString . as JsonObject (): ĠJsonNode Ġ= Ġmapper . readValue ( this , ĠJsonNode :: class . java ) ĊĠĠĠ Ġoverride Ġfun ĠString ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠText Node ( this ) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun ĠInt ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠBigInteger Node ( to BigInteger ()) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun ĠDouble ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠDecimal Node ( BigDecimal ( this )) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun ĠLong ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠBigInteger Node ( to BigInteger ()) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun ĠBigDecimal ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠDecimal Node ( this ) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun ĠBigInteger ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠBigInteger Node ( this ) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun ĠBoolean ?. as JsonValue (): ĠJsonNode Ġ= Ġthis ?. let Ġ{ ĠBoolean Node . valueOf ( this ) Ġ} Ġ?: ĠNull Node . instance ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠIterable < JsonNode >> ĠT . as JsonArray (): ĠJsonNode Ġ= Ġmapper . create Array Node (). also Ġ{ Ġit . addAll ( toList ()) Ġ} ĊĠĠĠ Ġoverride Ġfun ĠJsonNode . as Pretty Json String (): ĠString Ġ= Ġmapper . writer WithDefault PrettyPrinter (). writeValue AsString ( this ) ĊĠĠĠ Ġoverride Ġfun ĠJsonNode . as Compact Json String (): ĠString Ġ= Ġmapper . writeValue AsString ( this ) ĊĠĠĠ Ġoverride Ġfun Ġ< LIST Ġ: ĠIterable < Pair < String , ĠJsonNode >>> ĠLIST . as JsonObject (): ĠJsonNode Ġ= ĊĠĠĠĠĠĠĠ Ġmapper . createObject Node (). also Ġ{ Ġit . set All < JsonNode >( map Of (* toList (). to Typed Array ())) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfields ( node : ĠJsonNode ) Ġ= Ġnode . fields (). as Sequence (). map Ġ{ Ġ( key , Ġvalue ) Ġ-> Ġkey Ġto Ġvalue Ġ}. toList () ĊĊĠĠĠ Ġoverride Ġfun Ġelements ( value : ĠJsonNode ) Ġ= Ġvalue . elements (). as Sequence (). as Iterable () ĊĠĠĠ Ġoverride Ġfun Ġtext ( value : ĠJsonNode ): ĠString Ġ= Ġvalue . as Text () ĊĠĠĠ Ġoverride Ġfun Ġbool ( value : ĠJsonNode ): ĠBoolean Ġ= Ġvalue . as Boolean () ĊĠĠĠ Ġoverride Ġfun Ġinteger ( value : ĠJsonNode ) Ġ= Ġvalue . as Long () ĊĠĠĠ Ġoverride Ġfun Ġdecimal ( value : ĠJsonNode ) Ġ= ĠBigDecimal ( value . toString ()) ĊĠĠĠ Ġoverride Ġfun Ġtext ValueOf ( node : ĠJsonNode , Ġname : ĠString ) Ġ= Ġnode [ name ]?. as Text () ĊĊĠĠĠ Ġ// Ġauto ĊĠĠĠ Ġoverride Ġfun Ġas JsonObject ( input : ĠAny ): ĠJsonNode Ġ= Ġmapper . convert Value ( input , ĠJsonNode :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġas A ( input : ĠString , Ġtarget : ĠK Class < T >): ĠT Ġ= Ġmapper . readValue ( input , Ġtarget . java ) ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġas A ( j : ĠJsonNode , Ġtarget : ĠK Class < T >): ĠT Ġ= Ġmapper . convert Value ( j , Ġtarget . java ) ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġas A ( input : ĠInputStream , Ġtarget : ĠK Class < T >): ĠT Ġ= Ġmapper . readValue ( input , Ġtarget . java ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠJsonNode . as A (): ĠT Ġ= Ġmapper . convert Value ( this ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠW s Message . Companion . auto () Ġ= ĠW s Message . string (). map ( mapper . read < T >(), Ġmapper . write ()) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠBody . Companion . auto ( description : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Neg otiation : ĠContent Neg otiation Ġ= ĠNone , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType : ĠContentType Ġ= Ġdefault ContentType ) Ġ= Ġauto Body < T >( description , Ġcontent Neg otiation , ĠcontentType ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġauto Body ( description : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Neg otiation : ĠContent Neg otiation Ġ= ĠNone , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType : ĠContentType Ġ= Ġdefault ContentType ) ĊĠĠĠĠĠĠĠ Ġ: ĠBi Di Body Lens Spec < T > Ġ= Ġhttp Body Lens ( description , Ġcontent Neg otiation , ĠcontentType ). map ( mapper . read (), Ġmapper . write ()) ĊĊĠĠĠ Ġ// Ġviews ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny , ĠV Ġ: ĠAny > ĠT . as Compact Json String Using View ( v : ĠK Class < V >): ĠString Ġ= Ġmapper . writer With View ( v . java ). writeValue AsString ( this ) ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny , ĠV Ġ: ĠAny > ĠString . as Using View ( t : ĠK Class < T >, Ġv : ĠK Class < V >): ĠT Ġ= Ġmapper . reader With View ( v . java ). for Type ( t . java ). readValue ( this ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny , Ġre ified ĠV Ġ: ĠAny > ĠBody . Companion . auto View ( description : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ Ġcontent Neg otiation : ĠContent Neg otiation Ġ= ĠNone , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ ĠcontentType : ĠContentType Ġ= ĠAP PLICATION _ JSON ) Ġ= ĊĠĠĠĠĠĠĠ ĠBody . string ( contentType , Ġdescription , Ġcontent Neg otiation ). map ({ Ġit . as Using View ( T :: class , ĠV :: class ) Ġ}, Ġ{ Ġit . as Compact Json String Using View ( V :: class ) Ġ}) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny , Ġre ified ĠV Ġ: ĠAny > ĠW s Message . Companion . auto View () Ġ= ĊĠĠĠĠĠĠĠ ĠW s Message . string (). map ({ Ġit . as Using View ( T :: class , ĠV :: class ) Ġ}, Ġ{ Ġit . as Compact Json String Using View ( V :: class ) Ġ}) Ċ } Ċ Ċ fun ĠKotlin Module . as Configurable () Ġ= Ġas Configurable ( ObjectMapper ()) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠObjectMapper . read (): Ġ( String ) Ġ-> ĠT Ġ= Ġ{ Ġread Value ( it ) Ġ} Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠObjectMapper . write (): Ġ( T ) Ġ-> ĠString Ġ= Ġ{ ĊĠĠĠ Ġwith ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ref Ġ= Ġj ack son Type Ref < T >() ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Factory . construct Type ( type Ref ). is Container Type Ġ-> Ġwriter (). for Type ( type Ref ). writeValue AsString ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwrite Value AsString ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ