Skip to content

Commit e69019c

Browse files
committed
Implement or() and and() methods in schema classes
1 parent 9470907 commit e69019c

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

src/main/java/org/glavo/nbt/internal/schema/IntersectionSchema.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import org.glavo.nbt.validation.NBTValidationException;
2323
import org.jetbrains.annotations.Unmodifiable;
2424

25+
import java.util.ArrayList;
2526
import java.util.List;
27+
import java.util.Objects;
2628

2729
public record IntersectionSchema<T extends Tag>(
2830
@Unmodifiable List<NBTSchema<? extends T>> schemas) implements TagSchema<T> {
@@ -51,4 +53,15 @@ public void validateTag(Tag tag) throws NBTValidationException {
5153
}
5254
}
5355
}
56+
57+
@Override
58+
public NBTSchema<T> and(NBTSchema<? extends T> other) {
59+
Objects.requireNonNull(other, "other");
60+
61+
var list = new ArrayList<NBTSchema<? extends T>>(schemas.size() + 1);
62+
list.addAll(schemas);
63+
list.add(other);
64+
65+
return new IntersectionSchema<>(List.copyOf(list));
66+
}
5467
}

src/main/java/org/glavo/nbt/internal/schema/UnionSchema.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import org.glavo.nbt.validation.NBTValidationException;
2323
import org.jetbrains.annotations.Unmodifiable;
2424

25+
import java.util.ArrayList;
2526
import java.util.List;
27+
import java.util.Objects;
2628

2729
public record UnionSchema<T extends Tag>(@Unmodifiable List<NBTSchema<? extends T>> schemas) implements TagSchema<T> {
2830

@@ -57,4 +59,14 @@ public void validateTag(Tag tag) throws NBTValidationException {
5759
}
5860
throw exception;
5961
}
62+
63+
@Override
64+
public NBTSchema<T> or(NBTSchema<? extends T> other) {
65+
Objects.requireNonNull(other, "other");
66+
67+
var list = new ArrayList<NBTSchema<? extends T>>(schemas.size() + 1);
68+
list.addAll(schemas);
69+
list.add(other);
70+
return new UnionSchema<>(List.copyOf(list));
71+
}
6072
}

0 commit comments

Comments
 (0)