Skip to content

Commit b2792d3

Browse files
algolia-botFluf22
andcommitted
fix(generators): auto-infer discriminator fields from unique required properties (generated)
algolia/api-clients-automation#6199 Co-authored-by: algolia-bot <accounts+algolia-api-client-bot@algolia.com> Co-authored-by: Thomas Raffray <Fluf22@users.noreply.github.com>
1 parent 0ac8046 commit b2792d3

File tree

9 files changed

+52
-52
lines changed

9 files changed

+52
-52
lines changed

algoliasearch/src/main/java/com/algolia/model/composition/BatchCompositionAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Deserializer extends JsonDeserializer<BatchCompositionAction> {
2222
public BatchCompositionAction deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
2424
// deserialize Composition
25-
if (tree.isObject()) {
25+
if (tree.isObject() && tree.has("behavior") && tree.has("name")) {
2626
try (JsonParser parser = tree.traverse(jp.getCodec())) {
2727
return parser.readValueAs(Composition.class);
2828
} catch (Exception e) {

algoliasearch/src/main/java/com/algolia/model/composition/CompositionBehavior.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Deserializer extends JsonDeserializer<CompositionBehavior> {
2222
public CompositionBehavior deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
2424
// deserialize CompositionInjectionBehavior
25-
if (tree.isObject()) {
25+
if (tree.isObject() && tree.has("injection")) {
2626
try (JsonParser parser = tree.traverse(jp.getCodec())) {
2727
return parser.readValueAs(CompositionInjectionBehavior.class);
2828
} catch (Exception e) {
@@ -33,7 +33,7 @@ public CompositionBehavior deserialize(JsonParser jp, DeserializationContext ctx
3333
}
3434
}
3535
// deserialize CompositionMultifeedBehavior
36-
if (tree.isObject()) {
36+
if (tree.isObject() && tree.has("multifeed")) {
3737
try (JsonParser parser = tree.traverse(jp.getCodec())) {
3838
return parser.readValueAs(CompositionMultifeedBehavior.class);
3939
} catch (Exception e) {

algoliasearch/src/main/java/com/algolia/model/composition/RulesBatchCompositionAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Deserializer extends JsonDeserializer<RulesBatchCompositionAction> {
2222
public RulesBatchCompositionAction deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
2424
// deserialize CompositionRule
25-
if (tree.isObject()) {
25+
if (tree.isObject() && tree.has("consequence")) {
2626
try (JsonParser parser = tree.traverse(jp.getCodec())) {
2727
return parser.readValueAs(CompositionRule.class);
2828
} catch (Exception e) {

algoliasearch/src/main/java/com/algolia/model/ingestion/TaskInput.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ class Deserializer extends JsonDeserializer<TaskInput> {
2121
@Override
2222
public TaskInput deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
24+
// deserialize ShopifyInput
25+
if (tree.isObject() && tree.has("market") && tree.has("metafields")) {
26+
try (JsonParser parser = tree.traverse(jp.getCodec())) {
27+
return parser.readValueAs(ShopifyInput.class);
28+
} catch (Exception e) {
29+
// deserialization failed, continue
30+
LOGGER.finest("Failed to deserialize oneOf ShopifyInput (error: " + e.getMessage() + ") (type: ShopifyInput)");
31+
}
32+
}
2433
// deserialize StreamingInput
2534
if (tree.isObject() && tree.has("mapping")) {
2635
try (JsonParser parser = tree.traverse(jp.getCodec())) {
@@ -39,15 +48,6 @@ public TaskInput deserialize(JsonParser jp, DeserializationContext ctxt) throws
3948
LOGGER.finest("Failed to deserialize oneOf DockerStreamsInput (error: " + e.getMessage() + ") (type: DockerStreamsInput)");
4049
}
4150
}
42-
// deserialize ShopifyInput
43-
if (tree.isObject()) {
44-
try (JsonParser parser = tree.traverse(jp.getCodec())) {
45-
return parser.readValueAs(ShopifyInput.class);
46-
} catch (Exception e) {
47-
// deserialization failed, continue
48-
LOGGER.finest("Failed to deserialize oneOf ShopifyInput (error: " + e.getMessage() + ") (type: ShopifyInput)");
49-
}
50-
}
5151
throw new AlgoliaRuntimeException(String.format("Failed to deserialize json element: %s", tree));
5252
}
5353

algoliasearch/src/main/java/com/algolia/model/ingestion/TransformationInput.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Deserializer extends JsonDeserializer<TransformationInput> {
2222
public TransformationInput deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
2424
// deserialize TransformationCode
25-
if (tree.isObject()) {
25+
if (tree.isObject() && tree.has("code")) {
2626
try (JsonParser parser = tree.traverse(jp.getCodec())) {
2727
return parser.readValueAs(TransformationCode.class);
2828
} catch (Exception e) {
@@ -31,7 +31,7 @@ public TransformationInput deserialize(JsonParser jp, DeserializationContext ctx
3131
}
3232
}
3333
// deserialize TransformationNoCode
34-
if (tree.isObject()) {
34+
if (tree.isObject() && tree.has("steps")) {
3535
try (JsonParser parser = tree.traverse(jp.getCodec())) {
3636
return parser.readValueAs(TransformationNoCode.class);
3737
} catch (Exception e) {

algoliasearch/src/main/java/com/algolia/model/ingestion/Trigger.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@ class Deserializer extends JsonDeserializer<Trigger> {
2121
@Override
2222
public Trigger deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
24-
// deserialize OnDemandTrigger
25-
if (tree.isObject()) {
24+
// deserialize ScheduleTrigger
25+
if (tree.isObject() && tree.has("cron") && tree.has("nextRun")) {
2626
try (JsonParser parser = tree.traverse(jp.getCodec())) {
27-
return parser.readValueAs(OnDemandTrigger.class);
27+
return parser.readValueAs(ScheduleTrigger.class);
2828
} catch (Exception e) {
2929
// deserialization failed, continue
30-
LOGGER.finest("Failed to deserialize oneOf OnDemandTrigger (error: " + e.getMessage() + ") (type: OnDemandTrigger)");
30+
LOGGER.finest("Failed to deserialize oneOf ScheduleTrigger (error: " + e.getMessage() + ") (type: ScheduleTrigger)");
3131
}
3232
}
33-
// deserialize ScheduleTrigger
33+
// deserialize OnDemandTrigger
3434
if (tree.isObject()) {
3535
try (JsonParser parser = tree.traverse(jp.getCodec())) {
36-
return parser.readValueAs(ScheduleTrigger.class);
36+
return parser.readValueAs(OnDemandTrigger.class);
3737
} catch (Exception e) {
3838
// deserialization failed, continue
39-
LOGGER.finest("Failed to deserialize oneOf ScheduleTrigger (error: " + e.getMessage() + ") (type: ScheduleTrigger)");
39+
LOGGER.finest("Failed to deserialize oneOf OnDemandTrigger (error: " + e.getMessage() + ") (type: OnDemandTrigger)");
4040
}
4141
}
4242
// deserialize SubscriptionTrigger

algoliasearch/src/main/java/com/algolia/model/recommend/RecommendationsRequest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ class Deserializer extends JsonDeserializer<RecommendationsRequest> {
2121
@Override
2222
public RecommendationsRequest deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
2323
JsonNode tree = jp.readValueAsTree();
24+
// deserialize TrendingFacetsQuery
25+
if (tree.isObject() && tree.has("facetName")) {
26+
try (JsonParser parser = tree.traverse(jp.getCodec())) {
27+
return parser.readValueAs(TrendingFacetsQuery.class);
28+
} catch (Exception e) {
29+
// deserialization failed, continue
30+
LOGGER.finest("Failed to deserialize oneOf TrendingFacetsQuery (error: " + e.getMessage() + ") (type: TrendingFacetsQuery)");
31+
}
32+
}
2433
// deserialize BoughtTogetherQuery
2534
if (tree.isObject()) {
2635
try (JsonParser parser = tree.traverse(jp.getCodec())) {
@@ -48,15 +57,6 @@ public RecommendationsRequest deserialize(JsonParser jp, DeserializationContext
4857
LOGGER.finest("Failed to deserialize oneOf TrendingItemsQuery (error: " + e.getMessage() + ") (type: TrendingItemsQuery)");
4958
}
5059
}
51-
// deserialize TrendingFacetsQuery
52-
if (tree.isObject()) {
53-
try (JsonParser parser = tree.traverse(jp.getCodec())) {
54-
return parser.readValueAs(TrendingFacetsQuery.class);
55-
} catch (Exception e) {
56-
// deserialization failed, continue
57-
LOGGER.finest("Failed to deserialize oneOf TrendingFacetsQuery (error: " + e.getMessage() + ") (type: TrendingFacetsQuery)");
58-
}
59-
}
6060
// deserialize LookingSimilarQuery
6161
if (tree.isObject()) {
6262
try (JsonParser parser = tree.traverse(jp.getCodec())) {

algoliasearch/src/main/java/com/algolia/model/search/AttributeToUpdate.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,23 @@ class Deserializer extends JsonDeserializer<AttributeToUpdate> {
5454
@Override
5555
public AttributeToUpdate deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
5656
JsonNode tree = jp.readValueAsTree();
57-
// deserialize String
58-
if (tree.isTextual()) {
57+
// deserialize BuiltInOperation
58+
if (tree.isObject() && tree.has("_operation") && tree.has("value")) {
5959
try (JsonParser parser = tree.traverse(jp.getCodec())) {
60-
String value = parser.readValueAs(String.class);
61-
return new AttributeToUpdate.StringWrapper(value);
60+
return parser.readValueAs(BuiltInOperation.class);
6261
} catch (Exception e) {
6362
// deserialization failed, continue
64-
LOGGER.finest("Failed to deserialize oneOf String (error: " + e.getMessage() + ") (type: String)");
63+
LOGGER.finest("Failed to deserialize oneOf BuiltInOperation (error: " + e.getMessage() + ") (type: BuiltInOperation)");
6564
}
6665
}
67-
// deserialize BuiltInOperation
68-
if (tree.isObject()) {
66+
// deserialize String
67+
if (tree.isTextual()) {
6968
try (JsonParser parser = tree.traverse(jp.getCodec())) {
70-
return parser.readValueAs(BuiltInOperation.class);
69+
String value = parser.readValueAs(String.class);
70+
return new AttributeToUpdate.StringWrapper(value);
7171
} catch (Exception e) {
7272
// deserialization failed, continue
73-
LOGGER.finest("Failed to deserialize oneOf BuiltInOperation (error: " + e.getMessage() + ") (type: BuiltInOperation)");
73+
LOGGER.finest("Failed to deserialize oneOf String (error: " + e.getMessage() + ") (type: String)");
7474
}
7575
}
7676
throw new AlgoliaRuntimeException(String.format("Failed to deserialize json element: %s", tree));

algoliasearch/src/main/java/com/algolia/model/search/SearchResult.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,8 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanPro
3737
@Override
3838
public SearchResult<T> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
3939
JsonNode tree = jp.readValueAsTree();
40-
// deserialize SearchForFacetValuesResponse
41-
if (tree.isObject() && tree.has("facetHits")) {
42-
try (JsonParser parser = tree.traverse(jp.getCodec())) {
43-
return parser.readValueAs(SearchForFacetValuesResponse.class);
44-
} catch (Exception e) {
45-
// deserialization failed, continue
46-
LOGGER.finest(
47-
"Failed to deserialize oneOf SearchForFacetValuesResponse (error: " + e.getMessage() + ") (type: SearchForFacetValuesResponse)"
48-
);
49-
}
50-
}
5140
// deserialize SearchResponse
52-
if (tree.isObject()) {
41+
if (tree.isObject() && tree.has("hits")) {
5342
try (JsonParser parser = tree.traverse(jp.getCodec())) {
5443
// For generic types, the innerType is erased by Java, we need to use the contextual type.
5544
JavaType innerType = ctxt.getTypeFactory().constructParametricType(SearchResponse.class, returnType);
@@ -62,6 +51,17 @@ public SearchResult<T> deserialize(JsonParser jp, DeserializationContext ctxt) t
6251
LOGGER.finest("Failed to deserialize oneOf SearchResponse (error: " + e.getMessage() + ") (type: SearchResponse)");
6352
}
6453
}
54+
// deserialize SearchForFacetValuesResponse
55+
if (tree.isObject() && tree.has("facetHits")) {
56+
try (JsonParser parser = tree.traverse(jp.getCodec())) {
57+
return parser.readValueAs(SearchForFacetValuesResponse.class);
58+
} catch (Exception e) {
59+
// deserialization failed, continue
60+
LOGGER.finest(
61+
"Failed to deserialize oneOf SearchForFacetValuesResponse (error: " + e.getMessage() + ") (type: SearchForFacetValuesResponse)"
62+
);
63+
}
64+
}
6565
throw new AlgoliaRuntimeException(String.format("Failed to deserialize json element: %s", tree));
6666
}
6767

0 commit comments

Comments
 (0)