diff --git a/Makefile b/Makefile index 8ce2e1ff..a55a84fd 100644 --- a/Makefile +++ b/Makefile @@ -49,6 +49,7 @@ samples: @PATH=./bin:$$PATH; protoc --jsonschema_out=jsonschemas --proto_path=${PROTO_PATH} ${PROTO_PATH}/Proto2NestedMessage.proto || echo "No messages found (Proto2NestedMessage.proto)" @PATH=./bin:$$PATH; protoc --jsonschema_out=jsonschemas --proto_path=${PROTO_PATH} ${PROTO_PATH}/GoogleValue.proto || echo "No messages found (GoogleValue.proto)" @PATH=./bin:$$PATH; protoc --jsonschema_out=jsonschemas -I. --proto_path=${PROTO_PATH} ${PROTO_PATH}/HiddenFields.proto || echo "No messages found (HiddenFields.proto)" + @PATH=./bin:$$PATH; protoc --jsonschema_out=jsonschemas -I. --proto_path=${PROTO_PATH} ${PROTO_PATH}/Proto3Required.proto || echo "No messages found (Proto3Required.proto)" @PATH=./bin:$$PATH; protoc --jsonschema_out=enforce_oneof:jsonschemas --proto_path=${PROTO_PATH} ${PROTO_PATH}/OneOf.proto || echo "No messages found (OneOf.proto)" @PATH=./bin:$$PATH; protoc --jsonschema_out=all_fields_required:jsonschemas --proto_path=${PROTO_PATH} ${PROTO_PATH}/Proto2NestedObject.proto || echo "No messages found (Proto2NestedObject.proto)" @PATH=./bin:$$PATH; protoc -I /usr/include --jsonschema_out=jsonschemas --proto_path=${PROTO_PATH} ${PROTO_PATH}/WellKnown.proto || echo "No messages found (WellKnown.proto)" diff --git a/README.md b/README.md index 91be5334..19151f17 100644 --- a/README.md +++ b/README.md @@ -131,10 +131,10 @@ package samples; import "options.proto"; message HiddenFields { - string visible1 = 1 [(protoc.gen.jsonschema.options).ignore = false]; + string visible1 = 1 [(protoc.gen.jsonschema.field_options).ignore = false]; string visible2 = 2; - string hidden1 = 3 [(protoc.gen.jsonschema.options).ignore = true]; - string hidden2 = 4 [deprecated = true, (protoc.gen.jsonschema.options).ignore = true]; + string hidden1 = 3 [(protoc.gen.jsonschema.field_options).ignore = true]; + string hidden2 = 4 [deprecated = true, (protoc.gen.jsonschema.field_options).ignore = true]; } ``` @@ -148,8 +148,8 @@ package samples; import "options.proto"; message Proto3Required { - string query = 1 [(protoc.gen.jsonschema.options).required = true]; - int32 page_number = 2 [deprecated = true, (protoc.gen.jsonschema.options).required = true]; + string query = 1 [(protoc.gen.jsonschema.field_options).required = true]; + int32 page_number = 2 [deprecated = true, (protoc.gen.jsonschema.field_options).required = true]; int32 result_per_page = 3; } ``` diff --git a/internal/converter/testdata/field_options.go b/internal/converter/testdata/field_options.go index 7cffa477..a5c0b20b 100644 --- a/internal/converter/testdata/field_options.go +++ b/internal/converter/testdata/field_options.go @@ -14,5 +14,5 @@ const FieldOptions = `{ }, "additionalProperties": true, "type": "object", - "description": "Custom FieldOptions for protoc-gen-jsonschema:" + "description": "Custom FieldOptions:" }` diff --git a/internal/converter/testdata/proto/HiddenFields.proto b/internal/converter/testdata/proto/HiddenFields.proto index 19a97c3e..21c784c2 100644 --- a/internal/converter/testdata/proto/HiddenFields.proto +++ b/internal/converter/testdata/proto/HiddenFields.proto @@ -3,8 +3,8 @@ package samples; import "options.proto"; message HiddenFields { - string visible1 = 1 [(protoc.gen.jsonschema.options).ignore = false]; + string visible1 = 1 [(protoc.gen.jsonschema.field_options).ignore = false]; string visible2 = 2; - string hidden1 = 3 [(protoc.gen.jsonschema.options).ignore = true]; - string hidden2 = 4 [deprecated = true, (protoc.gen.jsonschema.options).ignore = true]; + string hidden1 = 3 [(protoc.gen.jsonschema.field_options).ignore = true]; + string hidden2 = 4 [deprecated = true, (protoc.gen.jsonschema.field_options).ignore = true]; } diff --git a/internal/converter/testdata/proto/Proto3Required.proto b/internal/converter/testdata/proto/Proto3Required.proto index 4c5634ee..3ab336d5 100644 --- a/internal/converter/testdata/proto/Proto3Required.proto +++ b/internal/converter/testdata/proto/Proto3Required.proto @@ -3,7 +3,7 @@ package samples; import "options.proto"; message Proto3Required { - string query = 1 [(protoc.gen.jsonschema.options).required = true]; - int32 page_number = 2 [deprecated = true, (protoc.gen.jsonschema.options).required = true]; + string query = 1 [(protoc.gen.jsonschema.field_options).required = true]; + int32 page_number = 2 [deprecated = true, (protoc.gen.jsonschema.field_options).required = true]; int32 result_per_page = 3; } diff --git a/jsonschemas/Proto3Required.jsonschema b/jsonschemas/Proto3Required.jsonschema new file mode 100644 index 00000000..89e82910 --- /dev/null +++ b/jsonschemas/Proto3Required.jsonschema @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "required": [ + "query", + "page_number" + ], + "properties": { + "query": { + "type": "string" + }, + "page_number": { + "type": "integer" + }, + "result_per_page": { + "type": "integer" + } + }, + "additionalProperties": true, + "type": "object" +} \ No newline at end of file diff --git a/options.proto b/options.proto index 61707e0c..41d8c8e5 100644 --- a/options.proto +++ b/options.proto @@ -1,9 +1,14 @@ +// Custom options for protoc-gen-jsonschema +// Allocated range is 1125-1129 +// See https://github.com/protocolbuffers/protobuf/blob/master/docs/options.md + syntax = "proto3"; package protoc.gen.jsonschema; import "google/protobuf/descriptor.proto"; option go_package = "./protos"; -// Custom FieldOptions for protoc-gen-jsonschema: + +// Custom FieldOptions: message FieldOptions { // Fields tagged with this will be omitted from generated schemas: @@ -14,8 +19,6 @@ message FieldOptions { } -// Custom FieldOptions using our legitimate registered number: -// https://github.com/protocolbuffers/protobuf/blob/master/docs/options.md extend google.protobuf.FieldOptions { - FieldOptions options = 1125; + FieldOptions field_options = 1125; }