1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package errdefs
import (
"errors"
"syscall"
)
type internalErr struct {
error
}
func (internalErr) System() {}
func (err internalErr) Unwrap() error {
return err.error
}
type system interface {
System()
}
var _ system = internalErr{}
func Internal(err error) error {
if err == nil {
return nil
}
return internalErr{err}
}
func IsInternal(err error) bool {
var s system
if errors.As(err, &s) {
return true
}
var errno syscall.Errno
if errors.As(err, &errno) {
if _, ok := isInternalSyscall(errno); ok {
return true
}
}
return false
}
func IsResourceExhausted(err error) bool {
var errno syscall.Errno
if errors.As(err, &errno) {
if v, ok := isInternalSyscall(errno); ok && v {
return v
}
}
return false
}
func isInternalSyscall(err syscall.Errno) (bool, bool) {
v, ok := syscallErrors()[err]
return v, ok
}
|