Files
herolib/lib/data/paramsparser/params_get_kwargs.v
2024-12-25 09:23:31 +01:00

195 lines
5.0 KiB
V

module paramsparser
import freeflowuniverse.herolib.core.texttools
import strconv
// see if the kwarg with the key exists
// if yes return as string trimmed
pub fn (params &Params) get(key_ string) !string {
key := texttools.name_fix(key_)
for p in params.params {
if p.key == key {
return p.value.trim(' ')
}
}
// print_backtrace()
return error('Did not find key:${key} in ${params}')
}
pub fn (params &Params) get_map() map[string]string {
mut r := map[string]string{}
for p in params.params {
r[p.key] = p.value
}
return r
}
// get kwarg return as string, ifn't exist return the defval
// line:
// arg1 arg2 color:red priority:'incredible' description:'with spaces, lets see if ok
// arg1 is an arg
// description is a kwarg
pub fn (params &Params) get_default(key string, defval string) !string {
if params.exists(key) {
valuestr := params.get(key)!
return valuestr.trim(' ')
}
return defval
}
// get kwarg return as int
// line:
// arg1 arg2 color:red priority:'incredible' description:'with spaces, lets see if ok
// arg1 is an arg
// description is a kwarg
pub fn (params &Params) get_int(key string) !int {
valuestr := params.get(key)!
return strconv.atoi(valuestr) or {
return error('Parameter ${key} = ${valuestr} is not a valid signed 32-bit integer')
}
}
pub fn (params &Params) get_float(key string) !f64 {
valuestr := params.get(key)!
return strconv.atof64(valuestr) or {
return error('Parameter ${key} = ${valuestr} is not a valid 64-bit float')
}
}
pub fn (params &Params) get_float_default(key string, defval f64) !f64 {
if params.exists(key) {
valuestr := params.get_float(key)!
return valuestr
}
return defval
}
pub fn (params &Params) get_percentage(key string) !f64 {
mut valuestr := params.get(key)!
valuestr = valuestr.replace('%', '')
v := strconv.atof64(valuestr) or {
return error('Parameter ${key} = ${valuestr} is not a valid 64-bit float')
}
if v > 100 || v < 0 {
return error('percentage "${v}" needs to be between 0 and 100')
}
return v / 100
}
pub fn (params &Params) get_percentage_default(key string, defval string) !f64 {
mut v := params.get_default(key, defval)!
v = v.replace('%', '')
v2 := strconv.atof64(v) or {
return error('Parameter ${key} = ${v} is not a valid 64-bit float')
}
if v2 > 100 || v2 < 0 {
return error('percentage "${v2}" needs to be between 0 and 100')
}
return v2 / 100
}
pub fn (params &Params) get_u64(key string) !u64 {
valuestr := params.get(key)!
return strconv.parse_uint(valuestr, 10, 64) or {
return error('Parameter ${key} = ${valuestr} is not a valid unsigned 64-bit integer')
}
}
pub fn (params &Params) get_u64_default(key string, defval u64) !u64 {
if params.exists(key) {
valuestr := params.get_u64(key)!
return valuestr
}
return defval
}
pub fn (params &Params) get_u32(key string) !u32 {
valuestr := params.get(key)!
return u32(strconv.parse_uint(valuestr, 10, 32) or {
return error('Parameter ${key} = ${valuestr} is not a valid unsigned 32-bit integer')
})
}
pub fn (params &Params) get_u32_default(key string, defval u32) !u32 {
if params.exists(key) {
valuestr := params.get_u32(key)!
return valuestr
}
return defval
}
pub fn (params &Params) get_u8(key string) !u8 {
valuestr := params.get(key)!
return u8(strconv.parse_uint(valuestr, 10, 8) or {
return error('Parameter ${key} = ${valuestr} is not a valid unsigned 8-bit integer')
})
}
pub fn (params &Params) get_u8_default(key string, defval u8) !u8 {
if params.exists(key) {
valuestr := params.get_u8(key)!
return valuestr
}
return defval
}
// get kwarg return as int, if it doesnt' exist return a default
// line:
// arg1 arg2 color:red priority:'incredible' description:'with spaces, lets see if ok
// arg1 is an arg
// description is a kwarg
pub fn (params &Params) get_int_default(key string, defval int) !int {
if params.exists(key) {
valuestr := params.get_int(key)!
return valuestr
}
return defval
}
pub fn (params &Params) get_default_true(key string) bool {
mut r := params.get(key) or { '' }
r = texttools.name_fix_no_underscore(r)
if r == '' || r == '1' || r == 'true' || r == 'y' || r == 'yes' {
return true
}
return false
}
pub fn (params &Params) get_default_false(key string) bool {
mut r := params.get(key) or { '' }
r = texttools.name_fix_no_underscore(r)
if r == '' || r == '0' || r == 'false' || r == 'n' || r == 'no' {
return false
}
return true
}
fn matchhashmap(hashmap map[string]string, tofind_ string) string {
tofind := tofind_.to_lower().trim_space()
for key, val in hashmap {
for key2 in key.split(',') {
if key2.to_lower().trim_space() == tofind {
return val
}
}
}
return ''
}
pub fn (params &Params) get_from_hashmap(key_ string, defval string, hashmap map[string]string) !string {
key := texttools.name_fix(key_)
if val := params.get(key) {
r := matchhashmap(hashmap, val)
if r.len > 0 {
return r
}
}
r := matchhashmap(hashmap, defval)
if r.len > 0 {
return r
}
return error('Did not find key:${key} in ${params} with hashmap:${hashmap} and default:${defval}')
}