From bd9d579589226f9c119cc8fc13ffd6d8cedb78ee Mon Sep 17 00:00:00 2001 From: Igor Tsiglyar Date: Wed, 15 Mar 2023 07:34:46 +0300 Subject: [PATCH] use_allof_for_refs: extend to example field (#3240) --- .../internal/genopenapi/template.go | 11 +++++++---- .../internal/genopenapi/template_test.go | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 3a3f539561a..09a3be23560 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -522,13 +522,16 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry if fieldSchema.Ref != "" { // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 - // However, use allOf to specify Title/Description/readOnly fields. - if fieldSchema.Title != "" || fieldSchema.Description != "" || fieldSchema.ReadOnly { + // However, use allOf to specify Title/Description/Example/readOnly fields. + if fieldSchema.Title != "" || fieldSchema.Description != "" || len(fieldSchema.Example) > 0 || fieldSchema.ReadOnly { fieldSchema = openapiSchemaObject{ Title: fieldSchema.Title, Description: fieldSchema.Description, - ReadOnly: fieldSchema.ReadOnly, - AllOf: []allOfEntry{{Ref: fieldSchema.Ref}}, + schemaCore: schemaCore{ + Example: fieldSchema.Example, + }, + ReadOnly: fieldSchema.ReadOnly, + AllOf: []allOfEntry{{Ref: fieldSchema.Ref}}, } } else { fieldSchema = openapiSchemaObject{schemaCore: schemaCore{Ref: fieldSchema.Ref}} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 165f7d305c1..1427236b47b 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -5372,6 +5372,18 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, + openAPIOptions: &openapiconfig.OpenAPIOptions{ + Field: []*openapiconfig.OpenAPIFieldOption{ + { + Field: "example.Message.nested", + Option: &openapi_options.JSONSchema{ + Title: "nested field title", + Description: "nested field desc", + Example: `"ok":"TRUE"`, + }, + }, + }, + }, defs: map[string]openapiSchemaObject{ "exampleMessage": { schemaCore: schemaCore{ @@ -5386,6 +5398,11 @@ func TestRenderMessagesAsDefinition(t *testing.T) { Value: openapiSchemaObject{ AllOf: []allOfEntry{{Ref: "#/definitions/MessageNested"}}, ReadOnly: true, + schemaCore: schemaCore{ + Example: RawExample(`"ok":"TRUE"`), + }, + Title: "nested field title", + Description: "nested field desc", }, }, },