api-doc/struct_field.go

148 lines
3.5 KiB
Go
Raw Normal View History

2025-02-12 22:20:50 +08:00
// Package api_doc ...
//
// Description : api_doc ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2025-02-12 22:15
package api_doc
import (
"git.zhangdeman.cn/gateway/api-doc/define"
"reflect"
"strconv"
"strings"
2025-02-12 22:20:50 +08:00
)
var (
ParseStructField = parseStructField{}
)
type parseStructField struct {
}
// GetParamName 获取参数名称
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:58 2025/2/11
func (psf parseStructField) GetParamName(structField reflect.StructField) string {
paramNameTagList := []string{
define.TagJson, define.TagForm,
define.TagXml, define.TagYaml,
define.TagYml,
}
for _, tag := range paramNameTagList {
tagVal := structField.Tag.Get(tag)
if tagVal != "" {
return tagVal
}
}
// 未设置相关字段, 则字段名即为参数名
return structField.Name
}
// GetParamDesc ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:01 2025/2/11
func (psf parseStructField) GetParamDesc(structField reflect.StructField) string {
descTagList := []string{define.TagDesc, define.TagDescription}
for _, tag := range descTagList {
tagVal := structField.Tag.Get(tag)
if tagVal != "" {
return tagVal
}
}
// 没有显示的设置参数描述, 则使用参数名作为参数描述
return psf.GetParamName(structField)
}
// GetDefaultValue 获取默认值
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:05 2025/2/11
func (psf parseStructField) GetDefaultValue(structField reflect.StructField) any {
2025-02-12 22:20:50 +08:00
defaultTagList := []string{define.TagD, define.TagDefault}
fieldType := structField.Type.Kind().String()
2025-02-12 22:20:50 +08:00
for _, tag := range defaultTagList {
if val, exist := structField.Tag.Lookup(tag); exist && val != "" {
if strings.HasPrefix(fieldType, "int") {
i, _ := strconv.Atoi(val)
return i
}
if strings.HasPrefix(fieldType, "uint") {
uintVal, _ := strconv.ParseUint(val, 10, 64)
return uintVal
}
if strings.HasPrefix(fieldType, "float") {
floatVal, _ := strconv.ParseFloat(val, 64)
return floatVal
}
if strings.HasPrefix(fieldType, "string") {
return val
}
if strings.HasPrefix(fieldType, "bool") {
if val == "true" {
return true
} else {
return false
}
}
return val
2025-02-12 22:20:50 +08:00
}
}
return nil
2025-02-12 22:20:50 +08:00
}
2025-02-13 16:03:31 +08:00
// GetValidateRule 获取验证规则
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:30 2025/2/13
func (psf parseStructField) GetValidateRule(structField reflect.StructField) string {
defaultTagList := []string{define.TagValidate, define.TagBinding}
for _, tag := range defaultTagList {
if tagVal, exist := structField.Tag.Lookup(tag); exist && len(tagVal) > 0 {
return tagVal
}
}
return ""
}
// Deprecated 是否弃用
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:12 2025/2/13
func (psf parseStructField) Deprecated(structField reflect.StructField) bool {
defaultTagList := []string{define.TagDeprecated}
for _, tag := range defaultTagList {
if tagVal, exist := structField.Tag.Lookup(tag); exist && (tagVal == "1" || strings.ToLower(tagVal) == "true") {
return true
}
}
return false
}
2025-02-14 15:31:53 +08:00
// Summary 摘要信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:15 2025/2/14
func (psf parseStructField) Summary(structField reflect.StructField) string {
defaultTagList := []string{define.TagSummary}
for _, tag := range defaultTagList {
if tagVal, exist := structField.Tag.Lookup(tag); exist && len(tagVal) > 0 {
return tagVal
}
}
2025-02-14 18:22:53 +08:00
paramName := psf.GetParamName(structField)
if paramName == "-" {
return ""
}
return paramName
2025-02-14 15:31:53 +08:00
}