auth/jwt/map.go
2025-01-11 00:42:32 +03:00

71 lines
1.1 KiB
Go

package jwt
import "encoding/json"
type Map struct {
v map[string]json.RawMessage
}
func (m *Map) UnmarshalJSON(buf []byte) error {
if m.v == nil {
m.v = map[string]json.RawMessage{}
}
return json.Unmarshal(buf, &m.v)
}
func (m *Map) MarshalJSON() ([]byte, error) {
if m.v == nil || len(m.v) < 1 {
return nil, ErrPayloadEmpty
}
return json.Marshal(m.v)
}
// AppendArg добавляет аргумент
func (m *Map) AppendArg(key string, val any) error {
if key == "" {
return ErrKeyEmpty
}
var err error
m.v[key], err = json.Marshal(val)
return err
}
// AppendArgs добавляет аргументы
func (m *Map) AppendArgs(kv map[string]any) error {
var err error
for k, v := range kv {
if k == "" {
return ErrKeyEmpty
}
m.v[k], err = json.Marshal(v)
if err != nil {
return err
}
}
return nil
}
func (m *Map) Unmarshal(key string, val any) error {
buf, is := m.v[key]
if !is {
return ErrKeyNotExist
}
return json.Unmarshal(buf, val)
}
func (m *Map) Range(f func(key string, val any) bool) {
for k := range m.v {
var val any
m.Unmarshal(k, &val)
if !f(k, val) {
break
}
}
}