mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-25 05:52:50 -05:00
114 lines
2.5 KiB
Go
114 lines
2.5 KiB
Go
package params
|
|
|
|
import "fmt"
|
|
|
|
func Get[T any](params map[string]any, key string) (T, error) {
|
|
val, ok := params[key].(T)
|
|
if !ok {
|
|
var zero T
|
|
return zero, fmt.Errorf("missing or invalid '%s' parameter", key)
|
|
}
|
|
return val, nil
|
|
}
|
|
|
|
func GetOpt[T any](params map[string]any, key string, def T) T {
|
|
if val, ok := params[key].(T); ok {
|
|
return val
|
|
}
|
|
return def
|
|
}
|
|
|
|
func String(params map[string]any, key string) (string, error) {
|
|
return Get[string](params, key)
|
|
}
|
|
|
|
func StringNonEmpty(params map[string]any, key string) (string, error) {
|
|
val, err := Get[string](params, key)
|
|
if err != nil || val == "" {
|
|
return "", fmt.Errorf("missing or invalid '%s' parameter", key)
|
|
}
|
|
return val, nil
|
|
}
|
|
|
|
func StringOpt(params map[string]any, key string, def string) string {
|
|
return GetOpt(params, key, def)
|
|
}
|
|
|
|
func Int(params map[string]any, key string) (int, error) {
|
|
val, err := Get[float64](params, key)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return int(val), nil
|
|
}
|
|
|
|
func IntOpt(params map[string]any, key string, def int) int {
|
|
if val, ok := params[key].(float64); ok {
|
|
return int(val)
|
|
}
|
|
return def
|
|
}
|
|
|
|
func Float(params map[string]any, key string) (float64, error) {
|
|
return Get[float64](params, key)
|
|
}
|
|
|
|
func FloatOpt(params map[string]any, key string, def float64) float64 {
|
|
return GetOpt(params, key, def)
|
|
}
|
|
|
|
func Bool(params map[string]any, key string) (bool, error) {
|
|
return Get[bool](params, key)
|
|
}
|
|
|
|
func BoolOpt(params map[string]any, key string, def bool) bool {
|
|
return GetOpt(params, key, def)
|
|
}
|
|
|
|
func StringMap(params map[string]any, key string) (map[string]string, error) {
|
|
rawMap, err := Get[map[string]any](params, key)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result := make(map[string]string)
|
|
for k, v := range rawMap {
|
|
if str, ok := v.(string); ok {
|
|
result[k] = str
|
|
}
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func StringMapOpt(params map[string]any, key string) map[string]string {
|
|
rawMap, ok := params[key].(map[string]any)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
result := make(map[string]string)
|
|
for k, v := range rawMap {
|
|
if str, ok := v.(string); ok {
|
|
result[k] = str
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Any(params map[string]any, key string) (any, bool) {
|
|
val, ok := params[key]
|
|
return val, ok
|
|
}
|
|
|
|
func AnyMap(params map[string]any, key string) (map[string]any, bool) {
|
|
val, ok := params[key].(map[string]any)
|
|
return val, ok
|
|
}
|
|
|
|
func StringAlt(params map[string]any, keys ...string) (string, bool) {
|
|
for _, key := range keys {
|
|
if val, ok := params[key].(string); ok {
|
|
return val, true
|
|
}
|
|
}
|
|
return "", false
|
|
}
|