@@ -37,6 +37,11 @@ func (e Error) Err(err error) error {
3737return embeddedError {te :e ,e :err ,msg :err .Error ()}
3838}
3939
40+ // Msg sets a custom message for the Err*
41+ func (e Error )Msg (msg string )error {
42+ return embeddedError {e :e ,msg :msg }
43+ }
44+
4045// Wrap an error with message while overriding or adding Type,HTTP,GRPC information
4146// while leaving Is() and As() functionality unchanged
4247func (e Error )Wrap (err error ,msg string )error {
@@ -65,18 +70,35 @@ func (e embeddedError) Error() string {
6570return e .msg
6671}
6772
73+ func (e embeddedError )TypeCode ()string {
74+ var typeCoder TypeCoder
75+ if e .te != nil && stderrors .As (e .te ,& typeCoder ) {
76+ return typeCoder .TypeCode ()
77+ }
78+ if e .e != nil && stderrors .As (e .e ,& typeCoder ) {
79+ return typeCoder .TypeCode ()
80+ }
81+ return ErrUnknown .TypeCode ()
82+ }
83+
6884func (e embeddedError )Is (target error )bool {
6985if e .te != nil && stderrors .Is (e .te ,target ) {
7086return true
7187}
72- return stderrors .Is (e .e ,target )
88+ if e .e != nil && stderrors .Is (e .e ,target ) {
89+ return true
90+ }
91+ return false
7392}
7493
7594func (e embeddedError )As (target interface {})bool {
7695if e .te != nil && stderrors .As (e .te ,target ) {
7796return true
7897}
79- return stderrors .As (e .e ,target )
98+ if e .e != nil && stderrors .As (e .e ,target ) {
99+ return true
100+ }
101+ return false
80102}
81103
82104// Wrap returns an error with msg wrapped with the supplied error
@@ -85,13 +107,13 @@ func Wrap(err error, msg string) error {
85107if err == nil {
86108return nil
87109}
88- if _ , ok := err .(TypeCoder ); ok {
89- return embeddedError { e : err , msg : msg }
90- }
91- return embeddedError {
92- e : err ,
93- te : ErrInternalServerError ,
94- msg :fmt .Sprintf ("%s: %s" ,msg ,err .Error ()),
110+ switch err .(type ) {
111+ case embeddedError :
112+ return embeddedError { e : err , msg : fmt . Sprintf ( "%s: %s" , msg , err . Error ()) }
113+ case TypeCoder :
114+ return embeddedError { te : err ,msg : msg }
115+ default :
116+ return embeddedError { e : err , te : ErrInternalServerError , msg :fmt .Sprintf ("%s: %s" ,msg ,err .Error ())}
95117}
96118}
97119
@@ -101,13 +123,17 @@ func Wrapf(err error, format string, args ...interface{}) error {
101123if err == nil {
102124return nil
103125}
104- if _ ,ok := err .(TypeCoder );ok {
105- return embeddedError {e :err ,msg :fmt .Sprintf (format ,args ... )}
106- }
107- return embeddedError {
108- e :err ,
109- te :ErrInternalServerError ,
110- msg :fmt .Sprintf ("%s: %s" ,fmt .Sprintf (format ,args ... ),err .Error ()),
126+ switch err .(type ) {
127+ case embeddedError :
128+ return embeddedError {e :err ,msg :fmt .Sprintf ("%s: %s" ,fmt .Sprintf (format ,args ... ),err .Error ())}
129+ case TypeCoder :
130+ return embeddedError {te :err ,msg :fmt .Sprintf (format ,args ... )}
131+ default :
132+ return embeddedError {
133+ e :err ,
134+ te :ErrInternalServerError ,
135+ msg :fmt .Sprintf ("%s: %s" ,fmt .Sprintf (format ,args ... ),err .Error ()),
136+ }
111137}
112138}
113139