private static Pair<Method, SampleNode> parse(final JsonParser jsonP) throws IOException {
consume(jsonP, JsonToken.FIELD_NAME);
String name = jsonP.getCurrentName();
consume(jsonP, JsonToken.VALUE_NUMBER_INT);
int sc = jsonP.getIntValue();
JsonToken nextToken = jsonP.nextToken();
if (nextToken == JsonToken.END_OBJECT) {
return Pair.of(Methods.from(name), new SampleNode(sc, null));
} else if (nextToken == JsonToken.FIELD_NAME) {
consume(jsonP, JsonToken.START_ARRAY);
TMap<Method, SampleNode> nodes = new MethodMap<>();
while (jsonP.nextToken() != JsonToken.END_ARRAY) {
Pair<Method, SampleNode> parse = parse(jsonP);
nodes.put(parse.getKey(), parse.getValue());
}
consume(jsonP, JsonToken.END_OBJECT);
return Pair.of(Methods.from(name), new SampleNode(sc, nodes));
} else {
throw new IllegalArgumentException("Expected field name or end Object, not: " + nextToken);
}
}