Merge remote-tracking branch 'origin/rpcerr' into space-sync

This commit is contained in:
mcrakhman 2022-09-27 21:07:19 +02:00
commit 53af9c6c1e
No known key found for this signature in database
GPG Key ID: DED12CFEF5B8396B

View File

@ -0,0 +1,51 @@
package rpcerr
import (
"errors"
"fmt"
"storj.io/drpc/drpcerr"
)
var (
Unexpected = RegisterErr(errors.New("unexpected"), 1)
Closed = RegisterErr(errors.New("closed"), 2)
)
var (
errsMap = make(map[uint64]error)
)
func RegisterErr(err error, code uint64) error {
if e, ok := errsMap[code]; ok {
panic(fmt.Errorf("attempt to register error with exiswting code: %d; registered error: %v", code, e))
}
errWithCode := drpcerr.WithCode(err, code)
errsMap[code] = errWithCode
return errWithCode
}
func Err(code uint64) error {
err, ok := errsMap[code]
if !ok {
return drpcerr.WithCode(fmt.Errorf("unexpected error, code: %d", code), code)
}
return err
}
func Unwrap(e error) error {
code := drpcerr.Code(e)
if code == 0 {
return e
}
err, ok := errsMap[code]
if !ok {
return drpcerr.WithCode(fmt.Errorf("unexpected error: %v; code: %d", err, code), code)
}
return err
}
type ErrGroup int64
func (g ErrGroup) Register(err error, code uint64) error {
return RegisterErr(err, uint64(g)+code)
}