summaryrefslogtreecommitdiff
path: root/teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-11-02 15:27:18 +0800
committerMistivia <i@mistivia.com>2025-11-02 15:27:18 +0800
commite9c24f4af7ed56760f6db7941827d09f6db9020b (patch)
tree62128c43b883ce5e3148113350978755779bb5de /teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils
parent58d5e7cfda4781d8a57ec52aefd02983835c301a (diff)
add matterbridge
Diffstat (limited to 'teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils')
-rw-r--r--teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils/jsonutils/json.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils/jsonutils/json.go b/teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils/jsonutils/json.go
new file mode 100644
index 0000000..9d5e787
--- /dev/null
+++ b/teleirc/matterbridge/vendor/github.com/mattermost/mattermost-server/v5/utils/jsonutils/json.go
@@ -0,0 +1,56 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See LICENSE.txt for license information.
+
+package jsonutils
+
+import (
+ "bytes"
+ "encoding/json"
+
+ "github.com/pkg/errors"
+)
+
+type HumanizedJSONError struct {
+ Err error
+ Line int
+ Character int
+}
+
+func (e *HumanizedJSONError) Error() string {
+ return e.Err.Error()
+}
+
+// HumanizeJSONError extracts error offsets and annotates the error with useful context
+func HumanizeJSONError(err error, data []byte) error {
+ if syntaxError, ok := err.(*json.SyntaxError); ok {
+ return NewHumanizedJSONError(syntaxError, data, syntaxError.Offset)
+ } else if unmarshalError, ok := err.(*json.UnmarshalTypeError); ok {
+ return NewHumanizedJSONError(unmarshalError, data, unmarshalError.Offset)
+ } else {
+ return err
+ }
+}
+
+func NewHumanizedJSONError(err error, data []byte, offset int64) *HumanizedJSONError {
+ if err == nil {
+ return nil
+ }
+
+ if offset < 0 || offset > int64(len(data)) {
+ return &HumanizedJSONError{
+ Err: errors.Wrapf(err, "invalid offset %d", offset),
+ }
+ }
+
+ lineSep := []byte{'\n'}
+
+ line := bytes.Count(data[:offset], lineSep) + 1
+ lastLineOffset := bytes.LastIndex(data[:offset], lineSep)
+ character := int(offset) - (lastLineOffset + 1) + 1
+
+ return &HumanizedJSONError{
+ Line: line,
+ Character: character,
+ Err: errors.Wrapf(err, "parsing error at line %d, character %d", line, character),
+ }
+}