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
|
package httperror
import (
"context"
"errors"
"io"
"os"
)
type temporary interface {
Temporary() bool
}
func Temporary(err error) bool {
if err == nil {
return false
}
if e, ok := err.(temporary); ok && e.Temporary() {
return true
}
switch {
case errors.As(err, new(*os.SyscallError)):
return true
case errors.Is(err, context.Canceled):
return true
case errors.Is(err, context.DeadlineExceeded):
return true
case errors.Is(err, io.ErrUnexpectedEOF):
return true
}
return false
}
|