mirror of
https://github.com/astaxie/beego.git
synced 2024-12-18 18:00:50 +00:00
70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package param
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
//MethodParam keeps param information to be auto passed to controller methods
|
|
type MethodParam struct {
|
|
name string
|
|
in paramType
|
|
required bool
|
|
defaultValue string
|
|
}
|
|
|
|
type paramType byte
|
|
|
|
const (
|
|
param paramType = iota
|
|
path
|
|
body
|
|
header
|
|
)
|
|
|
|
//New creates a new MethodParam with name and specific options
|
|
func New(name string, opts ...MethodParamOption) *MethodParam {
|
|
return newParam(name, nil, opts)
|
|
}
|
|
|
|
func newParam(name string, parser paramParser, opts []MethodParamOption) (param *MethodParam) {
|
|
param = &MethodParam{name: name}
|
|
for _, option := range opts {
|
|
option(param)
|
|
}
|
|
return
|
|
}
|
|
|
|
//Make creates an array of MethodParmas or an empty array
|
|
func Make(list ...*MethodParam) []*MethodParam {
|
|
if len(list) > 0 {
|
|
return list
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (mp *MethodParam) String() string {
|
|
options := []string{}
|
|
result := "param.New(\"" + mp.name + "\""
|
|
if mp.required {
|
|
options = append(options, "param.IsRequired")
|
|
}
|
|
switch mp.in {
|
|
case path:
|
|
options = append(options, "param.InPath")
|
|
case body:
|
|
options = append(options, "param.InBody")
|
|
case header:
|
|
options = append(options, "param.InHeader")
|
|
}
|
|
if mp.defaultValue != "" {
|
|
options = append(options, fmt.Sprintf(`param.Default("%s")`, mp.defaultValue))
|
|
}
|
|
if len(options) > 0 {
|
|
result += ", "
|
|
}
|
|
result += strings.Join(options, ", ")
|
|
result += ")"
|
|
return result
|
|
}
|