Skip to content

Commit dba432f

Browse files
committed
feat: Preserve OpenAPI extensions on every Schema record
Add Map<String, Object> extensions as the final component to all 16 concrete Schema records and as an abstract method on the sealed Schema interface. SchemaParser.extractExtensions() threads x-* keys from the raw map through every concrete constructor; synthesized schemas with no source map receive Map.of(). DefaultValidator's record-deconstruct patterns gain the extra var _ binding. All existing test call sites updated with Map.of() as the new last argument. Three new tests in ExtensionsTest verify ObjectSchema, StringSchema, and OneOfSchema extension exposure.
1 parent 7e2749c commit dba432f

31 files changed

Lines changed: 294 additions & 126 deletions

src/main/java/com/retailsvc/http/spec/schema/AllOfSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.retailsvc.http.spec.schema;
22

33
import java.util.List;
4+
import java.util.Map;
45
import java.util.Set;
56

6-
public record AllOfSchema(List<Schema> parts) implements Schema {
7+
public record AllOfSchema(List<Schema> parts, Map<String, Object> extensions) implements Schema {
78
@Override
89
public Set<TypeName> types() {
910
return Set.of();

src/main/java/com/retailsvc/http/spec/schema/AlwaysSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

5-
public record AlwaysSchema() implements Schema {
6+
public record AlwaysSchema(Map<String, Object> extensions) implements Schema {
67
@Override
78
public Set<TypeName> types() {
89
return Set.of();

src/main/java/com/retailsvc/http/spec/schema/AnyOfSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.retailsvc.http.spec.schema;
22

33
import java.util.List;
4+
import java.util.Map;
45
import java.util.Set;
56

6-
public record AnyOfSchema(List<Schema> options) implements Schema {
7+
public record AnyOfSchema(List<Schema> options, Map<String, Object> extensions) implements Schema {
78
@Override
89
public Set<TypeName> types() {
910
return Set.of();
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

56
public record ArraySchema(
6-
Set<TypeName> types, Schema items, Integer minItems, Integer maxItems, boolean uniqueItems)
7+
Set<TypeName> types,
8+
Schema items,
9+
Integer minItems,
10+
Integer maxItems,
11+
boolean uniqueItems,
12+
Map<String, Object> extensions)
713
implements Schema {}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

5-
public record BooleanSchema(Set<TypeName> types) implements Schema {}
6+
public record BooleanSchema(Set<TypeName> types, Map<String, Object> extensions)
7+
implements Schema {}

src/main/java/com/retailsvc/http/spec/schema/ConstSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

5-
public record ConstSchema(Object value) implements Schema {
6+
public record ConstSchema(Object value, Map<String, Object> extensions) implements Schema {
67
@Override
78
public Set<TypeName> types() {
89
return Set.of();

src/main/java/com/retailsvc/http/spec/schema/EnumSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.retailsvc.http.spec.schema;
22

33
import java.util.List;
4+
import java.util.Map;
45
import java.util.Set;
56

6-
public record EnumSchema(List<Object> values) implements Schema {
7+
public record EnumSchema(List<Object> values, Map<String, Object> extensions) implements Schema {
78
@Override
89
public Set<TypeName> types() {
910
return Set.of();

src/main/java/com/retailsvc/http/spec/schema/IntegerSchema.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

56
public record IntegerSchema(
@@ -9,5 +10,6 @@ public record IntegerSchema(
910
Long exclusiveMinimum,
1011
Long exclusiveMaximum,
1112
Long multipleOf,
12-
String format)
13+
String format,
14+
Map<String, Object> extensions)
1315
implements Schema {}

src/main/java/com/retailsvc/http/spec/schema/NeverSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

5-
public record NeverSchema() implements Schema {
6+
public record NeverSchema(Map<String, Object> extensions) implements Schema {
67
@Override
78
public Set<TypeName> types() {
89
return Set.of();

src/main/java/com/retailsvc/http/spec/schema/NotSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.retailsvc.http.spec.schema;
22

3+
import java.util.Map;
34
import java.util.Set;
45

5-
public record NotSchema(Schema schema) implements Schema {
6+
public record NotSchema(Schema schema, Map<String, Object> extensions) implements Schema {
67
@Override
78
public Set<TypeName> types() {
89
return Set.of();

0 commit comments

Comments
 (0)