From b372d245249e92e1fe8c1272f500fb955b835304 Mon Sep 17 00:00:00 2001 From: Patrick Schlindwein Date: Wed, 17 May 2023 13:16:26 +0200 Subject: [PATCH] Include boolean support in existing JsonEnum.Deserializer Signed-off-by: Patrick Schlindwein --- .../org/opensearch/client/json/JsonEnum.java | 63 +++++++------------ .../client/opensearch/_types/Refresh.java | 2 +- .../_types/mapping/DynamicMapping.java | 2 +- 3 files changed, 25 insertions(+), 42 deletions(-) diff --git a/java-client/src/main/java/org/opensearch/client/json/JsonEnum.java b/java-client/src/main/java/org/opensearch/client/json/JsonEnum.java index 431e96ead0..ab63641594 100644 --- a/java-client/src/main/java/org/opensearch/client/json/JsonEnum.java +++ b/java-client/src/main/java/org/opensearch/client/json/JsonEnum.java @@ -44,7 +44,7 @@ /** * Base interface for enumerations in API types. Members have a JSON representation and also accept - * aliases when parsed from a string value. + * aliases when parsed from a string value. For some enumerations primitive boolean values are also supported. */ public interface JsonEnum extends JsonpSerializable { String jsonValue(); @@ -62,14 +62,18 @@ default void serialize(JsonGenerator generator, JsonpMapper params) { class Deserializer extends JsonpDeserializerBase { private final Map lookupTable; - public Deserializer(T[] values) { - this(values, EnumSet.of(JsonParser.Event.VALUE_STRING, JsonParser.Event.KEY_NAME)); - } + private static final EnumSet ACCEPTED_EVENTS = EnumSet.of( + JsonParser.Event.VALUE_STRING, + JsonParser.Event.KEY_NAME, + JsonParser.Event.VALUE_TRUE, + JsonParser.Event.VALUE_FALSE + ); + + private static final EnumSet NATIVE_EVENTS = EnumSet.of(JsonParser.Event.VALUE_STRING); - private Deserializer(T[] values, EnumSet acceptedEvents) { - super(acceptedEvents, EnumSet.of(JsonParser.Event.VALUE_STRING)); + public Deserializer(T[] values) { + super(ACCEPTED_EVENTS, NATIVE_EVENTS); - // Use the same size calculation as in java.lang.Enum.enumConstantDirectory this.lookupTable = new HashMap<>((int) (values.length / 0.75f) + 1); for (T member : values) { this.lookupTable.put(member.jsonValue(), member); @@ -84,7 +88,18 @@ private Deserializer(T[] values, EnumSet acceptedEvents) { @Override public T deserialize(JsonParser parser, JsonpMapper mapper, JsonParser.Event event) { - String value = parser.getString(); + String value; + switch (event) { + case VALUE_TRUE: + value = "true"; + break; + case VALUE_FALSE: + value = "false"; + break; + default: + value = parser.getString(); + } + return deserialize(value, parser); } @@ -119,36 +134,4 @@ public T parse(String value) { return result; } } - - class DeserializerSupportingBooleans extends Deserializer { - - private static final EnumSet ACCEPTED_EVENTS = EnumSet.of( - JsonParser.Event.VALUE_STRING, - JsonParser.Event.KEY_NAME, - JsonParser.Event.VALUE_TRUE, - JsonParser.Event.VALUE_FALSE - ); - - public DeserializerSupportingBooleans(T[] values) { - super(values, ACCEPTED_EVENTS); - } - - @Override - public T deserialize(JsonParser parser, JsonpMapper mapper, JsonParser.Event event) { - String value; - - switch (event) { - case VALUE_TRUE: - value = "true"; - break; - case VALUE_FALSE: - value = "false"; - break; - default: - value = parser.getString(); - } - - return deserialize(value, parser); - } - } } diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/_types/Refresh.java b/java-client/src/main/java/org/opensearch/client/opensearch/_types/Refresh.java index e8e691468f..bbd1ccec70 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/_types/Refresh.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/_types/Refresh.java @@ -59,5 +59,5 @@ public String jsonValue() { return this.jsonValue; } - public static final JsonEnum.Deserializer _DESERIALIZER = new JsonEnum.DeserializerSupportingBooleans<>(Refresh.values()); + public static final JsonEnum.Deserializer _DESERIALIZER = new JsonEnum.Deserializer<>(Refresh.values()); } diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/_types/mapping/DynamicMapping.java b/java-client/src/main/java/org/opensearch/client/opensearch/_types/mapping/DynamicMapping.java index 4448adf9c7..c1617e05b0 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/_types/mapping/DynamicMapping.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/_types/mapping/DynamicMapping.java @@ -62,6 +62,6 @@ public String jsonValue() { return this.jsonValue; } - public static final JsonEnum.Deserializer _DESERIALIZER = new JsonEnum.DeserializerSupportingBooleans<>( + public static final JsonEnum.Deserializer _DESERIALIZER = new JsonEnum.Deserializer<>( DynamicMapping.values()); }