Skip to content

Commit

Permalink
util: add cephError as error type for all packages
Browse files Browse the repository at this point in the history
Signed-off-by: Niels de Vos <[email protected]>
  • Loading branch information
nixpanic authored and mergify[bot] committed Oct 14, 2024
1 parent a551a9c commit e2ab470
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions internal/errutil/error.go
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)),
}
}

0 comments on commit e2ab470

Please sign in to comment.