Browse Source

Remove go-json

世界 3 years ago
parent
commit
0347a7c038
10 changed files with 14 additions and 40 deletions
  1. 7 2
      common/badjson/array.go
  2. 4 3
      common/badjson/object.go
  3. 0 20
      common/json/gojson.go
  4. 0 2
      common/json/std.go
  5. 0 1
      go.mod
  6. 0 2
      go.sum
  7. 2 4
      option/dns.go
  8. 1 3
      option/json.go
  9. 0 1
      test/go.mod
  10. 0 2
      test/go.sum

+ 7 - 2
common/badjson/array.go

@@ -2,6 +2,7 @@ package badjson
 
 import (
 	"bytes"
+	"reflect"
 
 	"github.com/sagernet/sing-box/common/json"
 	E "github.com/sagernet/sing/common/exceptions"
@@ -36,11 +37,15 @@ func (a *JSONArray[T]) UnmarshalJSON(content []byte) error {
 
 func (a *JSONArray[T]) decodeJSON(decoder *json.Decoder) error {
 	for decoder.More() {
-		var item T
-		err := decoder.Decode(&item)
+		value, err := decodeJSON(decoder)
 		if err != nil {
 			return err
 		}
+		item, ok := value.(T)
+		if !ok {
+			var defValue T
+			return E.New("can't cast ", value, " to ", reflect.TypeOf(defValue))
+		}
 		*a = append(*a, item)
 	}
 	return nil

+ 4 - 3
common/badjson/object.go

@@ -49,7 +49,7 @@ func (m *JSONObject) UnmarshalJSON(content []byte) error {
 	}
 	err = m.decodeJSON(decoder)
 	if err != nil {
-		return err
+		return E.Cause(err, "decode json object content")
 	}
 	objectEnd, err := decoder.Token()
 	if err != nil {
@@ -63,14 +63,15 @@ func (m *JSONObject) UnmarshalJSON(content []byte) error {
 func (m *JSONObject) decodeJSON(decoder *json.Decoder) error {
 	for decoder.More() {
 		var entryKey string
-		err := decoder.Decode(&entryKey)
+		keyToken, err := decoder.Token()
 		if err != nil {
 			return err
 		}
+		entryKey = keyToken.(string)
 		var entryValue any
 		entryValue, err = decodeJSON(decoder)
 		if err != nil {
-			return err
+			return E.Cause(err, "decode value for ", entryKey)
 		}
 		m.Put(entryKey, entryValue)
 	}

+ 0 - 20
common/json/gojson.go

@@ -1,20 +0,0 @@
-//go:build !with_std_json
-
-package json
-
-import "github.com/goccy/go-json"
-
-var (
-	Marshal    = json.Marshal
-	Unmarshal  = json.Unmarshal
-	NewEncoder = json.NewEncoder
-	NewDecoder = json.NewDecoder
-)
-
-type (
-	Encoder     = json.Encoder
-	Decoder     = json.Decoder
-	Token       = json.Token
-	Delim       = json.Delim
-	SyntaxError = json.SyntaxError
-)

+ 0 - 2
common/json/std.go

@@ -1,5 +1,3 @@
-//go:build with_std_json
-
 package json
 
 import "encoding/json"

+ 0 - 1
go.mod

@@ -8,7 +8,6 @@ require (
 	github.com/go-chi/chi/v5 v5.0.7
 	github.com/go-chi/cors v1.2.1
 	github.com/go-chi/render v1.0.1
-	github.com/goccy/go-json v0.9.10
 	github.com/gofrs/uuid v4.2.0+incompatible
 	github.com/gorilla/websocket v1.5.0
 	github.com/logrusorgru/aurora v2.0.3+incompatible

+ 0 - 2
go.sum

@@ -40,8 +40,6 @@ github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
-github.com/goccy/go-json v0.9.10 h1:hCeNmprSNLB8B8vQKWl6DpuH0t60oEs+TAk9a7CScKc=
-github.com/goccy/go-json v0.9.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
 github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=

+ 2 - 4
option/dns.go

@@ -58,12 +58,10 @@ func (r *DNSRule) UnmarshalJSON(bytes []byte) error {
 	if err != nil {
 		return err
 	}
-	if r.Type == "" {
-		r.Type = C.RuleTypeDefault
-	}
 	var v any
 	switch r.Type {
-	case C.RuleTypeDefault:
+	case "", C.RuleTypeDefault:
+		r.Type = C.RuleTypeDefault
 		v = &r.DefaultOptions
 	case C.RuleTypeLogical:
 		v = &r.LogicalOptions

+ 1 - 3
option/json.go

@@ -35,9 +35,7 @@ func MergeObjects(objects ...any) (*badjson.JSONObject, error) {
 }
 
 func MarshallObjects(objects ...any) ([]byte, error) {
-	objects = common.Filter(objects, func(v any) bool {
-		return v != nil
-	})
+	objects = common.FilterNotNil(objects)
 	if len(objects) == 1 {
 		return json.Marshal(objects[0])
 	}

+ 0 - 1
test/go.mod

@@ -28,7 +28,6 @@ require (
 	github.com/go-chi/cors v1.2.1 // indirect
 	github.com/go-chi/render v1.0.1 // indirect
 	github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
-	github.com/goccy/go-json v0.9.10 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/google/btree v1.0.1 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect

+ 0 - 2
test/go.sum

@@ -53,8 +53,6 @@ github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
-github.com/goccy/go-json v0.9.10 h1:hCeNmprSNLB8B8vQKWl6DpuH0t60oEs+TAk9a7CScKc=
-github.com/goccy/go-json v0.9.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
 github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=