71 lines
1.1 KiB
Go
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
|
|
}
|
|
}
|
|
}
|