83 lines
1.4 KiB
Go
83 lines
1.4 KiB
Go
package subsonic
|
|
|
|
import (
|
|
"net/url"
|
|
"strconv"
|
|
)
|
|
|
|
// params wraps the request's merged query+form values with typed,
|
|
// error-producing accessors, so handlers never hand-roll parameter
|
|
// parsing/validation.
|
|
type params struct {
|
|
values url.Values
|
|
}
|
|
|
|
func (p params) Get(name string) string {
|
|
return p.values.Get(name)
|
|
}
|
|
|
|
func (p params) GetAll(name string) []string {
|
|
return p.values[name]
|
|
}
|
|
|
|
func (p params) Has(name string) bool {
|
|
_, ok := p.values[name]
|
|
return ok
|
|
}
|
|
|
|
func (p params) Required(name string) (string, *apiError) {
|
|
v := p.values.Get(name)
|
|
if v == "" {
|
|
return "", errMissingParameter(name)
|
|
}
|
|
return v, nil
|
|
}
|
|
|
|
func (p params) Int(name string, def int) int {
|
|
v := p.values.Get(name)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
n, err := strconv.Atoi(v)
|
|
if err != nil {
|
|
return def
|
|
}
|
|
return n
|
|
}
|
|
|
|
func (p params) RequiredInt(name string) (int, *apiError) {
|
|
v := p.values.Get(name)
|
|
if v == "" {
|
|
return 0, errMissingParameter(name)
|
|
}
|
|
n, err := strconv.Atoi(v)
|
|
if err != nil {
|
|
return 0, errMissingParameter(name)
|
|
}
|
|
return n, nil
|
|
}
|
|
|
|
func (p params) Int64(name string, def int64) int64 {
|
|
v := p.values.Get(name)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
n, err := strconv.ParseInt(v, 10, 64)
|
|
if err != nil {
|
|
return def
|
|
}
|
|
return n
|
|
}
|
|
|
|
func (p params) Bool(name string, def bool) bool {
|
|
v := p.values.Get(name)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
b, err := strconv.ParseBool(v)
|
|
if err != nil {
|
|
return def
|
|
}
|
|
return b
|
|
}
|