Skip to content

Commit bf06c45

Browse files
committed
badjson: Add UnmarshalExtended
1 parent 35e7014 commit bf06c45

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

common/json/unmarshal.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package json
2+
3+
import (
4+
"bytes"
5+
"strings"
6+
7+
"github.com/sagernet/sing/common"
8+
E "github.com/sagernet/sing/common/exceptions"
9+
)
10+
11+
func UnmarshalExtended[T any](content []byte) (T, error) {
12+
decoder := NewDecoder(NewCommentFilter(bytes.NewReader(content)))
13+
var value T
14+
err := decoder.Decode(&value)
15+
if err == nil {
16+
return value, err
17+
}
18+
if syntaxError, isSyntaxError := err.(*SyntaxError); isSyntaxError {
19+
prefix := string(content[:syntaxError.Offset])
20+
row := strings.Count(prefix, "\n") + 1
21+
column := len(prefix) - strings.LastIndex(prefix, "\n") - 1
22+
return common.DefaultValue[T](), E.Extend(syntaxError, "row ", row, ", column ", column)
23+
}
24+
return common.DefaultValue[T](), err
25+
}

0 commit comments

Comments
 (0)