package Ġcom . github . r icky 1 2 awesome . j ss Ċ Ċ import Ġkotlinx . serialization . json . JsonArray Ċ import Ġkotlinx . serialization . json . Json Element Ċ import Ġkotlinx . serialization . json . Json Null Ċ import Ġkotlinx . serialization . json . JsonObject Ċ Ċ private Ġfun Ġ< K , ĠV > ĠMutable Map < K , ĠV >. remap Merge ( ĊĠ Ġkey : ĠK , ĊĠ Ġvalue : ĠV , ĊĠ Ġremap : Ġ( V , ĠV ) Ġ-> ĠV ? Ċ ): ĠV ? Ġ{ ĊĠ Ġval ĠoldValue : ĠV ? Ġ= Ġthis [ key ] ĊĠ Ġval ĠnewValue : ĠV ? Ġ= Ġif Ġ( oldValue Ġ== Ġnull ) Ġvalue Ġelse Ġremap ( oldValue , Ġvalue ) ĊĊĠ Ġif Ġ( newValue Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġremove ( key ) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġput ( key , ĠnewValue ) ĊĠ Ġ} ĊĊĠ Ġreturn ĠnewValue Ċ } Ċ Ċ fun ĠMutable Map < String , ĠJson Element >. merge ( key : ĠString , Ġelement : ĠJson Element ): ĠJson Element ? Ġ{ ĊĠ Ġreturn Ġremap Merge ( key , Ġelement , Ġ:: merge ) Ċ } Ċ Ċ fun Ġmerge ( previous : ĠJson Element , Ġvalue : ĠJson Element ): ĠJson Element ? Ġ{ ĊĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠ Ġprevious Ġ== Ġvalue Ġ-> Ġvalue ĊĠĠĠ Ġprevious Ġis ĠJsonObject Ġ&& Ġvalue Ġis ĠJsonObject Ġ-> Ġmerge ( previous , Ġvalue ) ĊĠĠĠ Ġprevious Ġis ĠJson Array Ġ&& Ġvalue Ġis ĠJson Array Ġ-> ĠJson Array ( previous Ġ+ Ġvalue ) ĊĠĠĠ Ġvalue Ġis ĠJson Null Ġ-> Ġprevious ĊĠĠĠ Ġelse Ġ-> Ġvalue ĊĠ Ġ} Ċ } Ċ Ċ fun Ġmerge ( previous : ĠJsonObject , Ġvalue : ĠJsonObject ): ĠJsonObject ? Ġ{ ĊĠ Ġval Ġelements Ġ= Ġmutable Map Of < String , ĠJson Element >() ĊĠ Ġval Ġvalues Ġ= Ġ( previous . keys Ġ+ Ġvalue . keys ). toSet (). associate With Ġ{ ĊĠĠĠ Ġ( previous [ it ] Ġ?: ĠJson Null ) Ġto Ġ( value [ it ] Ġ?: ĠJson Null ) ĊĠ Ġ} ĊĊĠ Ġvalues . forEach Ġ{ Ġ( name , Ġold New Pair ) Ġ-> ĊĠĠĠ Ġval Ġ( old , Ġnew ) Ġ= Ġold New Pair ĊĠĠĠ Ġval Ġmerged Ġ= Ġmerge ( old , Ġnew ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġelements [ name ] Ġ= Ġmerged ĊĠ Ġ} ĊĊĠ Ġreturn ĠJsonObject ( elements ) Ċ }