1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-30 00:41:28 +00:00
Beego/context/param/methodparams.go

68 lines
1.3 KiB
Go
Raw Normal View History

2017-04-21 12:26:41 +00:00
package param
import (
"fmt"
"strings"
)
2017-04-21 12:26:41 +00:00
//Keeps param information to be auto passed to controller methods
type MethodParam struct {
name string
location paramLocation
required bool
2017-04-22 22:33:50 +00:00
defValue string
2017-04-21 12:26:41 +00:00
}
type paramLocation byte
const (
param paramLocation = iota
path
2017-04-21 12:26:41 +00:00
body
header
)
func New(name string, opts ...MethodParamOption) *MethodParam {
return newParam(name, nil, opts)
2017-04-23 18:37:09 +00:00
}
2017-04-21 12:26:41 +00:00
func newParam(name string, parser paramParser, opts []MethodParamOption) (param *MethodParam) {
param = &MethodParam{name: name}
2017-04-21 12:26:41 +00:00
for _, option := range opts {
option(param)
}
return
}
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.location {
case path:
options = append(options, "param.InPath")
case body:
options = append(options, "param.InBody")
case header:
options = append(options, "param.InHeader")
}
if mp.defValue != "" {
options = append(options, fmt.Sprintf(`param.Default("%s")`, mp.defValue))
}
if len(options) > 0 {
result += ", "
}
result += strings.Join(options, ", ")
result += ")"
return result
}