summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-errors/v2/value.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2023-01-17 11:25:13 +0000
committerLibravatar GitHub <noreply@github.com>2023-01-17 11:25:13 +0000
commita6c6bdb34ab668ab810308e63325a891e404e434 (patch)
tree12be85a203123dbaa602e8173343c015d5149047 /vendor/codeberg.org/gruf/go-errors/v2/value.go
parent[bugfix] Parse video metadata more accurately; allow Range in fileserver (#1342) (diff)
downloadgotosocial-a6c6bdb34ab668ab810308e63325a891e404e434.tar.xz
[chore]: Bump codeberg.org/gruf/go-errors/v2 from 2.0.2 to 2.1.1 (#1346)
Bumps codeberg.org/gruf/go-errors/v2 from 2.0.2 to 2.1.1. --- updated-dependencies: - dependency-name: codeberg.org/gruf/go-errors/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/codeberg.org/gruf/go-errors/v2/value.go')
-rw-r--r--vendor/codeberg.org/gruf/go-errors/v2/value.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/codeberg.org/gruf/go-errors/v2/value.go b/vendor/codeberg.org/gruf/go-errors/v2/value.go
new file mode 100644
index 000000000..6a1f64451
--- /dev/null
+++ b/vendor/codeberg.org/gruf/go-errors/v2/value.go
@@ -0,0 +1,54 @@
+package errors
+
+// WithValue wraps err to store given key-value pair, accessible via Value() function.
+func WithValue(err error, key any, value any) error {
+ if err == nil {
+ panic("nil error")
+ }
+ return &errWithValue{
+ err: err,
+ key: key,
+ val: value,
+ }
+}
+
+// Value searches for value stored under given key in error chain.
+func Value(err error, key any) any {
+ var e *errWithValue
+
+ if !As(err, &e) {
+ return nil
+ }
+
+ return e.Value(key)
+}
+
+type errWithValue struct {
+ err error
+ key any
+ val any
+}
+
+func (e *errWithValue) Error() string {
+ return e.err.Error()
+}
+
+func (e *errWithValue) Is(target error) bool {
+ return e.err == target
+}
+
+func (e *errWithValue) Unwrap() error {
+ return Unwrap(e.err)
+}
+
+func (e *errWithValue) Value(key any) any {
+ for {
+ if key == e.key {
+ return e.val
+ }
+
+ if !As(e.err, &e) {
+ return nil
+ }
+ }
+}