@@ -70,21 +70,18 @@ func Code(err error) StatusCode {
70
70
case errors .Is (err , context .DeadlineExceeded ):
71
71
return DeadlineExceeded
72
72
default :
73
- if code := StatusCode (drpcerr .Code (err )); code != Unknown {
74
- return code
75
- }
76
-
77
- return Unknown
73
+ return StatusCode (drpcerr .Code (err ))
78
74
}
79
75
}
80
76
81
- // Wrap wraps the error with the provided status code.
82
- func Wrap ( code StatusCode , err error ) error {
77
+ // NamedWrap returns the err error wrapped with a defined monkit class name and status code.
78
+ func NamedWrap ( name string , code StatusCode , err error ) error {
83
79
if err == nil {
84
80
return nil
85
81
}
86
82
87
83
ce := & codeErr {
84
+ name : name ,
88
85
code : code ,
89
86
}
90
87
@@ -96,14 +93,29 @@ func Wrap(code StatusCode, err error) error {
96
93
return ce
97
94
}
98
95
96
+ // NamedError creates and returns an error wrapped with a defined monkit class name and status code.
97
+ func NamedError (name string , code StatusCode , msg string ) error {
98
+ return NamedWrap (name , code , errs .New ("%s" , msg ))
99
+ }
100
+
101
+ // NamedErrorf creates and returns an error wrapped with a defined monkit class name and status code.
102
+ func NamedErrorf (name string , code StatusCode , format string , a ... any ) error {
103
+ return NamedWrap (name , code , errs .New (format , a ... ))
104
+ }
105
+
106
+ // Wrap wraps the error with the provided status code.
107
+ func Wrap (code StatusCode , err error ) error {
108
+ return NamedWrap ("" , code , err )
109
+ }
110
+
99
111
// Error wraps the message with a status code into an error.
100
112
func Error (code StatusCode , msg string ) error {
101
- return Wrap ( code , errs . New ( "%s " , msg ) )
113
+ return NamedError ( " " , code , msg )
102
114
}
103
115
104
116
// Errorf : Error :: fmt.Sprintf : fmt.Sprint.
105
117
func Errorf (code StatusCode , format string , a ... interface {}) error {
106
- return Wrap ( code , errs . New ( format , a ... ) )
118
+ return NamedErrorf ( "" , code , format , a ... )
107
119
}
108
120
109
121
type errsError interface {
@@ -114,11 +126,13 @@ type errsError interface {
114
126
115
127
// codeErr implements error that can work both in grpc and drpc.
116
128
type codeErr struct {
129
+ name string
117
130
errsError
118
131
code StatusCode
119
132
}
120
133
121
134
func (c * codeErr ) Unwrap () error { return c .errsError }
122
135
func (c * codeErr ) Cause () error { return c .errsError }
123
136
124
- func (c * codeErr ) Code () uint64 { return uint64 (c .code ) }
137
+ func (c * codeErr ) Code () uint64 { return uint64 (c .code ) }
138
+ func (c * codeErr ) Name () (string , bool ) { return c .name , c .name != "" }
0 commit comments