@@ -9,11 +9,11 @@ import (
99 "github.com/sagernet/sing/common/x/linkedhashmap"
1010)
1111
12- type TypedMap [T any ] struct {
13- linkedhashmap.Map [string , T ]
12+ type TypedMap [K comparable , V any ] struct {
13+ linkedhashmap.Map [K , V ]
1414}
1515
16- func (m TypedMap [T ]) MarshalJSON () ([]byte , error ) {
16+ func (m TypedMap [K , V ]) MarshalJSON () ([]byte , error ) {
1717 buffer := new (bytes.Buffer )
1818 buffer .WriteString ("{" )
1919 items := m .Entries ()
@@ -38,7 +38,7 @@ func (m TypedMap[T]) MarshalJSON() ([]byte, error) {
3838 return buffer .Bytes (), nil
3939}
4040
41- func (m * TypedMap [T ]) UnmarshalJSON (content []byte ) error {
41+ func (m * TypedMap [K , V ]) UnmarshalJSON (content []byte ) error {
4242 decoder := json .NewDecoder (bytes .NewReader (content ))
4343 m .Clear ()
4444 objectStart , err := decoder .Token ()
@@ -60,15 +60,14 @@ func (m *TypedMap[T]) UnmarshalJSON(content []byte) error {
6060 return nil
6161}
6262
63- func (m * TypedMap [T ]) decodeJSON (decoder * json.Decoder ) error {
63+ func (m * TypedMap [K , V ]) decodeJSON (decoder * json.Decoder ) error {
6464 for decoder .More () {
65- var entryKey string
66- keyToken , err := decoder .Token ( )
65+ var entryKey K
66+ err := decoder .Decode ( & entryKey )
6767 if err != nil {
6868 return err
6969 }
70- entryKey = keyToken .(string )
71- var entryValue T
70+ var entryValue V
7271 err = decoder .Decode (& entryValue )
7372 if err != nil {
7473 return err
0 commit comments