public ThriftEnumMetadata<T> build() { return new ThriftEnumMetadata<>(enumName, enumClass); }
private ThriftType(ThriftEnumMetadata<?> enumMetadata) { Preconditions.checkNotNull(enumMetadata, "enumMetadata is null"); this.protocolType = ENUM; this.javaType = enumMetadata.getEnumClass(); keyType = null; valueType = null; this.structMetadata = null; this.enumMetadata = enumMetadata; this.uncoercedType = null; }
@Override public T read(TProtocol protocol) throws Exception { int enumValue = protocol.readI32(); if (enumValue >= 0) { if (enumMetadata.hasExplicitThriftValue()) { T enumConstant = enumMetadata.getByEnumValue().get(enumValue); if (enumConstant != null) { return enumConstant; } } else { T[] enumConstants = enumMetadata.getEnumClass().getEnumConstants(); if (enumValue < enumConstants.length) { return enumConstants[enumValue]; } } } // unknown, throw unknown value exception throw new UnknownEnumValueException( String.format( "Enum %s does not have a value for %s", enumMetadata.getEnumClass(), enumValue ) ); }
@Override public void write(T enumConstant, TProtocol protocol) throws Exception { Preconditions.checkNotNull(enumConstant, "enumConstant is null"); int enumValue; if (enumMetadata.hasExplicitThriftValue()) { enumValue = enumMetadata.getByEnumConstant().get(enumConstant); } else { enumValue = enumConstant.ordinal(); } protocol.writeI32(enumValue); } }
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()); }
private ThriftType(ThriftEnumMetadata<?> enumMetadata) { Preconditions.checkNotNull(enumMetadata, "enumMetadata is null"); this.protocolType = ENUM; this.javaType = enumMetadata.getEnumClass(); keyTypeReference = null; valueTypeReference = null; this.structMetadata = null; this.enumMetadata = enumMetadata; this.uncoercedType = null; }
public ThriftEnumMetadata<T> build() { return new ThriftEnumMetadata<>(enumName, enumClass); }