Skip to content

Commit 7276314

Browse files
authored
Add support for minItems and maxItems for repeated (#122)
1 parent b71f2a2 commit 7276314

22 files changed

Lines changed: 206 additions & 3 deletions

.golangci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ linters:
1313
- lll # don't want hard limits for line length
1414
- maintidx # covered by gocyclo
1515
- mnd # some unnamed constants are okay
16+
- nestif # covered by gocyclo
1617
- nilnil
1718
- nlreturn # generous whitespace violates house style
1819
- noinlineerr

internal/gen/jsonschema/buf.protoschema.test.v1.ConstraintTest.jsonschema.strict.bundle.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/gen/jsonschema/buf.protoschema.test.v1.ConstraintTest.schema.json

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/gen/jsonschema/buf.protoschema.test.v1.ConstraintTests.jsonschema.strict.bundle.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/gen/proto/buf/protoschema/test/v1/constraints.pb.go

Lines changed: 13 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/proto/buf/protoschema/test/v1/constraints.proto

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,11 @@ message ConstraintTest {
312312
}
313313
}
314314
}];
315+
316+
repeated string is_list = 125 [
317+
(buf.validate.field).repeated.min_items = 1,
318+
(buf.validate.field).repeated.max_items = 10
319+
];
315320
}
316321

317322
message ConstraintTests {

internal/protoschema/jsonschema/jsonschema.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,14 @@ func (p *Generator) generateField(entry *msgSchema, field protoreflect.FieldDesc
382382
func (p *Generator) generateFieldValidation(entry *msgSchema, field protoreflect.FieldDescriptor, hasImplicitPresence bool, rules *validate.FieldRules, schema map[string]any) error {
383383
if field.IsList() {
384384
schema["type"] = jsArray
385+
if repeated := rules.GetRepeated(); repeated != nil {
386+
if repeated.HasMinItems() {
387+
schema["minItems"] = repeated.GetMinItems()
388+
}
389+
if repeated.HasMaxItems() {
390+
schema["maxItems"] = repeated.GetMaxItems()
391+
}
392+
}
385393
items := make(map[string]any)
386394
schema["items"] = items
387395
schema = items

internal/testdata/codegenrequest/input.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/testdata/jsonschema/buf.protoschema.test.v1.ConstraintTest.jsonschema.bundle.json

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/testdata/jsonschema/buf.protoschema.test.v1.ConstraintTest.jsonschema.json

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)