use of org.apache.thrift.TFieldIdEnum in project commons by twitter.
the class StructContext method computeFieldNameMap.
/**
* Compute a new field name map for the current thrift message
* we are parsing.
*/
private Map<String, TField> computeFieldNameMap() {
Map<String, TField> map = new HashMap<String, TField>();
Class<? extends TBase> clazz = getCurrentThriftMessageClass();
// Get the metaDataMap for this Thrift class
Map<? extends TFieldIdEnum, FieldMetaData> metaDataMap = FieldMetaData.getStructMetaDataMap(clazz);
for (TFieldIdEnum key : metaDataMap.keySet()) {
final String fieldName = key.getFieldName();
final FieldMetaData metaData = metaDataMap.get(key);
// Workaround a bug in the generated thrift message read()
// method by mapping the ENUM type to the INT32 type
// The thrift generated parsing code requires that, when expecting
// a value of enum, we actually parse a value of type int32. The
// generated read() method then looks up the enum value in a map.
byte type = (TType.ENUM == metaData.valueMetaData.type) ? TType.I32 : metaData.valueMetaData.type;
map.put(fieldName, new TField(fieldName, type, key.getThriftFieldId()));
}
return map;
}
Aggregations