package Ġm ary k . json Ċ Ċ interface ĠTokenType Ċ Ċ interface ĠValueType < out ĠT Ġ: ĠAny ?> Ġ: ĠTokenType Ġ{ ĊĠĠĠ Ġinterface ĠIs Null ValueType Ġ: ĠValueType < Nothing > ĊĊĠĠĠ Ġobject ĠString Ġ: ĠValueType < String > ĊĠĠĠ Ġobject ĠNull Ġ: ĠIs Null ValueType ĊĠĠĠ Ġobject ĠBool Ġ: ĠValueType < Boolean > ĊĠĠĠ Ġobject ĠInt Ġ: ĠValueType < Long > ĊĠĠĠ Ġobject ĠFloat Ġ: ĠValueType < Double > Ċ } Ċ Ċ interface ĠArray Type Ġ: ĠTokenType Ġ{ ĊĠĠĠ Ġobject ĠSequence Ġ: ĠArray Type ĊĠĠĠ Ġobject ĠSet Ġ: ĠArray Type Ċ } Ċ Ċ interface ĠMap Type Ġ: ĠTokenType Ġ{ ĊĠĠĠ Ġobject ĠMap Ġ: ĠMap Type ĊĠĠĠ Ġobject ĠOrdered Map Ġ: ĠMap Type ĊĠĠĠ Ġobject ĠPair s Ġ: ĠMap Type Ċ } Ċ Ċ interface ĠToken WithType Ġ{ ĊĠĠĠ Ġval Ġtype : ĠTokenType Ċ } Ċ Ċ sealed Ġclass ĠJson Token ( val Ġname : ĠString ) Ġ{ ĊĠĠĠ Ġobject ĠStart Document Ġ: ĠJson Token (" Start Document ") ĊĊĠĠĠ Ġopen Ġclass ĠStart Object ( override Ġval Ġtype : ĠMap Type ) Ġ: ĠJson Token (" Start Object "), ĠToken WithType ĊĠĠĠ Ġobject ĠSimple Start Object Ġ: ĠStart Object ( Map Type . Map ) ĊĊĠĠĠ Ġobject ĠEnd Object Ġ: ĠJson Token (" End Object ") ĊĊĠĠĠ Ġopen Ġclass ĠField Name ( val Ġvalue : ĠString ?) Ġ: ĠJson Token (" FieldName ") ĊĠĠĠ Ġobject ĠMerge FieldName Ġ: ĠField Name (" << ") ĊĠĠĠ Ġobject ĠStart Complex FieldName Ġ: ĠJson Token (" Start Complex FieldName ") ĊĠĠĠ Ġobject ĠEnd Complex FieldName Ġ: ĠJson Token (" End Complex FieldName ") ĊĊĠĠĠ Ġobject ĠObject Separator Ġ: ĠJson Token (" Object Separator ") ĊĠĠĠ Ġopen Ġclass ĠValue < out ĠT Ġ: ĠAny ? >( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠT , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠValueType < T > ĊĠĠĠ Ġ) Ġ: ĠJson Token (" Value "), ĠToken WithType ĊĊĠĠĠ Ġobject ĠNull Value Ġ: ĠValue < Nothing ? >( null , ĠValueType . Null ) ĊĊĠĠĠ Ġopen Ġclass ĠStart Array ( override Ġval Ġtype : ĠArray Type ) Ġ: ĠJson Token (" Start Array "), ĠToken WithType ĊĠĠĠ Ġobject ĠSimple Start Array Ġ: ĠStart Array ( type Ġ= ĠArray Type . Sequence ) ĊĊĠĠĠ Ġobject ĠArray Separator Ġ: ĠJson Token (" Array Separator ") ĊĠĠĠ Ġobject ĠEnd Array Ġ: ĠJson Token (" End Array ") ĊĊĠĠĠ Ġabstract Ġclass ĠSto pped ( name : ĠString ) Ġ: ĠJson Token ( name ) ĊĠĠĠ Ġobject ĠEnd Document Ġ: ĠSto pped (" End Document ") ĊĠĠĠ Ġclass ĠS us pended ( val Ġlast Token : ĠJson Token , Ġval Ġstored Value : ĠString ?) Ġ: ĠSto pped (" Stopped Ġreader ") ĊĠĠĠ Ġclass ĠJson Exception ( val Ġe : ĠInvalid Json Content ) Ġ: ĠSto pped (" Json Exception ") ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġthis Ġis ĠValue < *> Ġ-> Ġthis . value . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ name (${ this . value })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis Ġis ĠField Name Ġ-> Ġ"$ name (${ this . value })" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġname ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠFor ĠJSON Ġlike Ġreaders Ġto Ġread ĠString Ġbased Ġstructures . Ġ*/ Ċ interface ĠIs Json Like Reader Ġ{ ĊĠĠĠ Ġvar Ġcurrent Token : ĠJson Token ĊĠĠĠ Ġvar Ġcolumn Number : ĠInt ĊĠĠĠ Ġvar ĠlineNumber : ĠInt ĊĊĠĠĠ Ġ/** ĠFind Ġthe Ġnext Ġtoken Ġ*/ ĊĠĠĠ Ġfun Ġnext Token (): ĠJson Token ĊĊĠĠĠ Ġ/** ĠSk ips Ġall ĠJSON Ġvalues Ġuntil Ġa Ġnext Ġvalue Ġat Ġsame Ġlevel Ġis Ġdiscovered Ġ*/ ĊĠĠĠ Ġfun Ġskip Until Next Field ( handle Skip Token : Ġ(( Json Token ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ċ } Ċ Ċ /** ĠException Ġduring Ġreading Ġof ĠJSON Ġ*/ Ċ class ĠException While Reading Json Ġ: ĠThrowable () Ċ Ċ /** ĠException Ġfor Ġinvalid ĠJSON Ġ*/ Ċ open Ġclass ĠInvalid Json Content ( ĊĠĠĠ Ġdescription : ĠString Ċ ) Ġ: ĠThrowable ( description ) Ġ{ ĊĠĠĠ Ġvar ĠlineNumber : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġcolumn Number : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġmessage Ġget () Ġ= Ġ"[ l : Ġ$ line Number , Ġc : Ġ$ column Number ] Ġ${ super . message }" Ċ } Ċ