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 } } }