summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params.go113
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params_test.go154
2 files changed, 267 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params.go
new file mode 100644
index 0000000..1f592c6
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params.go
@@ -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
+}
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params_test.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params_test.go
new file mode 100644
index 0000000..99847ff
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/params/params_test.go
@@ -0,0 +1,154 @@
+package params
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestGet(t *testing.T) {
+ p := map[string]any{"key": "value"}
+ val, err := Get[string](p, "key")
+ assert.NoError(t, err)
+ assert.Equal(t, "value", val)
+
+ _, err = Get[string](p, "missing")
+ assert.Error(t, err)
+
+ _, err = Get[int](p, "key")
+ assert.Error(t, err)
+}
+
+func TestGetOpt(t *testing.T) {
+ p := map[string]any{"key": "value"}
+ assert.Equal(t, "value", GetOpt(p, "key", "default"))
+ assert.Equal(t, "default", GetOpt(p, "missing", "default"))
+}
+
+func TestString(t *testing.T) {
+ p := map[string]any{"s": "hello", "n": 123}
+ val, err := String(p, "s")
+ assert.NoError(t, err)
+ assert.Equal(t, "hello", val)
+
+ _, err = String(p, "n")
+ assert.Error(t, err)
+}
+
+func TestStringNonEmpty(t *testing.T) {
+ p := map[string]any{"s": "hello", "empty": ""}
+ val, err := StringNonEmpty(p, "s")
+ assert.NoError(t, err)
+ assert.Equal(t, "hello", val)
+
+ _, err = StringNonEmpty(p, "empty")
+ assert.Error(t, err)
+
+ _, err = StringNonEmpty(p, "missing")
+ assert.Error(t, err)
+}
+
+func TestStringOpt(t *testing.T) {
+ p := map[string]any{"s": "hello"}
+ assert.Equal(t, "hello", StringOpt(p, "s", "default"))
+ assert.Equal(t, "default", StringOpt(p, "missing", "default"))
+}
+
+func TestInt(t *testing.T) {
+ p := map[string]any{"n": float64(42), "s": "str"}
+ val, err := Int(p, "n")
+ assert.NoError(t, err)
+ assert.Equal(t, 42, val)
+
+ _, err = Int(p, "s")
+ assert.Error(t, err)
+}
+
+func TestIntOpt(t *testing.T) {
+ p := map[string]any{"n": float64(42)}
+ assert.Equal(t, 42, IntOpt(p, "n", 0))
+ assert.Equal(t, 99, IntOpt(p, "missing", 99))
+}
+
+func TestFloat(t *testing.T) {
+ p := map[string]any{"f": 3.14, "s": "str"}
+ val, err := Float(p, "f")
+ assert.NoError(t, err)
+ assert.Equal(t, 3.14, val)
+
+ _, err = Float(p, "s")
+ assert.Error(t, err)
+}
+
+func TestFloatOpt(t *testing.T) {
+ p := map[string]any{"f": 3.14}
+ assert.Equal(t, 3.14, FloatOpt(p, "f", 0))
+ assert.Equal(t, 1.0, FloatOpt(p, "missing", 1.0))
+}
+
+func TestBool(t *testing.T) {
+ p := map[string]any{"b": true, "s": "str"}
+ val, err := Bool(p, "b")
+ assert.NoError(t, err)
+ assert.True(t, val)
+
+ _, err = Bool(p, "s")
+ assert.Error(t, err)
+}
+
+func TestBoolOpt(t *testing.T) {
+ p := map[string]any{"b": true}
+ assert.True(t, BoolOpt(p, "b", false))
+ assert.True(t, BoolOpt(p, "missing", true))
+}
+
+func TestStringMap(t *testing.T) {
+ p := map[string]any{
+ "m": map[string]any{"a": "1", "b": "2", "c": 3},
+ }
+ val, err := StringMap(p, "m")
+ assert.NoError(t, err)
+ assert.Equal(t, map[string]string{"a": "1", "b": "2"}, val)
+
+ _, err = StringMap(p, "missing")
+ assert.Error(t, err)
+}
+
+func TestStringMapOpt(t *testing.T) {
+ p := map[string]any{
+ "m": map[string]any{"a": "1"},
+ }
+ assert.Equal(t, map[string]string{"a": "1"}, StringMapOpt(p, "m"))
+ assert.Nil(t, StringMapOpt(p, "missing"))
+}
+
+func TestAny(t *testing.T) {
+ p := map[string]any{"k": 123}
+ val, ok := Any(p, "k")
+ assert.True(t, ok)
+ assert.Equal(t, 123, val)
+
+ _, ok = Any(p, "missing")
+ assert.False(t, ok)
+}
+
+func TestAnyMap(t *testing.T) {
+ inner := map[string]any{"nested": true}
+ p := map[string]any{"m": inner}
+ val, ok := AnyMap(p, "m")
+ assert.True(t, ok)
+ assert.Equal(t, inner, val)
+
+ _, ok = AnyMap(p, "missing")
+ assert.False(t, ok)
+}
+
+func TestStringAlt(t *testing.T) {
+ p := map[string]any{"b": "found"}
+ val, ok := StringAlt(p, "a", "b", "c")
+ assert.True(t, ok)
+ assert.Equal(t, "found", val)
+
+ _, ok = StringAlt(p, "x", "y")
+ assert.False(t, ok)
+}