package Ġcc . ek bl ad . toml . model Ċ Ċ /** Ċ Ġ* ĠKotlin Ġrepresentation Ġof Ġa ĠTO ML Ġvalue . Ċ Ġ* ĠA Ġfull ĠTO ML Ġdocument Ġis Ġalways Ġrepresented Ġas Ġa Ġ[ Tom l Value . Map ]. Ċ Ġ* Ċ Ġ* ĠYou Ġcan Ġeither Ġtraverse Ġthis Ġrepresentation Ġmanually , Ġaccess Ġindividual Ġproperties Ġusing Ġ[ Tom l Value . get ], Ġor Ċ Ġ* Ġdecode Ġthe Ġwhole Ġthing Ġinto Ġa Ġdata Ġclass Ġof Ġyour Ġchoice Ġusing Ġ[ Tom l Value . decode ]. Ċ Ġ* Ċ Ġ* Ġ[ Tom l Value . from ] Ġcan Ġbe Ġused Ġto Ġobtain Ġa Ġ` Tom l Value ` Ġfrom Ġan Ġinput ĠTO ML Ġdocument Ġin Ġthe Ġform Ġof Ġa Ġ[ String ], Ċ Ġ* Ġ[ java . nio . file . Path ], Ġor Ġ[ java . io . InputStream ]. Ċ Ġ*/ Ċ sealed Ġclass ĠTom l Value Ġ{ ĊĠĠĠ Ġsealed Ġclass ĠPrimitive Ġ: ĠTom l Value () ĊĊĠĠĠ Ġdata Ġclass ĠString ( val Ġvalue : Ġkotlin . String ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠInteger ( val Ġvalue : ĠLong ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠDouble ( val Ġvalue : Ġkotlin . Double ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠBool ( val Ġvalue : ĠBoolean ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠOffset DateTime ( val Ġvalue : Ġjava . time . Offset DateTime ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠLocalDateTime ( val Ġvalue : Ġjava . time . LocalDateTime ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠLocalDate ( val Ġvalue : Ġjava . time . LocalDate ) Ġ: ĠPrimitive () ĊĠĠĠ Ġdata Ġclass ĠLocal Time ( val Ġvalue : Ġjava . time . Local Time ) Ġ: ĠPrimitive () ĊĊĠĠĠ Ġdata Ġclass ĠMap ( val Ġproperties : Ġkotlin . collections . Map < kotlin . String , ĠTom l Value >) Ġ: ĠTom l Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( var arg Ġentries : ĠPair < kotlin . String , ĠTom l Value >) Ġ: Ġthis ( entries . toMap ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġdata Ġclass ĠList ( val Ġelements : Ġkotlin . collections . List < Tom l Value >) Ġ: ĠTom l Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( var arg Ġvalues : ĠTom l Value ) Ġ: Ġthis ( values . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFor Ġserialization Ġextension Ġmethods ĊĠĠĠ Ġcompanion Ġobject Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠTO ML Ġdocument Ġis Ġa Ġmap Ġof Ġzero Ġor Ġmore Ġkeys . Ċ Ġ*/ Ċ type alias ĠTom l Document Ġ= ĠTom l Value . Map Ċ Ċ /** Ċ Ġ* ĠRe cursively Ġmerge Ġtwo ĠTO ML Ġvalues . Ċ Ġ* ĠWh enever Ġthere Ġis Ġa Ġconflict Ġ( i . e . Ġtwo Ġnon -[ Tom l Value . Map ] Ġvalues Ġare Ġmerged ), Ġthe Ġ[ other ] Ġvalue Ġis Ġpreserved . Ċ Ġ* ĠNote Ġthat Ġlists Ġare Ġtreated Ġas Ġatomic Ġ( i . e . Ġnot Ġrecursively Ġmerged ) Ġdue Ġto Ġthe Ġdifficult ies Ġof Ġestablish ing Ġan Ċ Ġ* Ġun amb iguous Ġdiff Ġbetween Ġtwo Ġlists Ġof Ġelements Ġwithout Ġidentity . Ċ Ġ*/ Ċ internal Ġfun ĠTom l Value . merge ( other : ĠTom l Value ): ĠTom l Value Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġthis Ġis ĠTom l Value . Map Ġ&& Ġother Ġis ĠTom l Value . Map Ġ-> ĠTom l Value . Map ( properties . merge ( other . properties )) ĊĠĠĠ Ġelse Ġ-> Ġother Ċ } Ċ Ċ private Ġfun ĠMap < String , ĠTom l Value >. merge ( other : ĠMap < String , ĠTom l Value >): ĠMap < String , ĠTom l Value > Ġ{ ĊĠĠĠ Ġval Ġkeys Ġ= Ġthis . keys Ġ+ Ġother . keys ĊĠĠĠ Ġreturn Ġkeys . associate With Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġthis Value Ġ= Ġthis [ key ] ĊĠĠĠĠĠĠĠ Ġval Ġother Value Ġ= Ġother [ key ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Value Ġ!= Ġnull Ġ&& Ġother Value Ġ!= Ġnull Ġ-> Ġthis Value . merge ( other Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Value Ġ!= Ġnull Ġ-> Ġother Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis Value !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ