mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-28 07:22:50 -05:00
core/server: refactory to use shared params/request structs
This commit is contained in:
113
core/internal/server/params/params.go
Normal file
113
core/internal/server/params/params.go
Normal file
@@ -0,0 +1,113 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user