add "FirstOr" param parser
This commit is contained in:
@@ -1,6 +1,28 @@
|
||||
package params
|
||||
// package params provides methods on url.Values for parsing params for the subsonic api
|
||||
//
|
||||
// the format of the functions are:
|
||||
// `Get[First|Or|FirstOr][Int|ID|Bool][List]`
|
||||
//
|
||||
// first component (key selection):
|
||||
// "" -> lookup the key as usual, err if not found
|
||||
// "First" -> lookup from a list of possible keys, err if none found
|
||||
// "Or" -> lookup the key as usual, return `or` if not found
|
||||
// "FirstOr" -> lookup from a list of possible keys, return `or` if not found
|
||||
//
|
||||
// second component (type selection):
|
||||
// "" -> parse the value as a string
|
||||
// "Int" -> parse the value as an integer
|
||||
// "ID" -> parse the value as an artist, track, album etc id
|
||||
// "Bool" -> parse the value as a boolean
|
||||
//
|
||||
// last component (list parsing with stacked keys, eg. `?a=1&a=2&a=3`):
|
||||
// "" -> return the first value, eg. `1`
|
||||
// "List" -> return all values, eg. `{1, 2, 3}`
|
||||
//
|
||||
// note: these bulk of these funcs were generated with vim macros, so let me know if
|
||||
// you see something wrong :)
|
||||
|
||||
// {get, get first, get or} * {str, int, id, bool} * {list, not list} = 24 funcs
|
||||
package params
|
||||
|
||||
import (
|
||||
"errors"
|
||||
@@ -159,7 +181,7 @@ func (p Params) getFirst(keys []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ** begin str {get, get first, get or}
|
||||
// ** begin str {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) Get(key string) (string, error) {
|
||||
var ret string
|
||||
@@ -179,7 +201,15 @@ func (p Params) GetOr(key string, or string) string {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []str {get, get first, get or}
|
||||
func (p Params) GetFirstOr(or string, keys ...string) string {
|
||||
var ret string
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []str {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetList(key string) ([]string, error) {
|
||||
var ret []string
|
||||
@@ -199,7 +229,15 @@ func (p Params) GetOrList(key string, or []string) []string {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin int {get, get first, get or}
|
||||
func (p Params) GetFirstOrList(or []string, keys ...string) []string {
|
||||
var ret []string
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin int {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetInt(key string) (int, error) {
|
||||
var ret int
|
||||
@@ -219,7 +257,15 @@ func (p Params) GetOrInt(key string, or int) int {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []int {get, get first, get or}
|
||||
func (p Params) GetFirstOrInt(or int, keys ...string) int {
|
||||
var ret int
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []int {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetIntList(key string) ([]int, error) {
|
||||
var ret []int
|
||||
@@ -239,7 +285,15 @@ func (p Params) GetOrIntList(key string, or []int) []int {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin ID {get, get first, get or}
|
||||
func (p Params) GetFirstOrIntList(or []int, keys ...string) []int {
|
||||
var ret []int
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin ID {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetID(key string) (ID, error) {
|
||||
var ret ID
|
||||
@@ -264,7 +318,15 @@ func (p Params) GetOrID(key string, or ID) ID {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []ID {get, get first, get or}
|
||||
func (p Params) GetFirstOrID(or ID, keys ...string) ID {
|
||||
var ret ID
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []ID {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetIDList(key string) ([]ID, error) {
|
||||
var ret []ID
|
||||
@@ -284,7 +346,15 @@ func (p Params) GetOrIDList(key string, or []ID) []ID {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin bool {get, get first, get or}
|
||||
func (p Params) GetFirstOrIDList(or []ID, keys ...string) []ID {
|
||||
var ret []ID
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin bool {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetBool(key string) (bool, error) {
|
||||
var ret bool
|
||||
@@ -304,7 +374,15 @@ func (p Params) GetOrBool(key string, or bool) bool {
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []bool {get, get first, get or}
|
||||
func (p Params) GetFirstOrBool(or bool, keys ...string) bool {
|
||||
var ret bool
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
// ** begin []bool {get, get first, get or, get first or}
|
||||
|
||||
func (p Params) GetBoolList(key string) ([]bool, error) {
|
||||
var ret []bool
|
||||
@@ -323,3 +401,11 @@ func (p Params) GetOrBoolList(key string, or []bool) []bool {
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
func (p Params) GetFirstOrBoolList(or []bool, keys ...string) []bool {
|
||||
var ret []bool
|
||||
if err := parse(p.getFirst(keys), &ret); err == nil {
|
||||
return ret
|
||||
}
|
||||
return or
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user