mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
openapi
This commit is contained in:
@ -80,7 +80,6 @@ const (
|
||||
const (
|
||||
TagNamePath = `path`
|
||||
TagNameMethod = `method`
|
||||
TagNameIn = `in`
|
||||
TagNameMime = `mime`
|
||||
TagNameValidate = `v`
|
||||
)
|
||||
@ -142,6 +141,56 @@ func (oai OpenApiV3) String() string {
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func (oai *OpenApiV3) golangTypeToOAIType(t reflect.Type) string {
|
||||
for t.Kind() == reflect.Ptr {
|
||||
t = t.Elem()
|
||||
}
|
||||
switch t.Kind() {
|
||||
case reflect.String:
|
||||
return TypeString
|
||||
|
||||
case reflect.Struct:
|
||||
switch t.String() {
|
||||
case `time.Time`, `gtime.Time`:
|
||||
return TypeString
|
||||
}
|
||||
return TypeObject
|
||||
|
||||
case reflect.Slice, reflect.Array:
|
||||
switch t.String() {
|
||||
case `[]uint8`:
|
||||
return TypeString
|
||||
}
|
||||
return TypeArray
|
||||
|
||||
case reflect.Bool:
|
||||
return TypeBoolean
|
||||
|
||||
case
|
||||
reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
|
||||
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
|
||||
reflect.Float32, reflect.Float64,
|
||||
reflect.Complex64, reflect.Complex128:
|
||||
return TypeNumber
|
||||
|
||||
default:
|
||||
return TypeObject
|
||||
}
|
||||
}
|
||||
|
||||
// golangTypeToOAIFormat converts and returns OpenAPI parameter format for given golang type `t`.
|
||||
// Note that it does not return standard OpenAPI parameter format but custom format in golang type.
|
||||
func (oai *OpenApiV3) golangTypeToOAIFormat(t reflect.Type) string {
|
||||
format := t.String()
|
||||
switch gstr.TrimLeft(format, "*") {
|
||||
case `[]uint8`:
|
||||
return FormatBinary
|
||||
|
||||
default:
|
||||
return format
|
||||
}
|
||||
}
|
||||
|
||||
func formatRefToBytes(ref string) []byte {
|
||||
return []byte(fmt.Sprintf(`{"$ref":"#/components/schemas/%s"}`, ref))
|
||||
}
|
||||
|
||||
@ -42,19 +42,6 @@ type ParameterRef struct {
|
||||
}
|
||||
|
||||
func (oai *OpenApiV3) newParameterRefWithStructMethod(field *structs.Field, method string) (*ParameterRef, error) {
|
||||
var (
|
||||
inTagValue = field.Tag(TagNameIn)
|
||||
)
|
||||
if inTagValue == "" {
|
||||
// Default the parameter input to "query" if method is "GET/DELETE".
|
||||
switch gstr.ToUpper(method) {
|
||||
case HttpMethodGet, HttpMethodDelete:
|
||||
inTagValue = ParameterInQuery
|
||||
|
||||
default:
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
var (
|
||||
tagMap = field.TagMap()
|
||||
parameter = &Parameter{
|
||||
@ -70,8 +57,18 @@ func (oai *OpenApiV3) newParameterRefWithStructMethod(field *structs.Field, meth
|
||||
return nil, gerror.WrapCode(gcode.CodeInternalError, err, `mapping struct tags to Parameter failed`)
|
||||
}
|
||||
}
|
||||
if parameter.In == "" {
|
||||
// Default the parameter input to "query" if method is "GET/DELETE".
|
||||
switch gstr.ToUpper(method) {
|
||||
case HttpMethodGet, HttpMethodDelete:
|
||||
parameter.In = ParameterInQuery
|
||||
|
||||
switch inTagValue {
|
||||
default:
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
switch parameter.In {
|
||||
case ParameterInPath:
|
||||
// Required for path parameter.
|
||||
parameter.Required = true
|
||||
@ -83,7 +80,7 @@ func (oai *OpenApiV3) newParameterRefWithStructMethod(field *structs.Field, meth
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, gerror.NewCodef(gcode.CodeInvalidParameter, `invalid tag value "%s" for In`, inTagValue)
|
||||
return nil, gerror.NewCodef(gcode.CodeInvalidParameter, `invalid tag value "%s" for In`, parameter.In)
|
||||
}
|
||||
// Necessary schema or content.
|
||||
schemaRef, err := oai.newSchemaRefWithGolangType(field.Type(), tagMap)
|
||||
|
||||
@ -121,45 +121,3 @@ func (oai *OpenApiV3) doAddSchemaSingle(object interface{}) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (oai *OpenApiV3) golangTypeToOAIType(t reflect.Type) string {
|
||||
for t.Kind() == reflect.Ptr {
|
||||
t = t.Elem()
|
||||
}
|
||||
switch t.Kind() {
|
||||
case reflect.String:
|
||||
return TypeString
|
||||
|
||||
case reflect.Struct:
|
||||
switch t.String() {
|
||||
case
|
||||
`time.Time`,
|
||||
`gtime.Time`:
|
||||
return TypeString
|
||||
}
|
||||
return TypeObject
|
||||
|
||||
case reflect.Slice, reflect.Array:
|
||||
|
||||
return TypeArray
|
||||
|
||||
case reflect.Bool:
|
||||
return TypeBoolean
|
||||
|
||||
case
|
||||
reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
|
||||
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
|
||||
reflect.Float32, reflect.Float64,
|
||||
reflect.Complex64, reflect.Complex128:
|
||||
return TypeNumber
|
||||
|
||||
default:
|
||||
return TypeObject
|
||||
}
|
||||
}
|
||||
|
||||
// golangTypeToOAIFormat converts and returns OpenAPI parameter format for given golang type `t`.
|
||||
// Note that it does not return standard OpenAPI parameter format but custom format in golang type.
|
||||
func (oai *OpenApiV3) golangTypeToOAIFormat(t reflect.Type) string {
|
||||
return t.String()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user