-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherrors.go
More file actions
92 lines (75 loc) · 2.37 KB
/
errors.go
File metadata and controls
92 lines (75 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package enigma
import (
"errors"
"fmt"
)
var (
ErrInvalidArgument = errors.New("enigma: invalid argument")
ErrInvalidContainer = errors.New("enigma: invalid container")
ErrUnsupportedVersion = errors.New("enigma: unsupported version")
ErrUnsupportedAlgorithm = errors.New("enigma: unsupported algorithm")
ErrNoRecipients = errors.New("enigma: no recipients configured")
ErrWrapFailed = errors.New("enigma: key wrap failed")
ErrUnwrapFailed = errors.New("enigma: key unwrap failed")
ErrDecryptFailed = errors.New("enigma: decrypt failed")
ErrIntegrity = errors.New("enigma: integrity check failed")
ErrNotImplemented = errors.New("enigma: not implemented")
ErrCapabilityMismatch = errors.New("enigma: capability mismatch")
ErrRecipientNotFound = errors.New("enigma: recipient not found")
ErrUnsupportedCapability = errors.New("enigma: unsupported capability")
ErrInvalidKeyReference = errors.New("enigma: invalid key reference")
ErrKeyNotFound = errors.New("enigma: key not found")
ErrKeyAlgorithmMismatch = errors.New("enigma: key algorithm mismatch")
ErrResolveRecipientFailed = errors.New("enigma: recipient resolver failed")
ErrCreateKeyFailed = errors.New("enigma: create key failed")
ErrDeleteKeyFailed = errors.New("enigma: delete key failed")
ErrRotateKeyFailed = errors.New("enigma: rotate key failed")
)
// OpError stores operation context while preserving typed errors via errors.Is/errors.As.
type OpError struct {
Op string
Kind error
Err error
}
func (e *OpError) Error() string {
if e == nil {
return "<nil>"
}
if e.Op == "" {
if e.Err != nil {
return e.Err.Error()
}
if e.Kind != nil {
return e.Kind.Error()
}
return "enigma: error"
}
if e.Err != nil {
return fmt.Sprintf("%s: %v", e.Op, e.Err)
}
if e.Kind != nil {
return fmt.Sprintf("%s: %v", e.Op, e.Kind)
}
return fmt.Sprintf("%s: enigma error", e.Op)
}
func (e *OpError) Unwrap() error {
if e == nil {
return nil
}
return e.Err
}
func (e *OpError) Is(target error) bool {
if e == nil {
return false
}
if e.Kind != nil && target == e.Kind {
return true
}
return errors.Is(e.Err, target)
}
func WrapError(op string, kind error, err error) error {
if err == nil && kind == nil {
return nil
}
return &OpError{Op: op, Kind: kind, Err: err}
}