From 1e85a1e3ce6967c67706d9f1dc13f14d29dda990 Mon Sep 17 00:00:00 2001 From: Sylvain Wallez Date: Thu, 11 Aug 2022 18:28:39 +0200 Subject: [PATCH] Add support for plugin-defined custom components in union types --- .../elasticsearch/_types/SortOptions.java | 3 - .../elasticsearch/_types/Transform.java | 3 - .../_types/aggregations/Aggregate.java | 80 +++++++++++++++--- .../_types/aggregations/Aggregation.java | 65 ++++++++++++-- .../_types/aggregations/InferenceConfig.java | 3 - .../MovingAverageAggregation.java | 3 - .../_types/analysis/Analyzer.java | 81 ++++++++++++++++-- .../_types/analysis/CharFilterDefinition.java | 84 ++++++++++++++++--- .../_types/analysis/Normalizer.java | 3 - .../analysis/TokenFilterDefinition.java | 84 ++++++++++++++++--- .../_types/analysis/TokenizerDefinition.java | 84 ++++++++++++++++--- .../_types/mapping/Property.java | 81 ++++++++++++++++-- .../_types/query_dsl/FunctionScore.java | 5 +- .../_types/query_dsl/Intervals.java | 3 - .../_types/query_dsl/IntervalsFilter.java | 3 - .../_types/query_dsl/IntervalsQuery.java | 3 - .../_types/query_dsl/PinnedQuery.java | 3 - .../elasticsearch/_types/query_dsl/Query.java | 66 +++++++++++++-- .../_types/query_dsl/SpanQuery.java | 3 - .../PutAutoscalingPolicyRequest.java | 4 +- .../elasticsearch/cat/AliasesResponse.java | 4 +- .../elasticsearch/cat/AllocationResponse.java | 4 +- .../cat/ComponentTemplatesResponse.java | 4 +- .../elasticsearch/cat/CountResponse.java | 4 +- .../elasticsearch/cat/FielddataResponse.java | 4 +- .../elasticsearch/cat/HealthResponse.java | 4 +- .../elasticsearch/cat/HelpResponse.java | 4 +- .../elasticsearch/cat/IndicesResponse.java | 4 +- .../elasticsearch/cat/MasterResponse.java | 4 +- .../cat/MlDataFrameAnalyticsResponse.java | 4 +- .../cat/MlDatafeedsResponse.java | 4 +- .../elasticsearch/cat/MlJobsResponse.java | 4 +- .../cat/MlTrainedModelsResponse.java | 4 +- .../elasticsearch/cat/NodeattrsResponse.java | 4 +- .../elasticsearch/cat/NodesResponse.java | 4 +- .../cat/PendingTasksResponse.java | 4 +- .../elasticsearch/cat/PluginsResponse.java | 4 +- .../elasticsearch/cat/RecoveryResponse.java | 4 +- .../cat/RepositoriesResponse.java | 4 +- .../elasticsearch/cat/SegmentsResponse.java | 4 +- .../elasticsearch/cat/ShardsResponse.java | 4 +- .../elasticsearch/cat/SnapshotsResponse.java | 4 +- .../elasticsearch/cat/TasksResponse.java | 4 +- .../elasticsearch/cat/TemplatesResponse.java | 4 +- .../elasticsearch/cat/ThreadPoolResponse.java | 4 +- .../elasticsearch/cat/TransformsResponse.java | 4 +- .../cluster/RemoteInfoResponse.java | 4 +- .../elasticsearch/cluster/StateResponse.java | 4 +- .../remote_info/ClusterRemoteInfo.java | 3 - .../elasticsearch/core/CreateRequest.java | 5 +- .../elasticsearch/core/GetSourceResponse.java | 5 +- .../elasticsearch/core/IndexRequest.java | 5 +- .../core/bulk/BulkOperation.java | 3 - .../core/search/FieldSuggester.java | 66 +++++++++++++-- .../core/search/SmoothingModel.java | 3 - .../elasticsearch/core/search/Suggestion.java | 5 +- .../ilm/GetLifecycleResponse.java | 4 +- .../explain_lifecycle/LifecycleExplain.java | 3 - .../indices/DiskUsageResponse.java | 4 +- .../indices/GetAliasResponse.java | 4 +- .../indices/GetFieldMappingResponse.java | 4 +- .../indices/GetIndexResponse.java | 4 +- .../indices/GetIndicesSettingsResponse.java | 4 +- .../indices/GetMappingResponse.java | 4 +- .../indices/GetTemplateResponse.java | 4 +- .../indices/PromoteDataStreamResponse.java | 4 +- .../indices/PutIndicesSettingsRequest.java | 4 +- .../indices/RecoveryResponse.java | 4 +- .../indices/SimulateTemplateRequest.java | 4 +- .../indices/modify_data_stream/Action.java | 3 - .../indices/update_aliases/Action.java | 3 - .../ingest/GetPipelineResponse.java | 4 +- .../elasticsearch/ingest/InferenceConfig.java | 3 - .../elasticsearch/ingest/Processor.java | 66 +++++++++++++-- .../logstash/GetPipelineResponse.java | 4 +- .../logstash/PutPipelineRequest.java | 4 +- .../elasticsearch/ml/DataframeAnalysis.java | 3 - .../ml/DataframeAnalysisFeatureProcessor.java | 3 - .../ml/DataframeAnalyticsStats.java | 3 - .../elasticsearch/ml/DataframeEvaluation.java | 3 - .../ml/InferenceConfigCreate.java | 3 - .../ml/InferenceConfigUpdate.java | 3 - .../elasticsearch/ml/PostDataRequest.java | 4 +- .../elasticsearch/ml/TokenizationConfig.java | 3 - .../ml/ValidateDetectorRequest.java | 4 +- .../ml/put_trained_model/Preprocessor.java | 3 - .../rollup/GetRollupCapsResponse.java | 4 +- .../rollup/GetRollupIndexCapsResponse.java | 4 +- .../elasticsearch/rollup/RollupRequest.java | 4 +- .../elasticsearch/rollup/RollupResponse.java | 4 +- .../ClearCacheResponse.java | 4 +- .../security/DeletePrivilegesResponse.java | 4 +- .../elasticsearch/security/FieldRule.java | 3 - .../security/GetPrivilegesResponse.java | 4 +- .../security/GetRoleMappingResponse.java | 4 +- .../security/GetRoleResponse.java | 4 +- .../security/GetServiceAccountsResponse.java | 4 +- .../security/GetUserProfileResponse.java | 4 +- .../security/GetUserResponse.java | 4 +- .../security/PutPrivilegesRequest.java | 4 +- .../security/PutPrivilegesResponse.java | 4 +- .../security/RoleMappingRule.java | 3 - .../slm/GetLifecycleResponse.java | 4 +- .../snapshot/GetRepositoryResponse.java | 4 +- .../ssl/CertificatesResponse.java | 4 +- .../elasticsearch/transform/PivotGroupBy.java | 3 - .../transform/RetentionPolicy.java | 3 - .../clients/elasticsearch/transform/Sync.java | 3 - .../elasticsearch/watcher/Condition.java | 3 - .../watcher/EmailAttachment.java | 3 - .../clients/elasticsearch/watcher/Input.java | 3 - .../elasticsearch/watcher/Schedule.java | 3 - .../elasticsearch/watcher/Trigger.java | 3 - .../elasticsearch/watcher/TriggerEvent.java | 3 - .../clients/json/ExternallyTaggedUnion.java | 62 +++++++++++--- .../co/elastic/clients/json/JsonData.java | 53 +++++++++++- .../co/elastic/clients/json/JsonEnum.java | 5 +- .../clients/json/JsonpMapperFeatures.java | 9 ++ .../co/elastic/clients/json/JsonpUtils.java | 6 ++ .../clients/json/ObjectDeserializer.java | 2 +- .../elastic/clients/util/OpenTaggedUnion.java | 36 ++++++++ .../co/elastic/clients/util/TaggedUnion.java | 10 +++ .../json/JsonpDeserializerTest.java | 43 ++++++++++ .../elasticsearch/model/UnionTests.java | 75 +++++++++++++++++ 124 files changed, 1096 insertions(+), 347 deletions(-) create mode 100644 java-client/src/main/java/co/elastic/clients/util/OpenTaggedUnion.java create mode 100644 java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpDeserializerTest.java diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/SortOptions.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/SortOptions.java index 21397dda5..4b2430a29 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/SortOptions.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/SortOptions.java @@ -56,9 +56,6 @@ @JsonpDeserializable public class SortOptions implements TaggedUnion, JsonpSerializable { - /** - * {@link SortOptions} variant kinds. - */ /** * {@link SortOptions} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Transform.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Transform.java index edc3a56f6..8bd4b2b0b 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Transform.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Transform.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class Transform implements TaggedUnion, JsonpSerializable { - /** - * {@link Transform} variant kinds. - */ /** * {@link Transform} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregate.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregate.java index a82952e56..38b9497f8 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregate.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregate.java @@ -24,6 +24,7 @@ package co.elastic.clients.elasticsearch._types.aggregations; import co.elastic.clients.json.ExternallyTaggedUnion; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -34,9 +35,10 @@ import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; import co.elastic.clients.util.ObjectBuilderBase; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import jakarta.json.stream.JsonGenerator; +import java.lang.Object; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -52,11 +54,8 @@ * specification */ -public class Aggregate implements TaggedUnion, JsonpSerializable { +public class Aggregate implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link Aggregate} variant kinds. - */ /** * {@link Aggregate} variant kinds. * @@ -198,6 +197,9 @@ public enum Kind implements JsonEnum { WeightedAvg("weighted_avg"), + /** A custom {@code Aggregate} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -213,7 +215,7 @@ public String jsonValue() { } private final Kind _kind; - private final AggregateVariant _value; + private final Object _value; @Override public final Kind _kind() { @@ -221,7 +223,7 @@ public final Kind _kind() { } @Override - public final AggregateVariant _get() { + public final Object _get() { return _value; } @@ -229,6 +231,7 @@ public Aggregate(AggregateVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._aggregateKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -236,6 +239,7 @@ private Aggregate(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -243,6 +247,16 @@ public static Aggregate of(Function> fn) { return fn.apply(new Builder()).build(); } + /** + * Build a custom plugin-defined {@code Aggregate}, given its kind and some JSON + * data + */ + public Aggregate(String kind, JsonData value) { + this._kind = Kind._Custom; + this._value = value; + this._customKind = kind; + } + /** * Is this variant instance of kind {@code adjacency_matrix}? */ @@ -1379,6 +1393,35 @@ public WeightedAvgAggregate weightedAvg() { return TaggedUnionUtils.get(this, Kind.WeightedAvg); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code Aggregate} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override public void serialize(JsonGenerator generator, JsonpMapper mapper) { @@ -1393,7 +1436,8 @@ public String toString() { public static class Builder extends ObjectBuilderBase implements ObjectBuilder { private Kind _kind; - private AggregateVariant _value; + private Object _value; + private String _customKind; public ObjectBuilder adjacencyMatrix(AdjacencyMatrixAggregate v) { this._kind = Kind.AdjacencyMatrix; @@ -2109,6 +2153,22 @@ public ObjectBuilder weightedAvg( return this.weightedAvg(fn.apply(new WeightedAvgAggregate.Builder()).build()); } + /** + * Define this {@code Aggregate} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code Aggregate}. It is converted + * internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public Aggregate build() { _checkSingleUse(); return new Aggregate(this); @@ -2187,7 +2247,7 @@ public Aggregate build() { deserializers.put("variable_width_histogram", VariableWidthHistogramAggregate._DESERIALIZER); deserializers.put("weighted_avg", WeightedAvgAggregate._DESERIALIZER); - _TYPED_KEYS_DESERIALIZER = new ExternallyTaggedUnion.Deserializer<>(deserializers, - (name, value) -> new Aggregate(value)).typedKeys(); + _TYPED_KEYS_DESERIALIZER = new ExternallyTaggedUnion.Deserializer<>(deserializers, Aggregate::new, + Aggregate::new).typedKeys(); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregation.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregation.java index f45cf7163..75a23b93b 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregation.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/Aggregation.java @@ -35,7 +35,7 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; @@ -55,11 +55,8 @@ * specification */ @JsonpDeserializable -public class Aggregation implements TaggedUnion, JsonpSerializable { +public class Aggregation implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link Aggregation} variant kinds. - */ /** * {@link Aggregation} variant kinds. * @@ -215,6 +212,9 @@ public enum Kind implements JsonEnum { VariableWidthHistogram("variable_width_histogram"), + /** A custom {@code Aggregation} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -250,6 +250,7 @@ public Aggregation(AggregationVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._aggregationKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; this.aggregations = null; this.meta = null; @@ -260,6 +261,7 @@ private Aggregation(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; this.aggregations = ApiTypeHelper.unmodifiable(builder.aggregations); this.meta = ApiTypeHelper.unmodifiable(builder.meta); @@ -1544,6 +1546,35 @@ public VariableWidthHistogramAggregation variableWidthHistogram() { return TaggedUnionUtils.get(this, Kind.VariableWidthHistogram); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code Aggregation} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override @SuppressWarnings("unchecked") public void serialize(JsonGenerator generator, JsonpMapper mapper) { @@ -1573,7 +1604,7 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) { } - generator.writeKey(_kind.jsonValue()); + generator.writeKey(_kind == Kind._Custom ? _customKind : _kind.jsonValue()); if (_value instanceof JsonpSerializable) { ((JsonpSerializable) _value).serialize(generator, mapper); } @@ -1590,6 +1621,7 @@ public String toString() { public static class Builder extends WithJsonObjectBuilderBase { private Kind _kind; private Object _value; + private String _customKind; @Nullable private Map aggregations; @@ -2438,6 +2470,22 @@ public ContainerBuilder variableWidthHistogram( return this.variableWidthHistogram(fn.apply(new VariableWidthHistogramAggregation.Builder()).build()); } + /** + * Define this {@code Aggregation} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code Aggregation}. It is converted + * internally to {@link JsonData}. + */ + public ContainerBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return new ContainerBuilder(); + } + protected Aggregation build() { _checkSingleUse(); return new Aggregation(this); @@ -2589,6 +2637,11 @@ protected static void setupAggregationDeserializer(ObjectDeserializer o op.add(Builder::variableWidthHistogram, VariableWidthHistogramAggregation._DESERIALIZER, "variable_width_histogram"); + op.setUnknownFieldHandler((builder, name, parser, mapper) -> { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + } public static final JsonpDeserializer _DESERIALIZER = ObjectBuilderDeserializer.lazy(Builder::new, diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/InferenceConfig.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/InferenceConfig.java index 44b0133fb..180a75e60 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/InferenceConfig.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/InferenceConfig.java @@ -55,9 +55,6 @@ @JsonpDeserializable public class InferenceConfig implements TaggedUnion, JsonpSerializable { - /** - * {@link InferenceConfig} variant kinds. - */ /** * {@link InferenceConfig} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MovingAverageAggregation.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MovingAverageAggregation.java index cac22f199..ded693fac 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MovingAverageAggregation.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/aggregations/MovingAverageAggregation.java @@ -55,9 +55,6 @@ public class MovingAverageAggregation TaggedUnion, JsonpSerializable { - /** - * {@link MovingAverageAggregation} variant kinds. - */ /** * {@link MovingAverageAggregation} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Analyzer.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Analyzer.java index 09f052c15..ed8885281 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Analyzer.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Analyzer.java @@ -23,6 +23,7 @@ package co.elastic.clients.elasticsearch._types.analysis; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -33,10 +34,11 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; +import java.lang.Object; import java.util.Objects; import java.util.function.Function; import javax.annotation.Nullable; @@ -49,11 +51,8 @@ * specification */ @JsonpDeserializable -public class Analyzer implements TaggedUnion, JsonpSerializable { +public class Analyzer implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link Analyzer} variant kinds. - */ /** * {@link Analyzer} variant kinds. * @@ -90,6 +89,9 @@ public enum Kind implements JsonEnum { Whitespace("whitespace"), + /** A custom {@code Analyzer} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -105,7 +107,7 @@ public String jsonValue() { } private final Kind _kind; - private final AnalyzerVariant _value; + private final Object _value; @Override public final Kind _kind() { @@ -113,7 +115,7 @@ public final Kind _kind() { } @Override - public final AnalyzerVariant _get() { + public final Object _get() { return _value; } @@ -121,6 +123,7 @@ public Analyzer(AnalyzerVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._analyzerKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -128,6 +131,7 @@ private Analyzer(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -135,6 +139,16 @@ public static Analyzer of(Function> fn) { return fn.apply(new Builder()).build(); } + /** + * Build a custom plugin-defined {@code Analyzer}, given its kind and some JSON + * data + */ + public Analyzer(String kind, JsonData value) { + this._kind = Kind._Custom; + this._value = value; + this._customKind = kind; + } + /** * Is this variant instance of kind {@code custom}? */ @@ -373,6 +387,35 @@ public WhitespaceAnalyzer whitespace() { return TaggedUnionUtils.get(this, Kind.Whitespace); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code Analyzer} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override public void serialize(JsonGenerator generator, JsonpMapper mapper) { @@ -387,7 +430,8 @@ public String toString() { public static class Builder extends WithJsonObjectBuilderBase implements ObjectBuilder { private Kind _kind; - private AnalyzerVariant _value; + private Object _value; + private String _customKind; @Override protected Builder self() { @@ -539,6 +583,22 @@ public ObjectBuilder whitespace( return this.whitespace(fn.apply(new WhitespaceAnalyzer.Builder()).build()); } + /** + * Define this {@code Analyzer} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code Analyzer}. It is converted + * internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public Analyzer build() { _checkSingleUse(); return new Analyzer(this); @@ -563,6 +623,11 @@ protected static void setupAnalyzerDeserializer(ObjectDeserializer op) op.add(Builder::stop, StopAnalyzer._DESERIALIZER, "stop"); op.add(Builder::whitespace, WhitespaceAnalyzer._DESERIALIZER, "whitespace"); + op.setUnknownFieldHandler((builder, name, parser, mapper) -> { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + op.setTypeProperty("type", null); } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/CharFilterDefinition.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/CharFilterDefinition.java index d443657c8..e2d49ab99 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/CharFilterDefinition.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/CharFilterDefinition.java @@ -23,6 +23,7 @@ package co.elastic.clients.elasticsearch._types.analysis; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -33,10 +34,11 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; +import java.lang.Object; import java.util.Objects; import java.util.function.Function; import javax.annotation.Nullable; @@ -50,14 +52,8 @@ * specification */ @JsonpDeserializable -public class CharFilterDefinition - implements - TaggedUnion, - JsonpSerializable { +public class CharFilterDefinition implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link CharFilterDefinition} variant kinds. - */ /** * {@link CharFilterDefinition} variant kinds. * @@ -77,6 +73,9 @@ public enum Kind implements JsonEnum { PatternReplace("pattern_replace"), + /** A custom {@code CharFilterDefinition} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -92,7 +91,7 @@ public String jsonValue() { } private final Kind _kind; - private final CharFilterDefinitionVariant _value; + private final Object _value; @Override public final Kind _kind() { @@ -100,7 +99,7 @@ public final Kind _kind() { } @Override - public final CharFilterDefinitionVariant _get() { + public final Object _get() { return _value; } @@ -108,6 +107,7 @@ public CharFilterDefinition(CharFilterDefinitionVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._charFilterDefinitionKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -115,6 +115,7 @@ private CharFilterDefinition(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -122,6 +123,16 @@ public static CharFilterDefinition of(Function implements ObjectBuilder { private Kind _kind; - private CharFilterDefinitionVariant _value; + private Object _value; + private String _customKind; @Override protected Builder self() { @@ -286,6 +327,22 @@ public ObjectBuilder patternReplace( return this.patternReplace(fn.apply(new PatternReplaceCharFilter.Builder()).build()); } + /** + * Define this {@code CharFilterDefinition} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code CharFilterDefinition}. It is + * converted internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public CharFilterDefinition build() { _checkSingleUse(); return new CharFilterDefinition(this); @@ -302,6 +359,11 @@ protected static void setupCharFilterDefinitionDeserializer(ObjectDeserializer { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + op.setTypeProperty("type", null); } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Normalizer.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Normalizer.java index 0a62f5c28..be3010f82 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Normalizer.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/Normalizer.java @@ -54,9 +54,6 @@ @JsonpDeserializable public class Normalizer implements TaggedUnion, JsonpSerializable { - /** - * {@link Normalizer} variant kinds. - */ /** * {@link Normalizer} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenFilterDefinition.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenFilterDefinition.java index 806dc5b96..47f16358a 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenFilterDefinition.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenFilterDefinition.java @@ -23,6 +23,7 @@ package co.elastic.clients.elasticsearch._types.analysis; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -33,10 +34,11 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; +import java.lang.Object; import java.util.Objects; import java.util.function.Function; import javax.annotation.Nullable; @@ -50,14 +52,8 @@ * specification */ @JsonpDeserializable -public class TokenFilterDefinition - implements - TaggedUnion, - JsonpSerializable { +public class TokenFilterDefinition implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link TokenFilterDefinition} variant kinds. - */ /** * {@link TokenFilterDefinition} variant kinds. * @@ -163,6 +159,9 @@ public enum Kind implements JsonEnum { WordDelimiter("word_delimiter"), + /** A custom {@code TokenFilterDefinition} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -178,7 +177,7 @@ public String jsonValue() { } private final Kind _kind; - private final TokenFilterDefinitionVariant _value; + private final Object _value; @Override public final Kind _kind() { @@ -186,7 +185,7 @@ public final Kind _kind() { } @Override - public final TokenFilterDefinitionVariant _get() { + public final Object _get() { return _value; } @@ -194,6 +193,7 @@ public TokenFilterDefinition(TokenFilterDefinitionVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._tokenFilterDefinitionKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -201,6 +201,7 @@ private TokenFilterDefinition(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -208,6 +209,16 @@ public static TokenFilterDefinition of(Function implements ObjectBuilder { private Kind _kind; - private TokenFilterDefinitionVariant _value; + private Object _value; + private String _customKind; @Override protected Builder self() { @@ -1587,6 +1628,22 @@ public ObjectBuilder wordDelimiter( return this.wordDelimiter(fn.apply(new WordDelimiterTokenFilter.Builder()).build()); } + /** + * Define this {@code TokenFilterDefinition} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code TokenFilterDefinition}. It is + * converted internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public TokenFilterDefinition build() { _checkSingleUse(); return new TokenFilterDefinition(this); @@ -1647,6 +1704,11 @@ protected static void setupTokenFilterDefinitionDeserializer(ObjectDeserializer< op.add(Builder::wordDelimiterGraph, WordDelimiterGraphTokenFilter._DESERIALIZER, "word_delimiter_graph"); op.add(Builder::wordDelimiter, WordDelimiterTokenFilter._DESERIALIZER, "word_delimiter"); + op.setUnknownFieldHandler((builder, name, parser, mapper) -> { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + op.setTypeProperty("type", null); } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenizerDefinition.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenizerDefinition.java index db698c8a4..270dd798f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenizerDefinition.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/analysis/TokenizerDefinition.java @@ -23,6 +23,7 @@ package co.elastic.clients.elasticsearch._types.analysis; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -33,10 +34,11 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; +import java.lang.Object; import java.util.Objects; import java.util.function.Function; import javax.annotation.Nullable; @@ -50,14 +52,8 @@ * specification */ @JsonpDeserializable -public class TokenizerDefinition - implements - TaggedUnion, - JsonpSerializable { +public class TokenizerDefinition implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link TokenizerDefinition} variant kinds. - */ /** * {@link TokenizerDefinition} variant kinds. * @@ -95,6 +91,9 @@ public enum Kind implements JsonEnum { Whitespace("whitespace"), + /** A custom {@code TokenizerDefinition} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -110,7 +109,7 @@ public String jsonValue() { } private final Kind _kind; - private final TokenizerDefinitionVariant _value; + private final Object _value; @Override public final Kind _kind() { @@ -118,7 +117,7 @@ public final Kind _kind() { } @Override - public final TokenizerDefinitionVariant _get() { + public final Object _get() { return _value; } @@ -126,6 +125,7 @@ public TokenizerDefinition(TokenizerDefinitionVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._tokenizerDefinitionKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -133,6 +133,7 @@ private TokenizerDefinition(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -140,6 +141,16 @@ public static TokenizerDefinition of(Function implements ObjectBuilder { private Kind _kind; - private TokenizerDefinitionVariant _value; + private Object _value; + private String _customKind; @Override protected Builder self() { @@ -555,6 +596,22 @@ public ObjectBuilder whitespace( return this.whitespace(fn.apply(new WhitespaceTokenizer.Builder()).build()); } + /** + * Define this {@code TokenizerDefinition} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code TokenizerDefinition}. It is + * converted internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public TokenizerDefinition build() { _checkSingleUse(); return new TokenizerDefinition(this); @@ -579,6 +636,11 @@ protected static void setupTokenizerDefinitionDeserializer(ObjectDeserializer { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + op.setTypeProperty("type", null); } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/Property.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/Property.java index 99b8013ed..38551035e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/Property.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/mapping/Property.java @@ -23,6 +23,7 @@ package co.elastic.clients.elasticsearch._types.mapping; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -33,10 +34,11 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; +import java.lang.Object; import java.util.Objects; import java.util.function.Function; import javax.annotation.Nullable; @@ -49,11 +51,8 @@ * specification */ @JsonpDeserializable -public class Property implements TaggedUnion, JsonpSerializable { +public class Property implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link Property} variant kinds. - */ /** * {@link Property} variant kinds. * @@ -154,6 +153,9 @@ public enum Kind implements JsonEnum { Wildcard("wildcard"), + /** A custom {@code Property} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -169,7 +171,7 @@ public String jsonValue() { } private final Kind _kind; - private final PropertyVariant _value; + private final Object _value; @Override public final Kind _kind() { @@ -177,7 +179,7 @@ public final Kind _kind() { } @Override - public final PropertyVariant _get() { + public final Object _get() { return _value; } @@ -185,6 +187,7 @@ public Property(PropertyVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._propertyKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -192,6 +195,7 @@ private Property(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -199,6 +203,16 @@ public static Property of(Function> fn) { return fn.apply(new Builder()).build(); } + /** + * Build a custom plugin-defined {@code Property}, given its kind and some JSON + * data + */ + public Property(String kind, JsonData value) { + this._kind = Kind._Custom; + this._value = value; + this._customKind = kind; + } + /** * Is this variant instance of kind {@code aggregate_metric_double}? */ @@ -986,6 +1000,35 @@ public WildcardProperty wildcard() { return TaggedUnionUtils.get(this, Kind.Wildcard); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code Property} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override public void serialize(JsonGenerator generator, JsonpMapper mapper) { @@ -1000,7 +1043,8 @@ public String toString() { public static class Builder extends WithJsonObjectBuilderBase implements ObjectBuilder { private Kind _kind; - private PropertyVariant _value; + private Object _value; + private String _customKind; @Override protected Builder self() { @@ -1499,6 +1543,22 @@ public ObjectBuilder wildcard( return this.wildcard(fn.apply(new WildcardProperty.Builder()).build()); } + /** + * Define this {@code Property} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code Property}. It is converted + * internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public Property build() { _checkSingleUse(); return new Property(this); @@ -1555,6 +1615,11 @@ protected static void setupPropertyDeserializer(ObjectDeserializer op) op.add(Builder::version, VersionProperty._DESERIALIZER, "version"); op.add(Builder::wildcard, WildcardProperty._DESERIALIZER, "wildcard"); + op.setUnknownFieldHandler((builder, name, parser, mapper) -> { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + op.setTypeProperty("type", "object"); } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/FunctionScore.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/FunctionScore.java index b3efa906b..4d774b47a 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/FunctionScore.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/FunctionScore.java @@ -54,9 +54,6 @@ @JsonpDeserializable public class FunctionScore implements TaggedUnion, JsonpSerializable { - /** - * {@link FunctionScore} variant kinds. - */ /** * {@link FunctionScore} variant kinds. * @@ -120,6 +117,7 @@ public FunctionScore(@Nullable FunctionScoreVariant value) { if (value != null) { this._kind = ApiTypeHelper.requireNonNull(value._functionScoreKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + } else { this._kind = null; this._value = null; @@ -135,6 +133,7 @@ private FunctionScore(Builder builder) { if (builder._value != null) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + } else { this._kind = null; this._value = null; diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Intervals.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Intervals.java index 7209e8935..e379a9d3c 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Intervals.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Intervals.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class Intervals implements TaggedUnion, IntervalsFilterVariant, JsonpSerializable { - /** - * {@link Intervals} variant kinds. - */ /** * {@link Intervals} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsFilter.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsFilter.java index acec93aaf..2b82650d2 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsFilter.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsFilter.java @@ -54,9 +54,6 @@ @JsonpDeserializable public class IntervalsFilter implements TaggedUnion, JsonpSerializable { - /** - * {@link IntervalsFilter} variant kinds. - */ /** * {@link IntervalsFilter} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsQuery.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsQuery.java index 5a6c0757c..9f446e458 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsQuery.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/IntervalsQuery.java @@ -57,9 +57,6 @@ public class IntervalsQuery extends QueryBase QueryVariant, JsonpSerializable { - /** - * {@link IntervalsQuery} variant kinds. - */ /** * {@link IntervalsQuery} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/PinnedQuery.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/PinnedQuery.java index 2a2d65956..40dcb565f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/PinnedQuery.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/PinnedQuery.java @@ -57,9 +57,6 @@ public class PinnedQuery extends QueryBase QueryVariant, JsonpSerializable { - /** - * {@link PinnedQuery} variant kinds. - */ /** * {@link PinnedQuery} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Query.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Query.java index 28a3df73d..39d9a9a97 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Query.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/Query.java @@ -25,6 +25,7 @@ import co.elastic.clients.elasticsearch._types.aggregations.Aggregation; import co.elastic.clients.elasticsearch._types.aggregations.AggregationVariant; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -35,7 +36,7 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; @@ -56,11 +57,8 @@ * specification */ @JsonpDeserializable -public class Query implements TaggedUnion, AggregationVariant, JsonpSerializable { +public class Query implements OpenTaggedUnion, AggregationVariant, JsonpSerializable { - /** - * {@link Query} variant kinds. - */ /** * {@link Query} variant kinds. * @@ -180,6 +178,9 @@ public enum Kind implements JsonEnum { Type("type"), + /** A custom {@code Query} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -219,6 +220,7 @@ public Query(QueryVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._queryKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -226,6 +228,7 @@ private Query(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -1176,13 +1179,42 @@ public TypeQuery type() { return TaggedUnionUtils.get(this, Kind.Type); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code Query} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override @SuppressWarnings("unchecked") public void serialize(JsonGenerator generator, JsonpMapper mapper) { generator.writeStartObject(); - generator.writeKey(_kind.jsonValue()); + generator.writeKey(_kind == Kind._Custom ? _customKind : _kind.jsonValue()); if (_value instanceof JsonpSerializable) { ((JsonpSerializable) _value).serialize(generator, mapper); } @@ -1199,6 +1231,7 @@ public String toString() { public static class Builder extends WithJsonObjectBuilderBase implements ObjectBuilder { private Kind _kind; private Object _value; + private String _customKind; @Override protected Builder self() { @@ -1771,6 +1804,22 @@ public ObjectBuilder type(Function _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public Query build() { _checkSingleUse(); return new Query(this); @@ -1836,6 +1885,11 @@ protected static void setupQueryDeserializer(ObjectDeserializer op) { op.add(Builder::wrapper, WrapperQuery._DESERIALIZER, "wrapper"); op.add(Builder::type, TypeQuery._DESERIALIZER, "type"); + op.setUnknownFieldHandler((builder, name, parser, mapper) -> { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + } public static final JsonpDeserializer _DESERIALIZER = ObjectBuilderDeserializer.lazy(Builder::new, diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/SpanQuery.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/SpanQuery.java index 1a0d588c7..e49038213 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/SpanQuery.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/query_dsl/SpanQuery.java @@ -52,9 +52,6 @@ @JsonpDeserializable public class SpanQuery implements TaggedUnion, JsonpSerializable { - /** - * {@link SpanQuery} variant kinds. - */ /** * {@link SpanQuery} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/autoscaling/PutAutoscalingPolicyRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/autoscaling/PutAutoscalingPolicyRequest.java index ac292f7df..5f47c56f1 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/autoscaling/PutAutoscalingPolicyRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/autoscaling/PutAutoscalingPolicyRequest.java @@ -166,8 +166,8 @@ protected static JsonpDeserializer createPutAutosca JsonpDeserializer valueDeserializer = AutoscalingPolicy._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().policy(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .policy(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AliasesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AliasesResponse.java index d82a365ff..3a343e897 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AliasesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AliasesResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createAliasesResponseDeseria JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(AliasesRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AllocationResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AllocationResponse.java index ffbc2693b..a9fe98523 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AllocationResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/AllocationResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createAllocationResponseD JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(AllocationRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ComponentTemplatesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ComponentTemplatesResponse.java index ee0286e81..d168f628e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ComponentTemplatesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ComponentTemplatesResponse.java @@ -163,8 +163,8 @@ protected static JsonpDeserializer createComponentTe JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(ComponentTemplate._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/CountResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/CountResponse.java index b9d040e84..af802ef7a 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/CountResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/CountResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createCountResponseDeserialize JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(CountRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/FielddataResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/FielddataResponse.java index c5d3f057b..ed390a9ab 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/FielddataResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/FielddataResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createFielddataResponseDes JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(FielddataRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HealthResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HealthResponse.java index 3385a18f9..732433dbe 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HealthResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HealthResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createHealthResponseDeseriali JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(HealthRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HelpResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HelpResponse.java index d35ac192f..aa28b4005 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HelpResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/HelpResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createHelpResponseDeserializer( JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(HelpRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/IndicesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/IndicesResponse.java index 171e35455..17d4316a9 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/IndicesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/IndicesResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createIndicesResponseDeseria JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(IndicesRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MasterResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MasterResponse.java index 380fe2cf9..19f69eb63 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MasterResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MasterResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createMasterResponseDeseriali JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(MasterRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDataFrameAnalyticsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDataFrameAnalyticsResponse.java index 818f28bed..81332ff25 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDataFrameAnalyticsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDataFrameAnalyticsResponse.java @@ -164,8 +164,8 @@ protected static JsonpDeserializer createMlDataFra JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(DataFrameAnalyticsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDatafeedsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDatafeedsResponse.java index f1a823340..7e89a3b54 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDatafeedsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlDatafeedsResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createMlDatafeedsRespons JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(DatafeedsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlJobsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlJobsResponse.java index e77921014..05db9235d 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlJobsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlJobsResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createMlJobsResponseDeseriali JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(JobsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlTrainedModelsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlTrainedModelsResponse.java index 3db101706..f64e68c20 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlTrainedModelsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/MlTrainedModelsResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createMlTrainedModel JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(TrainedModelsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodeattrsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodeattrsResponse.java index 3eded8079..f7fd40d38 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodeattrsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodeattrsResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createNodeattrsResponseDes JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(NodeAttributesRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodesResponse.java index 043d76586..b0831cd90 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/NodesResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createNodesResponseDeserialize JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(NodesRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PendingTasksResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PendingTasksResponse.java index ef98fd8ed..663a3099f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PendingTasksResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PendingTasksResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createPendingTasksRespo JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(PendingTasksRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PluginsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PluginsResponse.java index 497e6943d..d90796f4b 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PluginsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/PluginsResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createPluginsResponseDeseria JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(PluginsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RecoveryResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RecoveryResponse.java index c1c22f551..0a23458f1 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RecoveryResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RecoveryResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createRecoveryResponseDeser JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(RecoveryRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RepositoriesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RepositoriesResponse.java index 8e6b55d9d..6b6c53bdd 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RepositoriesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/RepositoriesResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createRepositoriesRespo JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(RepositoriesRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SegmentsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SegmentsResponse.java index 1b284f99e..07b66471d 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SegmentsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SegmentsResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createSegmentsResponseDeser JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(SegmentsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ShardsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ShardsResponse.java index 4914f8a01..207a8cd07 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ShardsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ShardsResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createShardsResponseDeseriali JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(ShardsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SnapshotsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SnapshotsResponse.java index 780b3767d..8cf55bd43 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SnapshotsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/SnapshotsResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createSnapshotsResponseDes JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(SnapshotsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TasksResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TasksResponse.java index 45636556a..b487dc9e2 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TasksResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TasksResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createTasksResponseDeserialize JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(TasksRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TemplatesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TemplatesResponse.java index f020c712a..9c3771680 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TemplatesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TemplatesResponse.java @@ -160,8 +160,8 @@ protected static JsonpDeserializer createTemplatesResponseDes JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(TemplatesRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ThreadPoolResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ThreadPoolResponse.java index 16b438bce..85e5044d9 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ThreadPoolResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/ThreadPoolResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createThreadPoolResponseD JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(ThreadPoolRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TransformsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TransformsResponse.java index d26e90639..7cd36718e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TransformsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cat/TransformsResponse.java @@ -162,8 +162,8 @@ protected static JsonpDeserializer createTransformsResponseD JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(TransformsRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/RemoteInfoResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/RemoteInfoResponse.java index 53fdb2925..1deb67a0a 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/RemoteInfoResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/RemoteInfoResponse.java @@ -173,8 +173,8 @@ protected static JsonpDeserializer createRemoteInfoResponseD JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(ClusterRemoteInfo._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/StateResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/StateResponse.java index 9b9c8b921..7831a1af1 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/StateResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/StateResponse.java @@ -131,8 +131,8 @@ protected static JsonpDeserializer createStateResponseDeserialize JsonpDeserializer valueDeserializer = JsonData._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/remote_info/ClusterRemoteInfo.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/remote_info/ClusterRemoteInfo.java index d75d4d8f4..9797ec3c9 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/remote_info/ClusterRemoteInfo.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/cluster/remote_info/ClusterRemoteInfo.java @@ -55,9 +55,6 @@ public class ClusterRemoteInfo TaggedUnion, JsonpSerializable { - /** - * {@link ClusterRemoteInfo} variant kinds. - */ /** * {@link ClusterRemoteInfo} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/CreateRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/CreateRequest.java index 77dd8a3a3..bf5dfad9e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/CreateRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/CreateRequest.java @@ -445,8 +445,9 @@ public static JsonpDeserializer> createCrea JsonpDeserializer valueDeserializer = tDocumentDeserializer; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper) -> new Builder() - .document(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), + (parser, mapper, event) -> new Builder() + .document(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/GetSourceResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/GetSourceResponse.java index 7815ecb5f..b392eb46d 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/GetSourceResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/GetSourceResponse.java @@ -160,8 +160,9 @@ public static JsonpDeserializer> create JsonpDeserializer valueDeserializer = tDocumentDeserializer; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper) -> new Builder() - .valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), + (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/IndexRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/IndexRequest.java index 423df0502..a881e134f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/IndexRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/IndexRequest.java @@ -563,8 +563,9 @@ public static JsonpDeserializer> createIndex JsonpDeserializer valueDeserializer = tDocumentDeserializer; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper) -> new Builder() - .document(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), + (parser, mapper, event) -> new Builder() + .document(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/BulkOperation.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/BulkOperation.java index 0d00677d0..d38566893 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/BulkOperation.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/bulk/BulkOperation.java @@ -54,9 +54,6 @@ public class BulkOperation implements TaggedUnion, NdJsonpSerializable, JsonpSerializable { - /** - * {@link BulkOperation} variant kinds. - */ /** * {@link BulkOperation} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/FieldSuggester.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/FieldSuggester.java index 595adc3ed..1f1c87b06 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/FieldSuggester.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/FieldSuggester.java @@ -23,6 +23,7 @@ package co.elastic.clients.elasticsearch.core.search; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -33,7 +34,7 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; @@ -52,11 +53,8 @@ * specification */ @JsonpDeserializable -public class FieldSuggester implements TaggedUnion, JsonpSerializable { +public class FieldSuggester implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link FieldSuggester} variant kinds. - */ /** * {@link FieldSuggester} variant kinds. * @@ -72,6 +70,9 @@ public enum Kind implements JsonEnum { Term("term"), + /** A custom {@code FieldSuggester} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -112,6 +113,7 @@ public FieldSuggester(FieldSuggesterVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._fieldSuggesterKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; this.prefix = null; this.regex = null; @@ -123,6 +125,7 @@ private FieldSuggester(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; this.prefix = builder.prefix; this.regex = builder.regex; @@ -209,6 +212,35 @@ public TermSuggester term() { return TaggedUnionUtils.get(this, Kind.Term); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code FieldSuggester} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override @SuppressWarnings("unchecked") public void serialize(JsonGenerator generator, JsonpMapper mapper) { @@ -231,7 +263,7 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) { } - generator.writeKey(_kind.jsonValue()); + generator.writeKey(_kind == Kind._Custom ? _customKind : _kind.jsonValue()); if (_value instanceof JsonpSerializable) { ((JsonpSerializable) _value).serialize(generator, mapper); } @@ -248,6 +280,7 @@ public String toString() { public static class Builder extends WithJsonObjectBuilderBase { private Kind _kind; private Object _value; + private String _customKind; @Nullable private String prefix; @@ -317,6 +350,22 @@ public ContainerBuilder term(Function { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + } public static final JsonpDeserializer _DESERIALIZER = ObjectBuilderDeserializer.lazy(Builder::new, diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/SmoothingModel.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/SmoothingModel.java index bd7a1e718..7204434de 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/SmoothingModel.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/SmoothingModel.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class SmoothingModel implements TaggedUnion, JsonpSerializable { - /** - * {@link SmoothingModel} variant kinds. - */ /** * {@link SmoothingModel} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/Suggestion.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/Suggestion.java index b643ef2c9..848ef92dc 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/Suggestion.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/core/search/Suggestion.java @@ -55,9 +55,6 @@ public class Suggestion implements TaggedUnion, JsonpSerializable { - /** - * {@link Suggestion} variant kinds. - */ /** * {@link Suggestion} variant kinds. * @@ -238,7 +235,7 @@ public static ExternallyTaggedUnion.TypedKeysDeserializer, SuggestionVariant>(deserializers, - (name, value) -> new Suggestion<>(value)).typedKeys(); + Suggestion::new).typedKeys(); }; } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/GetLifecycleResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/GetLifecycleResponse.java index 248b10e9e..e19b33a33 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/GetLifecycleResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/GetLifecycleResponse.java @@ -172,8 +172,8 @@ protected static JsonpDeserializer createGetLifecycleRespo JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(Lifecycle._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/explain_lifecycle/LifecycleExplain.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/explain_lifecycle/LifecycleExplain.java index 58743b233..44c296c83 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/explain_lifecycle/LifecycleExplain.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ilm/explain_lifecycle/LifecycleExplain.java @@ -55,9 +55,6 @@ public class LifecycleExplain TaggedUnion, JsonpSerializable { - /** - * {@link LifecycleExplain} variant kinds. - */ /** * {@link LifecycleExplain} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/DiskUsageResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/DiskUsageResponse.java index 4e1d1f75b..15e884ebb 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/DiskUsageResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/DiskUsageResponse.java @@ -131,8 +131,8 @@ protected static JsonpDeserializer createDiskUsageResponseDes JsonpDeserializer valueDeserializer = JsonData._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetAliasResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetAliasResponse.java index f56843245..e4516e3ff 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetAliasResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetAliasResponse.java @@ -170,8 +170,8 @@ protected static JsonpDeserializer createGetAliasResponseDeser JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(IndexAliases._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetFieldMappingResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetFieldMappingResponse.java index d7d7ad25b..e907fe5e4 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetFieldMappingResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetFieldMappingResponse.java @@ -174,8 +174,8 @@ protected static JsonpDeserializer createGetFieldMappin JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(TypeFieldMappings._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndexResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndexResponse.java index 580005a08..1e313eded 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndexResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndexResponse.java @@ -169,8 +169,8 @@ protected static JsonpDeserializer createGetIndexResponseDeser JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(IndexState._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndicesSettingsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndicesSettingsResponse.java index 523de2a87..ba5c5682f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndicesSettingsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetIndicesSettingsResponse.java @@ -171,8 +171,8 @@ protected static JsonpDeserializer createGetIndicesS JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(IndexState._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetMappingResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetMappingResponse.java index 9492bd5c7..997c89694 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetMappingResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetMappingResponse.java @@ -173,8 +173,8 @@ protected static JsonpDeserializer createGetMappingResponseD JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(IndexMappingRecord._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetTemplateResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetTemplateResponse.java index d9c3e93b2..71d677396 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetTemplateResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/GetTemplateResponse.java @@ -171,8 +171,8 @@ protected static JsonpDeserializer createGetTemplateRespons JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(TemplateMapping._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PromoteDataStreamResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PromoteDataStreamResponse.java index 431319dd4..fb0881df5 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PromoteDataStreamResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PromoteDataStreamResponse.java @@ -134,8 +134,8 @@ protected static JsonpDeserializer createPromoteDataS JsonpDeserializer valueDeserializer = JsonData._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PutIndicesSettingsRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PutIndicesSettingsRequest.java index 1d86d4072..ff453eb37 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PutIndicesSettingsRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/PutIndicesSettingsRequest.java @@ -418,8 +418,8 @@ protected static JsonpDeserializer createPutIndicesSe JsonpDeserializer valueDeserializer = IndexSettings._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().settings(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .settings(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/RecoveryResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/RecoveryResponse.java index f9fcfe630..305f0d82a 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/RecoveryResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/RecoveryResponse.java @@ -170,8 +170,8 @@ protected static JsonpDeserializer createRecoveryResponseDeser JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(RecoveryStatus._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/SimulateTemplateRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/SimulateTemplateRequest.java index 0f02dae4a..53e5fadd9 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/SimulateTemplateRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/SimulateTemplateRequest.java @@ -248,8 +248,8 @@ protected static JsonpDeserializer createSimulateTempla JsonpDeserializer valueDeserializer = IndexTemplate._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().template(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .template(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/modify_data_stream/Action.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/modify_data_stream/Action.java index b039230c7..fda3a8ce2 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/modify_data_stream/Action.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/modify_data_stream/Action.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class Action implements TaggedUnion, JsonpSerializable { - /** - * {@link Action} variant kinds. - */ /** * {@link Action} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/update_aliases/Action.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/update_aliases/Action.java index 5118558cd..8015055ac 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/update_aliases/Action.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/indices/update_aliases/Action.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class Action implements TaggedUnion, JsonpSerializable { - /** - * {@link Action} variant kinds. - */ /** * {@link Action} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/GetPipelineResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/GetPipelineResponse.java index 8ae768d84..e255f5137 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/GetPipelineResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/GetPipelineResponse.java @@ -171,8 +171,8 @@ protected static JsonpDeserializer createGetPipelineRespons JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(Pipeline._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/InferenceConfig.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/InferenceConfig.java index b1af56753..cc116528f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/InferenceConfig.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/InferenceConfig.java @@ -52,9 +52,6 @@ @JsonpDeserializable public class InferenceConfig implements TaggedUnion, JsonpSerializable { - /** - * {@link InferenceConfig} variant kinds. - */ /** * {@link InferenceConfig} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/Processor.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/Processor.java index 9fba12347..65409d353 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/Processor.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ingest/Processor.java @@ -24,6 +24,7 @@ package co.elastic.clients.elasticsearch.ingest; import co.elastic.clients.elasticsearch._types.Script; +import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonEnum; import co.elastic.clients.json.JsonpDeserializable; import co.elastic.clients.json.JsonpDeserializer; @@ -34,7 +35,7 @@ import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.util.ApiTypeHelper; import co.elastic.clients.util.ObjectBuilder; -import co.elastic.clients.util.TaggedUnion; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnionUtils; import co.elastic.clients.util.WithJsonObjectBuilderBase; import jakarta.json.stream.JsonGenerator; @@ -52,11 +53,8 @@ * specification */ @JsonpDeserializable -public class Processor implements TaggedUnion, JsonpSerializable { +public class Processor implements OpenTaggedUnion, JsonpSerializable { - /** - * {@link Processor} variant kinds. - */ /** * {@link Processor} variant kinds. * @@ -134,6 +132,9 @@ public enum Kind implements JsonEnum { Inference("inference"), + /** A custom {@code Processor} defined by a plugin */ + _Custom(null) + ; private final String jsonValue; @@ -165,6 +166,7 @@ public Processor(ProcessorVariant value) { this._kind = ApiTypeHelper.requireNonNull(value._processorKind(), this, ""); this._value = ApiTypeHelper.requireNonNull(value, this, ""); + this._customKind = null; } @@ -172,6 +174,7 @@ private Processor(Builder builder) { this._kind = ApiTypeHelper.requireNonNull(builder._kind, builder, ""); this._value = ApiTypeHelper.requireNonNull(builder._value, builder, ""); + this._customKind = builder._customKind; } @@ -759,13 +762,42 @@ public InferenceProcessor inference() { return TaggedUnionUtils.get(this, Kind.Inference); } + @Nullable + private final String _customKind; + + /** + * Is this a custom {@code Processor} defined by a plugin? + */ + public boolean _isCustom() { + return _kind == Kind._Custom; + } + + /** + * Get the actual kind when {@code _kind()} equals {@link Kind#_Custom} + * (plugin-defined variant). + */ + @Nullable + public final String _customKind() { + return _customKind; + } + + /** + * Get the custom plugin-defined variant value. + * + * @throws IllegalStateException + * if the current variant is not {@link Kind#_Custom}. + */ + public JsonData _custom() { + return TaggedUnionUtils.get(this, Kind._Custom); + } + @Override @SuppressWarnings("unchecked") public void serialize(JsonGenerator generator, JsonpMapper mapper) { generator.writeStartObject(); - generator.writeKey(_kind.jsonValue()); + generator.writeKey(_kind == Kind._Custom ? _customKind : _kind.jsonValue()); if (_value instanceof JsonpSerializable) { ((JsonpSerializable) _value).serialize(generator, mapper); } @@ -782,6 +814,7 @@ public String toString() { public static class Builder extends WithJsonObjectBuilderBase implements ObjectBuilder { private Kind _kind; private Object _value; + private String _customKind; @Override protected Builder self() { @@ -1140,6 +1173,22 @@ public ObjectBuilder inference( return this.inference(fn.apply(new InferenceProcessor.Builder()).build()); } + /** + * Define this {@code Processor} as a plugin-defined variant. + * + * @param name + * the plugin-defined identifier + * @param data + * the data for this custom {@code Processor}. It is converted + * internally to {@link JsonData}. + */ + public ObjectBuilder _custom(String name, Object data) { + this._kind = Kind._Custom; + this._customKind = name; + this._value = JsonData.of(data); + return this; + } + public Processor build() { _checkSingleUse(); return new Processor(this); @@ -1184,6 +1233,11 @@ protected static void setupProcessorDeserializer(ObjectDeserializer op) op.add(Builder::circle, CircleProcessor._DESERIALIZER, "circle"); op.add(Builder::inference, InferenceProcessor._DESERIALIZER, "inference"); + op.setUnknownFieldHandler((builder, name, parser, mapper) -> { + JsonpUtils.ensureCustomVariantsAllowed(parser, mapper); + builder._custom(name, JsonData._DESERIALIZER.deserialize(parser, mapper)); + }); + } public static final JsonpDeserializer _DESERIALIZER = ObjectBuilderDeserializer.lazy(Builder::new, diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/GetPipelineResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/GetPipelineResponse.java index 18795c394..03926c3e1 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/GetPipelineResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/GetPipelineResponse.java @@ -171,8 +171,8 @@ protected static JsonpDeserializer createGetPipelineRespons JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(Pipeline._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/PutPipelineRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/PutPipelineRequest.java index 356c5a07e..b0978a7ce 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/PutPipelineRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/logstash/PutPipelineRequest.java @@ -166,8 +166,8 @@ protected static JsonpDeserializer createPutPipelineRequestD JsonpDeserializer valueDeserializer = Pipeline._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().pipeline(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .pipeline(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysis.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysis.java index c7c4d814d..0f2da52c7 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysis.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysis.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class DataframeAnalysis implements TaggedUnion, JsonpSerializable { - /** - * {@link DataframeAnalysis} variant kinds. - */ /** * {@link DataframeAnalysis} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysisFeatureProcessor.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysisFeatureProcessor.java index 489fa7bc0..c6facea67 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysisFeatureProcessor.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalysisFeatureProcessor.java @@ -56,9 +56,6 @@ public class DataframeAnalysisFeatureProcessor TaggedUnion, JsonpSerializable { - /** - * {@link DataframeAnalysisFeatureProcessor} variant kinds. - */ /** * {@link DataframeAnalysisFeatureProcessor} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalyticsStats.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalyticsStats.java index b3b3de8ed..5d74d7054 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalyticsStats.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeAnalyticsStats.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class DataframeAnalyticsStats implements TaggedUnion, JsonpSerializable { - /** - * {@link DataframeAnalyticsStats} variant kinds. - */ /** * {@link DataframeAnalyticsStats} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeEvaluation.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeEvaluation.java index 944cd69d0..832bdf632 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeEvaluation.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/DataframeEvaluation.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class DataframeEvaluation implements TaggedUnion, JsonpSerializable { - /** - * {@link DataframeEvaluation} variant kinds. - */ /** * {@link DataframeEvaluation} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigCreate.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigCreate.java index caea5131b..01cde72e8 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigCreate.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigCreate.java @@ -54,9 +54,6 @@ @JsonpDeserializable public class InferenceConfigCreate implements TaggedUnion, JsonpSerializable { - /** - * {@link InferenceConfigCreate} variant kinds. - */ /** * {@link InferenceConfigCreate} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigUpdate.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigUpdate.java index 038ae0954..5304c1e62 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigUpdate.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/InferenceConfigUpdate.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class InferenceConfigUpdate implements TaggedUnion, JsonpSerializable { - /** - * {@link InferenceConfigUpdate} variant kinds. - */ /** * {@link InferenceConfigUpdate} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/PostDataRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/PostDataRequest.java index b5f89e805..a6caa4c52 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/PostDataRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/PostDataRequest.java @@ -271,8 +271,8 @@ public static JsonpDeserializer> createPostDataRe JsonpDeserializer> valueDeserializer = JsonpDeserializer.arrayDeserializer(tDataDeserializer); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().data(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .data(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/TokenizationConfig.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/TokenizationConfig.java index c729ff855..82e7ee30f 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/TokenizationConfig.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/TokenizationConfig.java @@ -54,9 +54,6 @@ @JsonpDeserializable public class TokenizationConfig implements TaggedUnion, JsonpSerializable { - /** - * {@link TokenizationConfig} variant kinds. - */ /** * {@link TokenizationConfig} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/ValidateDetectorRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/ValidateDetectorRequest.java index 6d2f10e1e..e92080815 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/ValidateDetectorRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/ValidateDetectorRequest.java @@ -139,8 +139,8 @@ protected static JsonpDeserializer createValidateDetect JsonpDeserializer valueDeserializer = Detector._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().detector(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .detector(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/put_trained_model/Preprocessor.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/put_trained_model/Preprocessor.java index 6b63789a6..ed04222ed 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/put_trained_model/Preprocessor.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ml/put_trained_model/Preprocessor.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class Preprocessor implements TaggedUnion, JsonpSerializable { - /** - * {@link Preprocessor} variant kinds. - */ /** * {@link Preprocessor} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupCapsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupCapsResponse.java index 92a0ec3a1..bf2d5d1f9 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupCapsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupCapsResponse.java @@ -173,8 +173,8 @@ protected static JsonpDeserializer createGetRollupCapsRes JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(RollupCapabilities._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupIndexCapsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupIndexCapsResponse.java index 772fdb478..2db99c5fd 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupIndexCapsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/GetRollupIndexCapsResponse.java @@ -174,8 +174,8 @@ protected static JsonpDeserializer createGetRollupIn JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(IndexCapabilities._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupRequest.java index c08b99ef8..4af691517 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupRequest.java @@ -180,8 +180,8 @@ protected static JsonpDeserializer createRollupRequestDeserialize JsonpDeserializer valueDeserializer = JsonData._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().config(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .config(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupResponse.java index 224a8d694..9a105d098 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/rollup/RollupResponse.java @@ -131,8 +131,8 @@ protected static JsonpDeserializer createRollupResponseDeseriali JsonpDeserializer valueDeserializer = JsonData._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/searchable_snapshots/ClearCacheResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/searchable_snapshots/ClearCacheResponse.java index dda63655a..dc536db00 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/searchable_snapshots/ClearCacheResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/searchable_snapshots/ClearCacheResponse.java @@ -134,8 +134,8 @@ protected static JsonpDeserializer createClearCacheResponseD JsonpDeserializer valueDeserializer = JsonData._DESERIALIZER; - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/DeletePrivilegesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/DeletePrivilegesResponse.java index 4524714af..4bf621dd5 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/DeletePrivilegesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/DeletePrivilegesResponse.java @@ -173,8 +173,8 @@ protected static JsonpDeserializer createDeletePrivile JsonpDeserializer>> valueDeserializer = JsonpDeserializer .stringMapDeserializer(JsonpDeserializer.stringMapDeserializer(FoundStatus._DESERIALIZER)); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/FieldRule.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/FieldRule.java index a53705b46..77f9bf205 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/FieldRule.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/FieldRule.java @@ -55,9 +55,6 @@ @JsonpDeserializable public class FieldRule implements TaggedUnion, RoleMappingRuleVariant, JsonpSerializable { - /** - * {@link FieldRule} variant kinds. - */ /** * {@link FieldRule} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetPrivilegesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetPrivilegesResponse.java index 9abe336ea..45e288b57 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetPrivilegesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetPrivilegesResponse.java @@ -173,8 +173,8 @@ protected static JsonpDeserializer createGetPrivilegesRes JsonpDeserializer>> valueDeserializer = JsonpDeserializer .stringMapDeserializer(JsonpDeserializer.stringMapDeserializer(Actions._DESERIALIZER)); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleMappingResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleMappingResponse.java index bf9175387..5e999c75a 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleMappingResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleMappingResponse.java @@ -172,8 +172,8 @@ protected static JsonpDeserializer createGetRoleMappingR JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(RoleMapping._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleResponse.java index dd7aaa6c0..b08a9fe0e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetRoleResponse.java @@ -170,8 +170,8 @@ protected static JsonpDeserializer createGetRoleResponseDeseria JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(Role._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetServiceAccountsResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetServiceAccountsResponse.java index 001569e18..b36c886c3 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetServiceAccountsResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetServiceAccountsResponse.java @@ -174,8 +174,8 @@ protected static JsonpDeserializer createGetServiceA JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(RoleDescriptorWrapper._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserProfileResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserProfileResponse.java index 439bb01d3..3ecd11698 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserProfileResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserProfileResponse.java @@ -173,8 +173,8 @@ protected static JsonpDeserializer createGetUserProfileR JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(UserProfileWithMetadata._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserResponse.java index c05a88ed5..8a008c2d7 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/GetUserResponse.java @@ -169,8 +169,8 @@ protected static JsonpDeserializer createGetUserResponseDeseria JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(User._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesRequest.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesRequest.java index 6a2a40323..e057149bb 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesRequest.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesRequest.java @@ -205,8 +205,8 @@ protected static JsonpDeserializer createPutPrivilegesRequ JsonpDeserializer>> valueDeserializer = JsonpDeserializer .stringMapDeserializer(JsonpDeserializer.stringMapDeserializer(Actions._DESERIALIZER)); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().privileges(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .privileges(valueDeserializer.deserialize(parser, mapper, event)).build()); } // --------------------------------------------------------------------------------------------- diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesResponse.java index 6b16f8909..0e7bb1b1e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/PutPrivilegesResponse.java @@ -172,8 +172,8 @@ protected static JsonpDeserializer createPutPrivilegesRes JsonpDeserializer>> valueDeserializer = JsonpDeserializer .stringMapDeserializer(JsonpDeserializer.stringMapDeserializer(CreatedStatus._DESERIALIZER)); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/RoleMappingRule.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/RoleMappingRule.java index 694748dad..3ad99f889 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/security/RoleMappingRule.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/security/RoleMappingRule.java @@ -57,9 +57,6 @@ public class RoleMappingRule RoleMappingRuleVariant, JsonpSerializable { - /** - * {@link RoleMappingRule} variant kinds. - */ /** * {@link RoleMappingRule} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/slm/GetLifecycleResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/slm/GetLifecycleResponse.java index 64c1de4f7..0302f1efd 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/slm/GetLifecycleResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/slm/GetLifecycleResponse.java @@ -172,8 +172,8 @@ protected static JsonpDeserializer createGetLifecycleRespo JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(SnapshotLifecycle._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/snapshot/GetRepositoryResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/snapshot/GetRepositoryResponse.java index ebaffd20a..d97bb5fc7 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/snapshot/GetRepositoryResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/snapshot/GetRepositoryResponse.java @@ -172,8 +172,8 @@ protected static JsonpDeserializer createGetRepositoryRes JsonpDeserializer> valueDeserializer = JsonpDeserializer .stringMapDeserializer(Repository._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().result(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .result(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/ssl/CertificatesResponse.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/ssl/CertificatesResponse.java index 03c272fef..e3fdae8ff 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/ssl/CertificatesResponse.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/ssl/CertificatesResponse.java @@ -163,8 +163,8 @@ protected static JsonpDeserializer createCertificatesRespo JsonpDeserializer> valueDeserializer = JsonpDeserializer .arrayDeserializer(CertificateInformation._DESERIALIZER); - return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), - (parser, mapper) -> new Builder().valueBody(valueDeserializer.deserialize(parser, mapper)).build()); + return JsonpDeserializer.of(valueDeserializer.acceptedEvents(), (parser, mapper, event) -> new Builder() + .valueBody(valueDeserializer.deserialize(parser, mapper, event)).build()); } } diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/PivotGroupBy.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/PivotGroupBy.java index 5aa275679..f0d5a1267 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/PivotGroupBy.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/PivotGroupBy.java @@ -57,9 +57,6 @@ @JsonpDeserializable public class PivotGroupBy implements TaggedUnion, JsonpSerializable { - /** - * {@link PivotGroupBy} variant kinds. - */ /** * {@link PivotGroupBy} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/RetentionPolicy.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/RetentionPolicy.java index bd9295816..91dbc8363 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/RetentionPolicy.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/RetentionPolicy.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class RetentionPolicy implements TaggedUnion, JsonpSerializable { - /** - * {@link RetentionPolicy} variant kinds. - */ /** * {@link RetentionPolicy} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/Sync.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/Sync.java index 1f5375204..43a41fcb2 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/Sync.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/transform/Sync.java @@ -52,9 +52,6 @@ @JsonpDeserializable public class Sync implements TaggedUnion, JsonpSerializable { - /** - * {@link Sync} variant kinds. - */ /** * {@link Sync} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Condition.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Condition.java index e0e61774e..735953d76 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Condition.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Condition.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class Condition implements TaggedUnion, JsonpSerializable { - /** - * {@link Condition} variant kinds. - */ /** * {@link Condition} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/EmailAttachment.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/EmailAttachment.java index 0043e84d7..2e14cf897 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/EmailAttachment.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/EmailAttachment.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class EmailAttachment implements TaggedUnion, JsonpSerializable { - /** - * {@link EmailAttachment} variant kinds. - */ /** * {@link EmailAttachment} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Input.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Input.java index 01101980c..460d90235 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Input.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Input.java @@ -55,9 +55,6 @@ @JsonpDeserializable public class Input implements TaggedUnion, JsonpSerializable { - /** - * {@link Input} variant kinds. - */ /** * {@link Input} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Schedule.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Schedule.java index fb906fdca..4e7852188 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Schedule.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Schedule.java @@ -56,9 +56,6 @@ @JsonpDeserializable public class Schedule implements TaggedUnion, TriggerVariant, JsonpSerializable { - /** - * {@link Schedule} variant kinds. - */ /** * {@link Schedule} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Trigger.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Trigger.java index c5e058031..49e2bd280 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Trigger.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/Trigger.java @@ -52,9 +52,6 @@ @JsonpDeserializable public class Trigger implements TaggedUnion, JsonpSerializable { - /** - * {@link Trigger} variant kinds. - */ /** * {@link Trigger} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/TriggerEvent.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/TriggerEvent.java index c16ba9da3..ce7a0554c 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/TriggerEvent.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/watcher/TriggerEvent.java @@ -53,9 +53,6 @@ @JsonpDeserializable public class TriggerEvent implements TaggedUnion, JsonpSerializable { - /** - * {@link TriggerEvent} variant kinds. - */ /** * {@link TriggerEvent} variant kinds. * diff --git a/java-client/src/main/java/co/elastic/clients/json/ExternallyTaggedUnion.java b/java-client/src/main/java/co/elastic/clients/json/ExternallyTaggedUnion.java index 5dde8e5e8..0d08127fc 100644 --- a/java-client/src/main/java/co/elastic/clients/json/ExternallyTaggedUnion.java +++ b/java-client/src/main/java/co/elastic/clients/json/ExternallyTaggedUnion.java @@ -19,16 +19,19 @@ package co.elastic.clients.json; +import co.elastic.clients.util.OpenTaggedUnion; import co.elastic.clients.util.TaggedUnion; import jakarta.json.stream.JsonGenerator; import jakarta.json.stream.JsonParser; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.EnumSet; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.BiFunction; +import java.util.function.Function; import static jakarta.json.stream.JsonParser.Event; @@ -40,19 +43,34 @@ * @see * Documentation of the typed_keys parameter. */ -public interface ExternallyTaggedUnion { +public class ExternallyTaggedUnion { + + private ExternallyTaggedUnion() {} /** * A deserializer for externally-tagged unions. Since the union variant discriminant is provided externally, this cannot be a * regular {@link JsonpDeserializer} as the caller has to provide the discriminant value. */ - class Deserializer, Member> { + public static class Deserializer, Member> { private final Map> deserializers; - private final BiFunction unionCtor; + private final Function unionCtor; + @Nullable + private final BiFunction unknownVariantCtor; + + public Deserializer(Map> deserializers, Function unionCtor) { + this.deserializers = deserializers; + this.unionCtor = unionCtor; + this.unknownVariantCtor = null; + } - public Deserializer(Map> deserializers, BiFunction unionCtor) { + public Deserializer( + Map> deserializers, + Function unionCtor, + BiFunction unknownVariantCtor + ) { this.deserializers = deserializers; this.unionCtor = unionCtor; + this.unknownVariantCtor = unknownVariantCtor; } /** @@ -61,10 +79,14 @@ public Deserializer(Map> deserialize public Union deserialize(String type, JsonParser parser, JsonpMapper mapper, Event event) { JsonpDeserializer deserializer = deserializers.get(type); if (deserializer == null) { - throw new JsonpMappingException("Unknown variant type '" + type + "'", parser.getLocation()); + if (unknownVariantCtor == null) { + throw new JsonpMappingException("Unknown variant type '" + type + "'", parser.getLocation()); + } else { + return unknownVariantCtor.apply(type, JsonData._DESERIALIZER.deserialize(parser, mapper, event)); + } } - return unionCtor.apply(type, deserializer.deserialize(parser, mapper, event)); + return unionCtor.apply(deserializer.deserialize(parser, mapper, event)); } /** @@ -76,7 +98,7 @@ public TypedKeysDeserializer typedKeys() { } } - class TypedKeysDeserializer> extends JsonpDeserializerBase> { + public static class TypedKeysDeserializer> extends JsonpDeserializerBase> { Deserializer deserializer; protected TypedKeysDeserializer(Deserializer deser) { super(EnumSet.of(Event.START_OBJECT)); @@ -109,7 +131,7 @@ public void deserializeEntry(String key, JsonParser parser, JsonpMapper mapper, } } - static > JsonpDeserializer>> arrayMapDeserializer( + public static > JsonpDeserializer>> arrayMapDeserializer( TypedKeysDeserializer deserializer ) { return JsonpDeserializer.of( @@ -158,7 +180,7 @@ public void deserializeEntry(String key, JsonParser parser, JsonpMapper mapper, * If {@link JsonpMapperFeatures#SERIALIZE_TYPED_KEYS} is true (the default), the typed keys encoding * (type#name) is used. */ - static > void serializeTypedKeys( + public static > void serializeTypedKeys( Map map, JsonGenerator generator, JsonpMapper mapper ) { generator.writeStartObject(); @@ -172,7 +194,7 @@ public void deserializeEntry(String key, JsonParser parser, JsonpMapper mapper, * If {@link JsonpMapperFeatures#SERIALIZE_TYPED_KEYS} is true (the default), the typed keys encoding * (type#name) is used. */ - static > void serializeTypedKeysArray( + public static > void serializeTypedKeysArray( Map> map, JsonGenerator generator, JsonpMapper mapper ) { generator.writeStartObject(); @@ -184,7 +206,7 @@ public void deserializeEntry(String key, JsonParser parser, JsonpMapper mapper, continue; // We can't know the kind, skip this entry } - generator.writeKey(list.get(0)._kind().jsonValue() + "#" + entry.getKey()); + generator.writeKey(getKind(list.get(0)) + "#" + entry.getKey()); generator.writeStartArray(); for (T value: list) { value.serialize(generator, mapper); @@ -211,13 +233,13 @@ public void deserializeEntry(String key, JsonParser parser, JsonpMapper mapper, * If {@link JsonpMapperFeatures#SERIALIZE_TYPED_KEYS} is true (the default), the typed keys encoding * (type#name) is used. */ - static > void serializeTypedKeysInner( + public static > void serializeTypedKeysInner( Map map, JsonGenerator generator, JsonpMapper mapper ) { if (mapper.attribute(JsonpMapperFeatures.SERIALIZE_TYPED_KEYS, true)) { for (Map.Entry entry: map.entrySet()) { T value = entry.getValue(); - generator.writeKey(value._kind().jsonValue() + "#" + entry.getKey()); + generator.writeKey(getKind(value) + "#" + entry.getKey()); value.serialize(generator, mapper); } } else { @@ -227,4 +249,18 @@ public void deserializeEntry(String key, JsonParser parser, JsonpMapper mapper, } } } + + private static > String getKind(T value) { + String kind; + if (value instanceof OpenTaggedUnion) { + // Use custom kind if defined, and fall back to regular kind + kind = ((OpenTaggedUnion)value)._customKind(); + if (kind == null) { + kind = value._kind().jsonValue(); + } + } else { + kind = value._kind().jsonValue(); + } + return kind; + } } diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonData.java b/java-client/src/main/java/co/elastic/clients/json/JsonData.java index 7c9319fe0..9ff1950ff 100644 --- a/java-client/src/main/java/co/elastic/clients/json/JsonData.java +++ b/java-client/src/main/java/co/elastic/clients/json/JsonData.java @@ -20,8 +20,12 @@ package co.elastic.clients.json; import jakarta.json.JsonValue; +import jakarta.json.spi.JsonProvider; import jakarta.json.stream.JsonParser; +import java.io.InputStream; +import java.io.Reader; +import java.io.StringReader; import java.util.EnumSet; /** @@ -76,7 +80,11 @@ public interface JsonData extends JsonpSerializable { * Creates a raw JSON value from an existing object. A mapper will be needed to convert the result. */ static JsonData of(T value) { - return new JsonDataImpl(value, null); + if (value instanceof JsonData) { + return (JsonData) value; + } else { + return new JsonDataImpl(value, null); + } } /** @@ -86,6 +94,38 @@ static JsonData of(T value, JsonpMapper mapper) { return new JsonDataImpl(value, mapper); } + /** + * Creates a raw JSON value from a reader. + *

+ * Note: this method is not called {@code from} like {@link #from(Reader)} or {@link #from(InputStream)} to avoid + * ambiguities with {@link #of(Object)} that will create a JSON string value instead of parsing the JSON text. + */ + static JsonData fromJson(String json) { + return from(new StringReader(json)); + } + + /** + * Creates a raw JSON value from a reader. + */ + static JsonData from(Reader json) { + JsonProvider provider = JsonpUtils.provider(); + try(JsonParser parser = provider.createParser(json)) { + parser.next(); + return new JsonDataImpl(parser.getValue(), null); + } + } + + /** + * Creates a raw JSON value from an input stream. + */ + static JsonData from(InputStream json) { + JsonProvider provider = JsonpUtils.provider(); + try(JsonParser parser = provider.createParser(json)) { + parser.next(); + return new JsonDataImpl(parser.getValue(), null); + } + } + /** * Creates a raw JSON value from a parser. The provider mapper will be used for conversions unless one is * explicitly provided using {@link #to(Class, JsonpMapper)}, {@link #toJson(JsonpMapper)} or @@ -96,7 +136,16 @@ static JsonData from(JsonParser parser, JsonpMapper mapper) { return of(parser.getValue(), mapper); } + /** + * Creates a raw JSON value from a parser. The provider mapper will be used for conversions unless one is + * explicitly provided using {@link #to(Class, JsonpMapper)}, {@link #toJson(JsonpMapper)} or + * {@link #deserialize(JsonpDeserializer)}. + */ + static JsonData from(JsonParser parser, JsonpMapper mapper, JsonParser.Event event) { + return of(parser.getValue(), mapper); + } + JsonpDeserializer _DESERIALIZER = JsonpDeserializer.of( - EnumSet.allOf(JsonParser.Event.class), JsonData::from + EnumSet.allOf(JsonParser.Event.class), ((parser, mapper, event) -> JsonData.from(parser, mapper, event)) ); } diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonEnum.java b/java-client/src/main/java/co/elastic/clients/json/JsonEnum.java index d16c97eb1..116c85354 100644 --- a/java-client/src/main/java/co/elastic/clients/json/JsonEnum.java +++ b/java-client/src/main/java/co/elastic/clients/json/JsonEnum.java @@ -65,7 +65,10 @@ protected Deserializer(T[] values, EnumSet acceptedEvents) { // 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); + String jsonValue = member.jsonValue(); + if (jsonValue != null) { // _Custom enum members have a null jsonValue + this.lookupTable.put(jsonValue, member); + } String[] aliases = member.aliases(); if (aliases != null) { for (String alias: aliases) { diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonpMapperFeatures.java b/java-client/src/main/java/co/elastic/clients/json/JsonpMapperFeatures.java index fad745c9d..e21aab442 100644 --- a/java-client/src/main/java/co/elastic/clients/json/JsonpMapperFeatures.java +++ b/java-client/src/main/java/co/elastic/clients/json/JsonpMapperFeatures.java @@ -24,6 +24,15 @@ */ public class JsonpMapperFeatures { + /** + * + */ public static final String SERIALIZE_TYPED_KEYS = JsonpMapperFeatures.class.getName() + ":SERIALIZE_TYPED_KEYS"; + /** + * Disables custom variants in union types (false by default). Used in tests to avoid interpreting wrong variant kinds as a custom + * extension. + */ + public static final String FORBID_CUSTOM_VARIANTS = JsonpMapperFeatures.class.getName() + ":FORBID_CUSTOM_VARIANTS"; + } diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java b/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java index be674555c..315de7d77 100644 --- a/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java +++ b/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java @@ -105,6 +105,12 @@ public static void ensureAccepts(JsonpDeserializer deserializer, JsonParser p } } + public static void ensureCustomVariantsAllowed(JsonParser parser, JsonpMapper mapper) { + if (mapper.attribute(JsonpMapperFeatures.FORBID_CUSTOM_VARIANTS, false)) { + throw new JsonpMappingException("Json mapper configuration forbids custom variants", parser.getLocation()); + } + } + /** * Skip the value at the next position of the parser. */ diff --git a/java-client/src/main/java/co/elastic/clients/json/ObjectDeserializer.java b/java-client/src/main/java/co/elastic/clients/json/ObjectDeserializer.java index 2a35c32de..5ed1d1a00 100644 --- a/java-client/src/main/java/co/elastic/clients/json/ObjectDeserializer.java +++ b/java-client/src/main/java/co/elastic/clients/json/ObjectDeserializer.java @@ -192,7 +192,7 @@ public ObjectType deserialize(ObjectType value, JsonParser parser, JsonpMapper m FieldDeserializer fieldDeserializer = fieldDeserializers.get(variant); if (fieldDeserializer == null) { - parseUnknownField(parser, mapper, variant, value); + parseUnknownField(innerParser, mapper, variant, value); } else { fieldDeserializer.deserialize(innerParser, mapper, variant, value); } diff --git a/java-client/src/main/java/co/elastic/clients/util/OpenTaggedUnion.java b/java-client/src/main/java/co/elastic/clients/util/OpenTaggedUnion.java new file mode 100644 index 000000000..34a11e678 --- /dev/null +++ b/java-client/src/main/java/co/elastic/clients/util/OpenTaggedUnion.java @@ -0,0 +1,36 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package co.elastic.clients.util; + +import javax.annotation.Nullable; + +/** + * A union that is open, i.e. non-exhaustive, where new variants can be defined on the server using extension plugins. + * + * @see TaggedUnion + */ +public interface OpenTaggedUnion, BaseType> extends TaggedUnion { + + /** + * Get the actual kind when {@code _kind()} equals {@code _Custom} (plugin-defined variant). + */ + @Nullable + String _customKind(); +} diff --git a/java-client/src/main/java/co/elastic/clients/util/TaggedUnion.java b/java-client/src/main/java/co/elastic/clients/util/TaggedUnion.java index 062adead5..226c1f1bd 100644 --- a/java-client/src/main/java/co/elastic/clients/util/TaggedUnion.java +++ b/java-client/src/main/java/co/elastic/clients/util/TaggedUnion.java @@ -19,6 +19,16 @@ package co.elastic.clients.util; +/** + * Base interface for tagged union types (also known as sum types or variants). + *

+ * It provides access to the current variant kind and its value. + * + * @param the tag type that defines the possible variants (an enum). + * @param the closest common ancestor type to all variant values. + * + * @see Tagged Union on Wikipedia + */ public interface TaggedUnion, BaseType> { /** diff --git a/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpDeserializerTest.java b/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpDeserializerTest.java new file mode 100644 index 000000000..f592b710e --- /dev/null +++ b/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpDeserializerTest.java @@ -0,0 +1,43 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package co.elastic.clients.elasticsearch.json; + +import co.elastic.clients.elasticsearch.model.ModelTestCase; +import co.elastic.clients.json.JsonpDeserializer; +import jakarta.json.stream.JsonParser; +import org.junit.jupiter.api.Test; + +import java.io.StringReader; +import java.util.List; + +public class JsonpDeserializerTest extends ModelTestCase { + + @Test + public void testNullStringInArray() { + JsonpDeserializer> deser = JsonpDeserializer.arrayDeserializer(JsonpDeserializer.stringDeserializer()); + + JsonParser parser = mapper.jsonProvider().createParser(new StringReader("[\"a\", null, \"b\"]")); + List list = deser.deserialize(parser, mapper); + + assertEquals("a", list.get(0)); + assertNull(list.get(1)); + assertEquals("b", list.get(2)); + } +} diff --git a/java-client/src/test/java/co/elastic/clients/elasticsearch/model/UnionTests.java b/java-client/src/test/java/co/elastic/clients/elasticsearch/model/UnionTests.java index 185cf7067..004338899 100644 --- a/java-client/src/test/java/co/elastic/clients/elasticsearch/model/UnionTests.java +++ b/java-client/src/test/java/co/elastic/clients/elasticsearch/model/UnionTests.java @@ -20,10 +20,19 @@ package co.elastic.clients.elasticsearch.model; import co.elastic.clients.elasticsearch._types.Script; +import co.elastic.clients.elasticsearch._types.aggregations.Aggregate; +import co.elastic.clients.elasticsearch._types.mapping.Property; +import co.elastic.clients.elasticsearch._types.query_dsl.Query; import co.elastic.clients.elasticsearch._types.query_dsl.SimpleQueryStringFlag; import co.elastic.clients.elasticsearch._types.query_dsl.SimpleQueryStringFlags; +import co.elastic.clients.elasticsearch.core.SearchResponse; +import jakarta.json.Json; +import jakarta.json.JsonObject; +import jakarta.json.stream.JsonParser; import org.junit.jupiter.api.Test; +import java.io.StringReader; + public class UnionTests extends ModelTestCase { @Test @@ -67,6 +76,72 @@ public void testSimpleQueryStringFlag() { f = fromJson("\"OR|AND\"", SimpleQueryStringFlags.class); assertEquals("OR|AND", f.multiple()); + } + + @Test + public void testOpenContainer() { + String json = "{\"foo\":{\"bar\":42}}"; + + JsonParser parser = Json.createParser(new StringReader("{ \"bar\": 42 }")); + parser.next(); + JsonObject value = parser.getObject(); + + Query obj = Query.of(b -> b._custom("foo", value)); + assertEquals(json, toJson(obj)); + + obj = checkJsonRoundtrip(obj, json); + + assertEquals(Query.Kind._Custom, obj._kind()); + assertEquals("foo", obj._customKind()); + assertEquals(42, obj._custom().toJson().asJsonObject().getInt("bar")); + } + + @Test + public void testOpenInternalUnion() { + String json = "{\"type\":\"foo\",\"bar\":42}"; + + JsonParser parser = Json.createParser(new StringReader(json)); + parser.next(); + JsonObject value = parser.getObject(); + + Property obj = Property.of(b -> b._custom("foo", value)); + assertEquals(json, toJson(obj)); + + obj = checkJsonRoundtrip(obj, json); + + assertEquals(Property.Kind._Custom, obj._kind()); + assertEquals("foo", obj._customKind()); + assertEquals(42, obj._custom().toJson().asJsonObject().getInt("bar")); + } + + @Test + public void testOpenTypedKeysUnion() { + String requiredFields = + "{\"took\":1,\"timed_out\":false,\"_shards\":{\"failed\":0.0,\"successful\":1.0,\"total\":1.0}," + + "\"hits\":{\"total\":{\"relation\":\"eq\",\"value\":0},\"hits\":[]}}"; + + String customAgg = "{\"bar\":42}"; + + JsonParser parser = Json.createParser(new StringReader(customAgg)); + parser.next(); + JsonObject value = parser.getObject(); + + SearchResponse obj = SearchResponse.of(b -> b + .withJson(new StringReader(requiredFields)) + .aggregations("custom-agg", a -> a._custom("foo", value)) + ); + + String json = toJson(obj); + System.out.println(json); + assertTrue(json.contains("\"aggregations\":{\"foo#custom-agg\":{\"bar\":42}}")); + + @SuppressWarnings("unchecked") + SearchResponse obj2 = fromJson(json, SearchResponse.class); + + Aggregate aggregate = obj2.aggregations().get("custom-agg"); + assertEquals(Aggregate.Kind._Custom, aggregate._kind()); + assertEquals("foo", aggregate._customKind()); + assertEquals(42, aggregate._custom().toJson().asJsonObject().getInt("bar")); }