I suppose while I'm asking questions - what exactly are the parts of the JDK making use of ad-hoc json? Maybe we could ship *something* as a jdk.internal module for those use cases?
On Thu, Nov 24, 2022 at 8:55 PM Ethan McCue <et...@mccue.dev> wrote: > I'm reading JEP 198 and sketching out what an implementation could look > like pursuant to this old conversation. > > https://mail.openjdk.org/pipermail/discuss/2020-April/005401.html > > My biggest question right now is what does the JEP mean exactly by > "document context" > > > - Parsing APIs which allow a choice of parsing token stream, event > (includes document hierarchy context) stream, or immutable tree > representation views of JSON documents and data streams. > > > > So token stream I understand as something akin to > > sealed interface Token { > record StartArray() implements Token {} > record EndArray() implements Token {} > record StartObject() implements Token {} > record EndObject() implements Token {} > record Number(Json.Number value) implements Token {} > record String(Json.String value) implements Token {} > record True() implements Token {} > record False() implements Token {} > record Null() implements Token {} > } > > Which matches up with the model in > https://fasterxml.github.io/jackson-core/javadoc/2.7/com/fasterxml/jackson/core/JsonToken.html > > And an immutable tree representation as akin to > > sealed interface Json { > sealed interface Array extends Json, List<Json> ... > sealed interface Object extends Json, Map<java.lang.String, Json> ... > sealed abstract class Number extends java.lang.Number implements Json > ... > sealed interface String extends Json, CharSequence ... > sealed interface Boolean ... > sealed interface Null extends Json ... > } > > Which, ignoring the open questions of > * Does the immutable tree need to be eagerly realized? > * Do we need to wait for valhalla to land > * Do we need to wait for full pattern matching to land > > (because they make me sad) > > I'm still unsure what information needs to be included in an "Event" > stream that would constitute "document context". Is it pointers to parent > collections? The current "Path"? > > sealed interface PathElement { > record Field(String fieldName) implements PathElement {} > record Index(int index) implements PathElement {} > } > > > >