return any.getStringValue(); case STRUCT_VALUE: Struct struct = any.getStructValue(); Map<String, Object> map = new HashMap<>(); for (Map.Entry<String, Value> pair : struct.getFieldsMap().entrySet()) {
private static Object valueToObject(Value value) { switch (value.getKindCase()) { case NULL_VALUE: return null; case NUMBER_VALUE: return value.getNumberValue(); case STRING_VALUE: return value.getStringValue(); case BOOL_VALUE: return value.getBoolValue(); case STRUCT_VALUE: return new StructMap(value.getStructValue()); case LIST_VALUE: return Lists.transform(value.getListValue().getValuesList(), VALUE_TO_OBJECT); default: throw new IllegalArgumentException(String.format("Unsupported protobuf value %s", value)); } }
case 5: hash = (37 * hash) + STRUCT_VALUE_FIELD_NUMBER; hash = (53 * hash) + getStructValue().hashCode(); break; case 6:
break; case 5: result = result && getStructValue() .equals(other.getStructValue()); break; case 6:
mergeStructValue(other.getStructValue()); break;
/** * <pre> * Represents a structured value. * </pre> * * <code>optional .google.protobuf.Struct struct_value = 5;</code> */ public com.google.protobuf.Struct getStructValue() { return instance.getStructValue(); } /**
private static Object valueToObject(Value value) { switch (value.getKindCase()) { case NULL_VALUE: return null; case NUMBER_VALUE: return value.getNumberValue(); case STRING_VALUE: return value.getStringValue(); case BOOL_VALUE: return value.getBoolValue(); case STRUCT_VALUE: return new StructMap(value.getStructValue()); case LIST_VALUE: return Lists.transform(value.getListValue().getValuesList(), VALUE_TO_OBJECT); default: throw new IllegalArgumentException(String.format("Unsupported protobuf value %s", value)); } }
return any.getStringValue(); case STRUCT_VALUE: Struct struct = any.getStructValue(); Map<String, Object> map = new HashMap<>(); for (Map.Entry<String, Value> pair : struct.getFieldsMap().entrySet()) {
private static JsonElement valueToJsonElement(Value value) { if (value.hasStructValue()) { return structToJsonObject(value.getStructValue()); } else if (value.hasListValue()) { JsonArray values = new JsonArray(); for (Value listElement : value.getListValue().getValuesList()) { values.add(valueToJsonElement(listElement)); } return values; } else if (value.getKindCase().equals(Value.KindCase.NULL_VALUE)) { return JsonNull.INSTANCE; } else if (value.getKindCase().equals(Value.KindCase.BOOL_VALUE)) { return new JsonPrimitive(value.getBoolValue()); } else if (value.getKindCase().equals(Value.KindCase.STRING_VALUE)) { return new JsonPrimitive(value.getStringValue()); } else if (value.getKindCase().equals(Value.KindCase.NUMBER_VALUE)) { return new JsonPrimitive(value.getNumberValue()); } else { throw new ClarifaiException("Unknown metadata Value field type."); } } }
@Test public void itReadsMixedStruct() throws IOException { String json = "{\"value\":{\"null\":null,\"number\":1.5,\"string\":\"test\",\"boolean\":true,\"struct\":{\"key\":\"nested\"},\"list\":[\"nested\"]}}"; HasValue message = camelCase().readValue(json, HasValue.class); assertThat(message.hasValue()).isTrue(); Value value = message.getValue(); switch (value.getKindCase()) { case STRUCT_VALUE: Map<String, Value> map = value.getStructValue().getFieldsMap(); Value nested = Value.newBuilder().setStringValue("nested").build(); Struct nestedStruct = Struct.newBuilder().putFields("key", nested).build(); ListValue list = ListValue.newBuilder().addValues(nested).build(); assertThat(map.size()).isEqualTo(6); assertThat(map.get("null")).isEqualTo(Value.newBuilder().setNullValue(NullValue.NULL_VALUE).build()); assertThat(map.get("number")).isEqualTo(Value.newBuilder().setNumberValue(1.5).build()); assertThat(map.get("string")).isEqualTo(Value.newBuilder().setStringValue("test").build()); assertThat(map.get("boolean")).isEqualTo(Value.newBuilder().setBoolValue(true).build()); assertThat(map.get("struct")).isEqualTo(Value.newBuilder().setStructValue(nestedStruct).build()); assertThat(map.get("list")).isEqualTo(Value.newBuilder().setListValue(list).build()); break; default: fail("Unexpected value kind: " + value.getKindCase()); } }
@Test public void itReadsStructValue() throws IOException { String json = "{\"value\":{\"key\":\"value\"}}"; HasValue valueWrapper = camelCase().readValue(json, HasValue.class); assertThat(valueWrapper.hasValue()).isTrue(); Value value = valueWrapper.getValue(); switch (value.getKindCase()) { case STRUCT_VALUE: Entry<String, Value> entry = entry("key", Value.newBuilder().setStringValue("value").build()); assertThat(value.getStructValue().getFieldsMap()).containsExactly(entry); break; default: fail("Unexpected value kind: " + value.getKindCase()); } }