private boolean verifyField(ThriftType t) { ThriftProtocolType proto = t.getProtocolType(); if (proto == ThriftProtocolType.SET || proto == ThriftProtocolType.LIST) { return verifyElementType(t.getValueTypeReference()); } else if (proto == ThriftProtocolType.MAP) { // no short-circuit return verifyElementType(t.getKeyTypeReference()) & verifyElementType(t.getValueTypeReference()); } else { if (knownTypes.contains(t)) { return true; } if (includeMap.containsKey(t)) { usedIncludedTypes.add(t); return true; } if (recursive) { // recursive but type is unknown - add it to the list and recurse thriftTypes.add(t); return verifyStruct(t, true); } return false; } }
return new MapThriftCodec<>(type, getElementCodec(type.getKeyTypeReference()), getElementCodec(type.getValueTypeReference()));
public String toString(ThriftType t) { switch (t.getProtocolType()) { case BOOL: return "bool"; case BYTE: return "byte"; case DOUBLE: return "double"; case I16: return "i16"; case I32: return "i32"; case I64: return "i64"; case ENUM: return prefix(t) + t.getEnumMetadata().getEnumName(); case MAP: return "map<" + toString(t.getKeyTypeReference().get()) + ", " + toString(t.getValueTypeReference().get()) + ">"; case SET: return "set<" + toString(t.getValueTypeReference().get()) + ">"; case LIST: return "list<" + toString(t.getValueTypeReference().get()) + ">"; // void is encoded as a struct case STRUCT: return t.equals(ThriftType.VOID) ? "void" : prefix(t) + t.getStructMetadata().getStructName(); case STRING: return "string"; case BINARY: return "binary"; } throw new IllegalStateException("Bad protocol type" + t.getProtocolType()); }
public static ParameterizedType toParameterizedType(ThriftTypeReference typeRef) { if (ReflectionHelper.isArray(typeRef.getJavaType())) { return type((Class<?>) typeRef.getJavaType()); } switch (typeRef.getProtocolType()) { case BOOL: case BYTE: case DOUBLE: case I16: case I32: case I64: case STRING: case BINARY: case STRUCT: case ENUM: return type((Class<?>) typeRef.getJavaType()); case MAP: return type(Map.class, toParameterizedType(typeRef.get().getKeyTypeReference()), toParameterizedType(typeRef.get().getValueTypeReference())); case SET: return type(Set.class, toParameterizedType(typeRef.get().getValueTypeReference())); case LIST: return type(List.class, toParameterizedType(typeRef.get().getValueTypeReference())); default: throw new IllegalArgumentException("Unsupported thrift field type " + typeRef.getJavaType()); } }