1 Star 0 Fork 0

go-better/go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
route-req.go 2.74 KB
一键复制 编辑 原始数据 按行查看 历史
bughou 提交于 3年前 . 迁移完成
package docs
import (
"bytes"
"fmt"
"log"
"reflect"
"regexp"
"strings"
"gitee.com/go-better/dev/encoding/jsondoc"
"gitee.com/go-better/dev/net/goa/convert"
"gitee.com/go-better/dev/type/strs"
"gitee.com/go-better/dev/type/structs"
)
func (r *Route) Title() string {
if f, ok := r.req.FieldByName("Title"); ok {
if comment := getComment(f.Tag); comment != "" {
return comment
}
return strings.TrimSpace(string(f.Tag))
}
return ""
}
func (r *Route) Desc(buf *bytes.Buffer) {
if f, ok := r.req.FieldByName("Desc"); ok {
if comment := getComment(f.Tag); comment != "" {
buf.WriteString(comment + "\n\n")
} else if desc := strings.TrimSpace(string(f.Tag)); desc != "" {
buf.WriteString(desc + "\n\n")
}
}
}
func (r *Route) Param(buf *bytes.Buffer, fullPath string) {
field, ok := r.req.FieldByName("Param")
if !ok {
return
}
buf.WriteString("\n## 路径中正则参数(子表达式)说明\n")
if desc := getComment(field.Tag); desc != "" {
buf.WriteString(desc + "\n\n")
}
names := regexp.MustCompile(fullPath).SubexpNames()[1:] // names[0] is always "".
for _, name := range names {
if name != "" {
if f, ok := field.Type.FieldByName(strs.FirstLetterToUpper(name)); ok {
buf.WriteString(fmt.Sprintf("- %s (%v): %s\n", name, f.Type, getComment(f.Tag)))
}
}
}
}
func (r *Route) Query(buf *bytes.Buffer) {
field, ok := r.req.FieldByName("Query")
if !ok {
return
}
buf.WriteString("\n## Query参数说明\n")
if desc := getComment(field.Tag); desc != "" {
buf.WriteString(desc + "\n\n")
}
buf.WriteString("```json5\n")
if b, err := jsondoc.MarshalIndent(
reflect.Zero(field.Type).Interface(), false, "", " ",
); err != nil {
log.Panic(err)
} else {
buf.Write(b)
}
buf.WriteString("\n```\n")
}
func (r *Route) Header(buf *bytes.Buffer) {
field, ok := r.req.FieldByName("Header")
if !ok {
return
}
buf.WriteString("\n## 请求头说明\n")
if desc := getComment(field.Tag); desc != "" {
buf.WriteString(desc + "\n\n")
}
convert.Traverse(reflect.New(field.Type).Elem(), true,
func(_ reflect.Value, f reflect.StructField) bool {
name, _ := structs.LookupTag(string(f.Tag), "header")
if name == "" {
name = f.Name
}
buf.WriteString(fmt.Sprintf("- %s (%v): %s\n", name, f.Type, getComment(f.Tag)))
return true
})
}
func (r *Route) Body(buf *bytes.Buffer) {
field, ok := r.req.FieldByName("Body")
if !ok {
return
}
buf.WriteString("\n## 请求体说明(application/json)\n")
if desc := getComment(field.Tag); desc != "" {
buf.WriteString(desc + "\n\n")
}
buf.WriteString("```json5\n")
if b, err := jsondoc.MarshalIndent(
reflect.Zero(field.Type).Interface(), false, "", " ",
); err != nil {
log.Panic(err)
} else {
buf.Write(b)
}
buf.WriteString("\n```\n")
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/go-better/go.git
git@gitee.com:go-better/go.git
go-better
go
go
d31700df43a9

搜索帮助