in hollow/src/main/java/com/netflix/hollow/core/schema/HollowSchemaParser.java [108:160]
private static HollowObjectSchema parseObjectSchema(String typeName, StreamTokenizer tokenizer) throws IOException {
String keyFieldPaths[] = parsePrimaryKey(tokenizer);
if (tokenizer.ttype != '{') {
throw new IOException("Invalid syntax: expecting '{' for '" + typeName + "'");
}
int tok = tokenizer.nextToken();
List<String> tokens = new ArrayList<String>();
while(tokenizer.ttype != '}') {
if(tok != StreamTokenizer.TT_WORD)
throw new IOException("Invalid syntax, expected field type: " + typeName);
tokens.add(tokenizer.sval);
tokenizer.nextToken();
if(tok != StreamTokenizer.TT_WORD)
throw new IOException("Invalid syntax, expected field name: " + typeName);
String fieldName = tokenizer.sval;
tokens.add(fieldName);
tokenizer.nextToken();
if(tokenizer.ttype != ';')
throw new IOException("Invalid syntax, expected semicolon: " + typeName + "." + fieldName);
tokenizer.nextToken();
}
HollowObjectSchema schema = new HollowObjectSchema(typeName, tokens.size() / 2, keyFieldPaths);
for(int i=0;i<tokens.size();i+=2) {
String fieldType = tokens.get(i);
if("int".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.INT);
} else if("long".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.LONG);
} else if("float".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.FLOAT);
} else if("double".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.DOUBLE);
} else if("boolean".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.BOOLEAN);
} else if("string".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.STRING);
} else if("bytes".equals(fieldType)) {
schema.addField(tokens.get(i+1), FieldType.BYTES);
} else {
schema.addField(tokens.get(i+1), FieldType.REFERENCE, fieldType);
}
}
return schema;
}