in accord-maelstrom/src/main/java/accord/maelstrom/MaelstromResult.java [106:165]
public Result read(JsonReader in) throws IOException
{
if (in.peek() == JsonToken.NULL)
return null;
Node.Id client = null;
long requestId = Long.MIN_VALUE;
NavigableMap<Key, Value> reads = new TreeMap<>();
MaelstromUpdate update = new MaelstromUpdate();
in.beginObject();
while (in.hasNext())
{
String kind = in.nextName();
switch (kind)
{
default: throw illegalState("Invalid kind: " + kind);
case "r":
in.beginArray();
while (in.hasNext())
{
in.beginArray();
Key key = MaelstromKey.readKey(in);
Value value = Value.read(in);
reads.put(key, value);
in.endArray();
}
in.endArray();
break;
case "append":
in.beginArray();
while (in.hasNext())
{
in.beginArray();
Key key = MaelstromKey.readKey(in);
Value append = Value.read(in);
update.put(key, append);
in.endArray();
}
in.endArray();
break;
case "client":
client = Json.ID_ADAPTER.read(in);
break;
case "requestId":
requestId = in.nextLong();
break;
}
}
in.endObject();
if (client == null)
throw new IllegalStateException();
for (Key key : update.keySet())
reads.putIfAbsent(key, null);
Keys keys = new Keys(reads.navigableKeySet());
Value[] values = reads.values().toArray(new Value[0]);
return new MaelstromResult(client, requestId, keys, values, update);
}