-
Notifications
You must be signed in to change notification settings - Fork 257
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
util: add cephError as error type for all packages
Signed-off-by: Niels de Vos <[email protected]>
- Loading branch information
1 parent
a551a9c
commit e2ab470
Showing
1 changed file
with
57 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package errutil | ||
|
||
type cephErrno int | ||
|
||
// Error returns the error string for the errno. | ||
func (e cephErrno) Error() string { | ||
_, strerror := FormatErrno(int(e)) | ||
return strerror | ||
} | ||
|
||
// cephError combines the source/component that generated the error and its | ||
// related errno. | ||
type cephError struct { | ||
source string | ||
errno cephErrno | ||
} | ||
|
||
// Error returns the error string with the source and errno. | ||
func (e cephError) Error() string { | ||
return FormatErrorCode(e.source, int(e.errno)) | ||
} | ||
|
||
// Unwrap returns an error without the source. | ||
func (e cephError) Unwrap() error { | ||
if e.errno == 0 { | ||
return nil | ||
} | ||
|
||
return e.errno | ||
} | ||
|
||
// Is checks if both errors have the same errno. | ||
func (e cephError) Is(err error) bool { | ||
ce, ok := err.(cephError) | ||
if !ok { | ||
return false | ||
} | ||
|
||
return e.errno == ce.errno | ||
} | ||
|
||
// ErrorCode returns the errno of the error. | ||
func (e cephError) ErrorCode() int { | ||
return int(e.errno) | ||
} | ||
|
||
// GetError returns a new error that can be compared with errors.Is(), | ||
// independently of the source/component of the error. | ||
func GetError(source string, e int) error { | ||
if e == 0 { | ||
return nil | ||
} | ||
return cephError{ | ||
source: source, | ||
errno: cephErrno(int(e)), | ||
} | ||
} |