/
errors.go
53 lines (46 loc) · 1.11 KB
/
errors.go
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
package cloudresourcemanager
import (
"errors"
"fmt"
)
// ErrPermissionDenied is 権限エラーの時に返す
var ErrPermissionDenied = &Error{
Code: "PermissionDenied",
Message: "permission denied",
KV: map[string]interface{}{},
}
// Error is Error情報を保持する struct
type Error struct {
Code string
Message string
KV map[string]interface{}
err error
}
// Error is error interface func
func (e *Error) Error() string {
if e.KV == nil || len(e.KV) < 1 {
return fmt.Sprintf("%s: %s", e.Code, e.Message)
}
return fmt.Sprintf("%s: %s: attribute:%+v", e.Code, e.Message, e.KV)
}
// Is is err equal check
func (e *Error) Is(target error) bool {
var appErr *Error
if !errors.As(target, &appErr) {
return false
}
return e.Code == appErr.Code
}
// Unwrap is return unwrap error
func (e *Error) Unwrap() error {
return e.err
}
// NewErrPermissionDenied is return ErrPermissionDenied
func NewErrPermissionDenied(message string, kv map[string]interface{}, err error) error {
return &Error{
Code: ErrPermissionDenied.Code,
Message: message,
KV: kv,
err: err,
}
}