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
 | |
| }
 |