Skip to content

Commit ca6b9ec

Browse files
committed
fix very specific nested allOf discriminator inside oneOf
1 parent 935f9bb commit ca6b9ec

File tree

3 files changed

+263
-12
lines changed

3 files changed

+263
-12
lines changed

generators/src/main/java/com/algolia/codegen/utils/OneOf.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ private OneOf() {
1212
}
1313

1414
public static void updateModelsOneOf(Map<String, ModelsMap> models, String modelPackage) {
15+
// first, propagate the discriminator of allOf to the parent
16+
for (ModelsMap modelContainer : models.values()) {
17+
var model = modelContainer.getModels().get(0).getModel();
18+
if (model.getComposedSchemas() != null && model.getComposedSchemas().getAllOf() != null) {
19+
for (CodegenProperty prop : model.getComposedSchemas().getAllOf()) {
20+
if (prop.vendorExtensions.containsKey("x-discriminator-fields")) {
21+
model.vendorExtensions.put("x-discriminator-fields", prop.vendorExtensions.get("x-discriminator-fields"));
22+
}
23+
}
24+
}
25+
}
26+
1527
for (ModelsMap modelContainer : models.values()) {
1628
// modelContainers always have 1 and only 1 model in our specs
1729
var model = modelContainer.getModels().get(0).getModel();
@@ -86,8 +98,13 @@ public static void markCompounds(Map<String, ModelsMap> models, String oneOf, Ma
8698
//noinspection unchecked
8799
var values = (List<String>) compoundModel.vendorExtensions.get("x-discriminator-fields");
88100
if (values != null) {
89-
List<Map<String, String>> newValues = values.stream().map(value -> Collections.singletonMap("field", value)).toList();
90-
oneOfModel.put("discriminators", newValues);
101+
oneOfModel.put("x-discriminator-fields", values);
102+
// find the matching composed schema and assign the discriminator
103+
for (var m : model.getComposedSchemas().getOneOf()) {
104+
if (m.openApiType.equals(compoundModel.name)) {
105+
m.vendorExtensions.put("x-discriminator-fields", values);
106+
}
107+
}
91108
}
92109
}
93110

0 commit comments

Comments
 (0)