add bool param type
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
package params
|
package params
|
||||||
|
|
||||||
// {get, get first, get or} * {str, int, id} * {list, not list} = 18
|
// {get, get first, get or} * {str, int, id, bool} * {list, not list} = 24 funcs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -15,6 +15,7 @@ var (
|
|||||||
ErrKeyNotFound = errors.New("key(s) not found")
|
ErrKeyNotFound = errors.New("key(s) not found")
|
||||||
ErrIDInvalid = errors.New("invalid id")
|
ErrIDInvalid = errors.New("invalid id")
|
||||||
ErrIDNotAnInt = errors.New("not an int")
|
ErrIDNotAnInt = errors.New("not an int")
|
||||||
|
ErrIDNotABool = errors.New("not an bool")
|
||||||
)
|
)
|
||||||
|
|
||||||
const IDSeparator = "-"
|
const IDSeparator = "-"
|
||||||
@@ -51,6 +52,8 @@ func parse(values []string, i interface{}) error {
|
|||||||
*v, err = parseInt(values[0])
|
*v, err = parseInt(values[0])
|
||||||
case *ID:
|
case *ID:
|
||||||
*v, err = parseID(values[0])
|
*v, err = parseID(values[0])
|
||||||
|
case *bool:
|
||||||
|
*v, err = parseBool(values[0])
|
||||||
case *[]string:
|
case *[]string:
|
||||||
for _, val := range values {
|
for _, val := range values {
|
||||||
parsed, err := parseStr(val)
|
parsed, err := parseStr(val)
|
||||||
@@ -75,6 +78,14 @@ func parse(values []string, i interface{}) error {
|
|||||||
}
|
}
|
||||||
*v = append(*v, parsed)
|
*v = append(*v, parsed)
|
||||||
}
|
}
|
||||||
|
case *[]bool:
|
||||||
|
for _, val := range values {
|
||||||
|
parsed, err := parseBool(val)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*v = append(*v, parsed)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -114,6 +125,13 @@ func parseID(in string) (ID, error) {
|
|||||||
return ID{}, ErrIDInvalid
|
return ID{}, ErrIDInvalid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseBool(in string) (bool, error) {
|
||||||
|
if v, err := strconv.ParseBool(in); err == nil {
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
return false, ErrIDNotABool
|
||||||
|
}
|
||||||
|
|
||||||
type Params url.Values
|
type Params url.Values
|
||||||
|
|
||||||
func New(r *http.Request) Params {
|
func New(r *http.Request) Params {
|
||||||
@@ -228,6 +246,11 @@ func (p Params) GetID(key string) (ID, error) {
|
|||||||
return ret, parse(p.get(key), &ret)
|
return ret, parse(p.get(key), &ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p Params) GetIDDefault() (ID, error) {
|
||||||
|
var ret ID
|
||||||
|
return ret, parse(p.get("id"), &ret)
|
||||||
|
}
|
||||||
|
|
||||||
func (p Params) GetFirstID(keys ...string) (ID, error) {
|
func (p Params) GetFirstID(keys ...string) (ID, error) {
|
||||||
var ret ID
|
var ret ID
|
||||||
return ret, parse(p.getFirst(keys), &ret)
|
return ret, parse(p.getFirst(keys), &ret)
|
||||||
@@ -260,3 +283,43 @@ func (p Params) GetOrIDList(key string, or []ID) []ID {
|
|||||||
}
|
}
|
||||||
return or
|
return or
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ** begin bool {get, get first, get or}
|
||||||
|
|
||||||
|
func (p Params) GetBool(key string) (bool, error) {
|
||||||
|
var ret bool
|
||||||
|
return ret, parse(p.get(key), &ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Params) GetFirstBool(keys ...string) (bool, error) {
|
||||||
|
var ret bool
|
||||||
|
return ret, parse(p.getFirst(keys), &ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Params) GetOrBool(key string, or bool) bool {
|
||||||
|
var ret bool
|
||||||
|
if err := parse(p.get(key), &ret); err == nil {
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return or
|
||||||
|
}
|
||||||
|
|
||||||
|
// ** begin []bool {get, get first, get or}
|
||||||
|
|
||||||
|
func (p Params) GetBoolList(key string) ([]bool, error) {
|
||||||
|
var ret []bool
|
||||||
|
return ret, parse(p.get(key), &ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Params) GetFirstBoolList(keys ...string) ([]bool, error) {
|
||||||
|
var ret []bool
|
||||||
|
return ret, parse(p.getFirst(keys), &ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Params) GetOrBoolList(key string, or []bool) []bool {
|
||||||
|
var ret []bool
|
||||||
|
if err := parse(p.get(key), &ret); err == nil {
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return or
|
||||||
|
}
|
||||||
|
|||||||
@@ -35,21 +35,27 @@ func TestParseID(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO?
|
// TODO?
|
||||||
func TestGet(t *testing.T) {}
|
func TestGet(t *testing.T) {}
|
||||||
func TestGetFirst(t *testing.T) {}
|
func TestGetFirst(t *testing.T) {}
|
||||||
func TestGetOr(t *testing.T) {}
|
func TestGetOr(t *testing.T) {}
|
||||||
func TestGetList(t *testing.T) {}
|
func TestGetList(t *testing.T) {}
|
||||||
func TestGetFirstList(t *testing.T) {}
|
func TestGetFirstList(t *testing.T) {}
|
||||||
func TestGetOrList(t *testing.T) {}
|
func TestGetOrList(t *testing.T) {}
|
||||||
func TestGetInt(t *testing.T) {}
|
func TestGetInt(t *testing.T) {}
|
||||||
func TestGetFirstInt(t *testing.T) {}
|
func TestGetFirstInt(t *testing.T) {}
|
||||||
func TestGetOrInt(t *testing.T) {}
|
func TestGetOrInt(t *testing.T) {}
|
||||||
func TestGetIntList(t *testing.T) {}
|
func TestGetIntList(t *testing.T) {}
|
||||||
func TestGetFirstIntList(t *testing.T) {}
|
func TestGetFirstIntList(t *testing.T) {}
|
||||||
func TestGetOrIntList(t *testing.T) {}
|
func TestGetOrIntList(t *testing.T) {}
|
||||||
func TestGetID(t *testing.T) {}
|
func TestGetID(t *testing.T) {}
|
||||||
func TestGetFirstID(t *testing.T) {}
|
func TestGetFirstID(t *testing.T) {}
|
||||||
func TestGetOrID(t *testing.T) {}
|
func TestGetOrID(t *testing.T) {}
|
||||||
func TestGetIDList(t *testing.T) {}
|
func TestGetIDList(t *testing.T) {}
|
||||||
func TestGetFirstIDList(t *testing.T) {}
|
func TestGetFirstIDList(t *testing.T) {}
|
||||||
func TestGetOrIDList(t *testing.T) {}
|
func TestGetOrIDList(t *testing.T) {}
|
||||||
|
func TestGetBool(t *testing.T) {}
|
||||||
|
func TestGetFirstBool(t *testing.T) {}
|
||||||
|
func TestGetOrBool(t *testing.T) {}
|
||||||
|
func TestGetBoolList(t *testing.T) {}
|
||||||
|
func TestGetFirstBoolList(t *testing.T) {}
|
||||||
|
func TestGetOrBoolList(t *testing.T) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user