in accord-maelstrom/src/main/java/accord/maelstrom/Json.java [254:311]
public Txn read(JsonReader in) throws IOException
{
if (in.peek() == JsonToken.NULL)
return null;
NavigableSet<Key> buildReadKeys = new TreeSet<>();
NavigableSet<Key> buildKeys = new TreeSet<>();
MaelstromUpdate update = new MaelstromUpdate();
Node.Id client = null;
long requestId = Long.MIN_VALUE;
in.beginObject();
while (in.hasNext())
{
String kind = in.nextName();
switch (kind)
{
default: throw new IllegalStateException("Invalid kind: " + kind);
case "r":
in.beginArray();
while (in.hasNext())
buildReadKeys.add(MaelstromKey.readKey(in));
in.endArray();
break;
case "append":
in.beginArray();
while (in.hasNext())
{
in.beginArray();
Key key = MaelstromKey.readKey(in);
buildKeys.add(key);
Value append = Value.read(in);
update.put(key, append);
in.endArray();
}
in.endArray();
break;
case "client":
client = ID_ADAPTER.read(in);
break;
case "requestId":
requestId = in.nextLong();
break;
}
}
in.endObject();
if (client == null)
throw new IllegalStateException();
buildKeys.addAll(buildReadKeys);
Keys readKeys = new Keys(buildReadKeys);
Keys keys = new Keys(buildKeys);
MaelstromRead read = new MaelstromRead(readKeys, keys);
MaelstromQuery query = new MaelstromQuery(client, requestId);
return new Txn.InMemory(keys, read, query, update);
}