From a0169f2f22acda6917ca558c9497f08e2f55c54b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Tue, 12 Dec 2023 20:13:52 +0800 Subject: [PATCH] badjson: Add UnmarshalExtended --- common/json/unmarshal.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 common/json/unmarshal.go diff --git a/common/json/unmarshal.go b/common/json/unmarshal.go new file mode 100644 index 000000000..045affb86 --- /dev/null +++ b/common/json/unmarshal.go @@ -0,0 +1,24 @@ +package json + +import ( + "bytes" + "strings" + + E "github.com/sagernet/sing/common/exceptions" +) + +func UnmarshalExtended[T any](content []byte) error { + decoder := NewDecoder(NewCommentFilter(bytes.NewReader(content))) + var value T + err := decoder.Decode(&value) + if err == nil { + return nil + } + if syntaxError, isSyntaxError := err.(*SyntaxError); isSyntaxError { + prefix := string(content[:syntaxError.Offset]) + row := strings.Count(prefix, "\n") + 1 + column := len(prefix) - strings.LastIndex(prefix, "\n") - 1 + return E.Extend(syntaxError, "row ", row, ", column ", column) + } + return err +}