Skip to content

Commit 2f0bdea

Browse files
committed
feat(schema): Add ObjectSchema and ArraySchema records
1 parent 2588171 commit 2f0bdea

4 files changed

Lines changed: 66 additions & 1 deletion

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.Set;
4+
5+
public record ArraySchema(
6+
Set<TypeName> types, Schema items, Integer minItems, Integer maxItems, boolean uniqueItems)
7+
implements Schema {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.Set;
6+
7+
public record ObjectSchema(
8+
Set<TypeName> types,
9+
Map<String, Schema> properties,
10+
List<String> required,
11+
AdditionalProperties additionalProperties,
12+
Integer minProperties,
13+
Integer maxProperties)
14+
implements Schema {}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
import java.util.Set;
44

55
public sealed interface Schema
6-
permits StringSchema, NumberSchema, IntegerSchema, BooleanSchema, NullSchema, RefSchema {
6+
permits StringSchema,
7+
NumberSchema,
8+
IntegerSchema,
9+
BooleanSchema,
10+
ObjectSchema,
11+
ArraySchema,
12+
NullSchema,
13+
RefSchema {
714
Set<TypeName> types();
815
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.Set;
8+
import org.junit.jupiter.api.Test;
9+
10+
class ContainerSchemasTest {
11+
@Test
12+
void objectSchemaCarriesPropertiesAndRequired() {
13+
Schema name = new StringSchema(Set.of(TypeName.STRING), null, null, null, null, null);
14+
ObjectSchema o =
15+
new ObjectSchema(
16+
Set.of(TypeName.OBJECT),
17+
Map.of("name", name),
18+
List.of("name"),
19+
new AdditionalProperties.Allowed(),
20+
null,
21+
null);
22+
assertThat(o.properties()).containsKey("name");
23+
assertThat(o.required()).containsExactly("name");
24+
assertThat(o.additionalProperties()).isInstanceOf(AdditionalProperties.Allowed.class);
25+
}
26+
27+
@Test
28+
void arraySchemaCarriesItemsAndConstraints() {
29+
Schema items =
30+
new IntegerSchema(Set.of(TypeName.INTEGER), null, null, null, null, null, "int32");
31+
ArraySchema a = new ArraySchema(Set.of(TypeName.ARRAY), items, 1, 10, true);
32+
assertThat(a.items()).isSameAs(items);
33+
assertThat(a.minItems()).isEqualTo(1);
34+
assertThat(a.maxItems()).isEqualTo(10);
35+
assertThat(a.uniqueItems()).isTrue();
36+
}
37+
}

0 commit comments

Comments
 (0)