1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-01-06 00:18:50 +02:00

adde json map Get and Set helpers

This commit is contained in:
Gani Georgiev 2023-06-20 22:57:51 +03:00
parent ed4304dc30
commit 1adcfcc03b
2 changed files with 56 additions and 0 deletions

View File

@ -21,6 +21,22 @@ func (m JsonMap) MarshalJSON() ([]byte, error) {
return json.Marshal(alias(m))
}
// Get retrieves a single value from the current JsonMap.
//
// This helper was added primarily to assist the goja integration since custom map types
// don't have direct access to the map keys (https://pkg.go.dev/github.com/dop251/goja#hdr-Maps_with_methods).
func (m JsonMap) Get(key string) any {
return m[key]
}
// Set sets a single value in the current JsonMap.
//
// This helper was added primarily to assist the goja integration since custom map types
// don't have direct access to the map keys (https://pkg.go.dev/github.com/dop251/goja#hdr-Maps_with_methods).
func (m JsonMap) Set(key string, value any) {
m[key] = value
}
// Value implements the [driver.Valuer] interface.
func (m JsonMap) Value() (driver.Value, error) {
data, err := json.Marshal(m)

View File

@ -30,6 +30,46 @@ func TestJsonMapMarshalJSON(t *testing.T) {
}
}
func TestJsonMapGet(t *testing.T) {
scenarios := []struct {
json types.JsonMap
key string
expected any
}{
{nil, "test", nil},
{types.JsonMap{"test": 123}, "test", 123},
{types.JsonMap{"test": 123}, "missing", nil},
}
for i, s := range scenarios {
result := s.json.Get(s.key)
if result != s.expected {
t.Errorf("(%d) Expected %s, got %v", i, s.expected, result)
}
}
}
func TestJsonMapSet(t *testing.T) {
scenarios := []struct {
key string
value any
}{
{"a", nil},
{"a", 123},
{"b", "test"},
}
for i, s := range scenarios {
j := types.JsonMap{}
j.Set(s.key, s.value)
if v := j[s.key]; v != s.value {
t.Errorf("(%d) Expected %s, got %v", i, s.value, v)
}
}
}
func TestJsonMapValue(t *testing.T) {
scenarios := []struct {
json types.JsonMap