58 lines
876 B
Go
58 lines
876 B
Go
package payload
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// Error is payload error.
|
|
type Error interface {
|
|
Error() string
|
|
Temporary() bool
|
|
}
|
|
|
|
// OpError is operation error.
|
|
type OpError struct {
|
|
Op string
|
|
Err error
|
|
}
|
|
|
|
func newOpError(op string, err error) error {
|
|
return &OpError{
|
|
Op: op,
|
|
Err: err,
|
|
}
|
|
}
|
|
|
|
func (e *OpError) Error() string {
|
|
return fmt.Sprintf("%s: %s", e.Op, e.Err.Error())
|
|
}
|
|
|
|
// Temporary returns true if error can retry.
|
|
func (e *OpError) Temporary() bool {
|
|
if oe, ok := e.Err.(Error); ok {
|
|
return oe.Temporary()
|
|
}
|
|
return false
|
|
}
|
|
|
|
type retryError struct {
|
|
err string
|
|
}
|
|
|
|
func (e retryError) Error() string {
|
|
return e.err
|
|
}
|
|
|
|
func (e retryError) Temporary() bool {
|
|
return true
|
|
}
|
|
|
|
var errPaused = retryError{"paused"}
|
|
|
|
var errTimeout = errors.New("timeout")
|
|
|
|
var errInvalidPayload = errors.New("invalid payload")
|
|
|
|
var errOverlap = errors.New("overlap")
|