43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package errors
|
|
|
|
type withContext interface {
|
|
Set(string, interface{})
|
|
Get(string) interface{}
|
|
Del(string)
|
|
Context() map[string]interface{}
|
|
}
|
|
|
|
// ErrorSetContext sets a value in the error's context. If the error has not
|
|
// been wrapped, it does nothing.
|
|
func SetContext(err error, key string, value interface{}) {
|
|
if e, ok := err.(withContext); ok {
|
|
e.Set(key, value)
|
|
}
|
|
}
|
|
|
|
// ErrorGetContext gets a value from the error's context. If the error has not
|
|
// been wrapped, it returns an empty string.
|
|
func GetContext(err error, key string) interface{} {
|
|
if e, ok := err.(withContext); ok {
|
|
return e.Get(key)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// ErrorDelContext removes a value from the error's context. If the error has
|
|
// not been wrapped, it does nothing.
|
|
func DelContext(err error, key string) {
|
|
if e, ok := err.(withContext); ok {
|
|
e.Del(key)
|
|
}
|
|
}
|
|
|
|
// ErrorContext returns the context map for an error if it is a wrappedError.
|
|
// If it is not a wrappedError it will return an empty map.
|
|
func Context(err error) map[string]interface{} {
|
|
if e, ok := err.(withContext); ok {
|
|
return e.Context()
|
|
}
|
|
return nil
|
|
}
|