@Override
public Fields deserialize( JsonParser jsonParser, DeserializationContext ctxt ) throws IOException, JsonProcessingException
{
ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec();
ObjectNode root = mapper.readTree( jsonParser );
Fields fields = Fields.NONE;
if( root.has( "kind" ) )
return resolveKind( root.get( "kind" ) );
JsonNode fieldsNodes = root.get( "names" );
JsonNode typesNodes = root.get( "types" );
for( int i = 0; i < fieldsNodes.size(); i++ )
{
JsonNode nameNode = fieldsNodes.get( i );
JsonNode typeNode = typesNodes == null ? null : typesNodes.get( i );
Comparable name = nameNode.isNumber() ? nameNode.asInt() : nameNode.asText();
Type type = typeNode != null ? resolveType( typeNode ) : null;
Fields current;
if( typeNode != null )
current = new Fields( name, type );
else
current = new Fields( name );
fields = fields.append( current );
}
return fields;
}