Skip to content

Commit

Permalink
protoc-gen-{grpc-gateway,openapiv2}: add optional support
Browse files Browse the repository at this point in the history
Let `protoc` know that these generators support optional keywords. This
is by no means an implementation in `grpc-gateway` of the optional aware
generated code, it's just shielding of being considered as blockers in
code generation workflows.

Closes #1278
  • Loading branch information
glerchundi committed Feb 20, 2021
1 parent 59d9319 commit 2c5aed6
Show file tree
Hide file tree
Showing 11 changed files with 714 additions and 601 deletions.
31 changes: 31 additions & 0 deletions examples/internal/clients/abe/api/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,13 @@ paths:
type: "string"
x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation"
x-optionalDataType: "String"
- name: "optionalStringValue"
in: "query"
description: "mark a field as optional."
required: false
type: "string"
x-exportParamName: "OptionalStringValue"
x-optionalDataType: "String"
responses:
200:
description: "A successful response."
Expand Down Expand Up @@ -714,6 +721,13 @@ paths:
type: "string"
x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation"
x-optionalDataType: "String"
- name: "optionalStringValue"
in: "query"
description: "mark a field as optional."
required: false
type: "string"
x-exportParamName: "OptionalStringValue"
x-optionalDataType: "String"
responses:
200:
description: "A successful response."
Expand Down Expand Up @@ -1012,6 +1026,13 @@ paths:
type: "string"
x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation"
x-optionalDataType: "String"
- name: "optionalStringValue"
in: "query"
description: "mark a field as optional."
required: false
type: "string"
x-exportParamName: "OptionalStringValue"
x-optionalDataType: "String"
responses:
200:
description: "A successful response."
Expand Down Expand Up @@ -1330,6 +1351,13 @@ paths:
type: "string"
x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation"
x-optionalDataType: "String"
- name: "optionalStringValue"
in: "query"
description: "mark a field as optional."
required: false
type: "string"
x-exportParamName: "OptionalStringValue"
x-optionalDataType: "String"
responses:
200:
description: "A successful response."
Expand Down Expand Up @@ -2698,6 +2726,9 @@ definitions:
type: "string"
title: "mark a field as readonly in Open API definition"
readOnly: true
optionalStringValue:
type: "string"
title: "mark a field as optional"
externalDocs:
description: "Find out more about ABitOfEverything"
url: "https://github.com/grpc-ecosystem/grpc-gateway"
Expand Down
20 changes: 20 additions & 0 deletions examples/internal/clients/abe/api_a_bit_of_everything_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ ABitOfEverythingServiceApiService
* @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true.
* @param "Int64OverrideType" (optional.Int64) -
* @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition.
* @param "OptionalStringValue" (optional.String) - mark a field as optional.
@return ExamplepbABitOfEverything
*/
Expand Down Expand Up @@ -259,6 +260,7 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct {
NestedAnnotationOk optional.String
Int64OverrideType optional.Int64
OutputOnlyStringViaFieldBehaviorAnnotation optional.String
OptionalStringValue optional.String
}

func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) {
Expand Down Expand Up @@ -376,6 +378,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery
if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {
localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), ""))
}
if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {
localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), ""))
}
// to determine the Content-Type header
localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"}

Expand Down Expand Up @@ -547,6 +552,7 @@ ABitOfEverythingServiceApiService
* @param "NestedAnnotationAmount" (optional.Int64) -
* @param "Int64OverrideType" (optional.Int64) -
* @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition.
* @param "OptionalStringValue" (optional.String) - mark a field as optional.
@return ExamplepbABitOfEverything
*/
Expand Down Expand Up @@ -584,6 +590,7 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct {
NestedAnnotationAmount optional.Int64
Int64OverrideType optional.Int64
OutputOnlyStringViaFieldBehaviorAnnotation optional.String
OptionalStringValue optional.String
}

func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) {
Expand Down Expand Up @@ -701,6 +708,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn
if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {
localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), ""))
}
if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {
localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), ""))
}
// to determine the Content-Type header
localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"}

Expand Down Expand Up @@ -871,6 +881,7 @@ ABitOfEverythingServiceApiService
* @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true.
* @param "Int64OverrideType" (optional.Int64) -
* @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition.
* @param "OptionalStringValue" (optional.String) - mark a field as optional.
@return ExamplepbABitOfEverything
*/
Expand Down Expand Up @@ -906,6 +917,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct {
NestedAnnotationOk optional.String
Int64OverrideType optional.Int64
OutputOnlyStringViaFieldBehaviorAnnotation optional.String
OptionalStringValue optional.String
}

func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) {
Expand Down Expand Up @@ -1017,6 +1029,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer
if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {
localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), ""))
}
if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {
localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), ""))
}
// to determine the Content-Type header
localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"}

Expand Down Expand Up @@ -2492,6 +2507,7 @@ ABitOfEverythingServiceApiService
* @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true.
* @param "Int64OverrideType" (optional.Int64) -
* @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition.
* @param "OptionalStringValue" (optional.String) - mark a field as optional.
@return interface{}
*/
Expand Down Expand Up @@ -2530,6 +2546,7 @@ type ABitOfEverythingServiceGetQueryOpts struct {
NestedAnnotationOk optional.String
Int64OverrideType optional.Int64
OutputOnlyStringViaFieldBehaviorAnnotation optional.String
OptionalStringValue optional.String
}

func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) {
Expand Down Expand Up @@ -2650,6 +2667,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx
if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() {
localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), ""))
}
if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() {
localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), ""))
}
// to determine the Content-Type header
localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,5 @@ type ExamplepbABitOfEverything struct {
Int64OverrideType int64 `json:"int64OverrideType,omitempty"`
RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"`
OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"`
OptionalStringValue string `json:"optionalStringValue,omitempty"`
}
Loading

0 comments on commit 2c5aed6

Please sign in to comment.