From f3bb1b1ee05d778d6e401cc62ae25f2ab4cfbfbb Mon Sep 17 00:00:00 2001 From: wuxingzhong Date: Mon, 9 Mar 2020 23:37:43 +0800 Subject: [PATCH 1/3] add validate comment --- .../protobuf/protoc-gen-bswagger/generator.go | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tool/protobuf/protoc-gen-bswagger/generator.go b/tool/protobuf/protoc-gen-bswagger/generator.go index 3552d176e..26a07d4dc 100644 --- a/tool/protobuf/protoc-gen-bswagger/generator.go +++ b/tool/protobuf/protoc-gen-bswagger/generator.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "net/http" + "reflect" "regexp" "strings" @@ -184,6 +185,12 @@ func (t *swaggerGen) getQueryParameter(file *descriptor.FileDescriptorProto, cleanComment := tag.GetCommentWithoutTag(fComment.Leading) p.Description = strings.Trim(strings.Join(cleanComment, "\n"), "\n\r ") + validateComment := getValidateComment(field) + if p.Description != "" && validateComment != "" { + p.Description = p.Description + "," + validateComment + } else if validateComment != "" { + p.Description = validateComment + } p.In = "query" p.Required = generator.GetFieldRequired(field, t.Reg, input) typ, isArray, format := getFieldSwaggerType(field) @@ -208,6 +215,12 @@ func (t *swaggerGen) schemaForField(file *descriptor.FileDescriptorProto, gen.Error(err, "comment not found err %+v") } schema.Description = strings.Trim(fComment.Leading, "\n\r ") + validateComment := getValidateComment(field) + if schema.Description != "" && validateComment != "" { + schema.Description = schema.Description + "," + validateComment + } else if validateComment != "" { + schema.Description = validateComment + } typ, isArray, format := getFieldSwaggerType(field) if !generator.IsScalar(field) { if generator.IsMap(field, t.Reg) { @@ -303,3 +316,20 @@ func getFieldSwaggerType(field *descriptor.FieldDescriptorProto) (typeName strin } return } + +func getValidateComment(field *descriptor.FieldDescriptorProto) string { + var ( + tags []reflect.StructTag + ) + comment := "" + //get required info from gogoproto.moretags + moretags := tag.GetMoreTags(field) + if moretags != nil { + tags = []reflect.StructTag{reflect.StructTag(*moretags)} + } + validateTag := tag.GetTagValue("validate", tags) + if len(validateTag) > 0 { + comment = validateTag + } + return comment +} From f18a1b713f2ed123241dd11cbf37370cd82794d0 Mon Sep 17 00:00:00 2001 From: wuxingzhong Date: Mon, 9 Mar 2020 23:50:42 +0800 Subject: [PATCH 2/3] delete validate 'required' string --- tool/protobuf/protoc-gen-bswagger/generator.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tool/protobuf/protoc-gen-bswagger/generator.go b/tool/protobuf/protoc-gen-bswagger/generator.go index 26a07d4dc..68184d217 100644 --- a/tool/protobuf/protoc-gen-bswagger/generator.go +++ b/tool/protobuf/protoc-gen-bswagger/generator.go @@ -321,15 +321,13 @@ func getValidateComment(field *descriptor.FieldDescriptorProto) string { var ( tags []reflect.StructTag ) - comment := "" //get required info from gogoproto.moretags moretags := tag.GetMoreTags(field) if moretags != nil { tags = []reflect.StructTag{reflect.StructTag(*moretags)} } validateTag := tag.GetTagValue("validate", tags) - if len(validateTag) > 0 { - comment = validateTag - } + re, _ := regexp.Compile("required *,*") + comment := re.ReplaceAllString(validateTag, "") return comment } From d86ba7b23024d8753c1a8c4a859653fc26ad41de Mon Sep 17 00:00:00 2001 From: wuxingzhong Date: Tue, 10 Mar 2020 11:25:27 +0800 Subject: [PATCH 3/3] trim omitempty --- tool/protobuf/protoc-gen-bswagger/generator.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tool/protobuf/protoc-gen-bswagger/generator.go b/tool/protobuf/protoc-gen-bswagger/generator.go index 68184d217..d90d9bf48 100644 --- a/tool/protobuf/protoc-gen-bswagger/generator.go +++ b/tool/protobuf/protoc-gen-bswagger/generator.go @@ -327,7 +327,15 @@ func getValidateComment(field *descriptor.FieldDescriptorProto) string { tags = []reflect.StructTag{reflect.StructTag(*moretags)} } validateTag := tag.GetTagValue("validate", tags) - re, _ := regexp.Compile("required *,*") - comment := re.ReplaceAllString(validateTag, "") - return comment + + // trim + regStr := []string{ + "required *,*", + "omitempty *,*", + } + for _, v := range regStr { + re, _ := regexp.Compile(v) + validateTag = re.ReplaceAllString(validateTag, "") + } + return validateTag }