Skip to content

Commit a0cd94b

Browse files
committed
badjson: Refactor TypedMap to handle multiple key types
1 parent 9cc051c commit a0cd94b

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

common/json/badjson/typed.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)