64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package sources
|
|
|
|
import "errors"
|
|
|
|
type streamRetryableError struct {
|
|
err error
|
|
}
|
|
|
|
func (e *streamRetryableError) Error() string {
|
|
if e.err == nil {
|
|
return "retryable stream error"
|
|
}
|
|
return e.err.Error()
|
|
}
|
|
|
|
func (e *streamRetryableError) Unwrap() error { return e.err }
|
|
|
|
type streamFatalError struct {
|
|
err error
|
|
}
|
|
|
|
func (e *streamFatalError) Error() string {
|
|
if e.err == nil {
|
|
return "fatal stream error"
|
|
}
|
|
return e.err.Error()
|
|
}
|
|
|
|
func (e *streamFatalError) Unwrap() error { return e.err }
|
|
|
|
// StreamRetryable marks a stream-source exit as retryable.
|
|
func StreamRetryable(err error) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
return &streamRetryableError{err: err}
|
|
}
|
|
|
|
// StreamFatal marks a stream-source exit as fatal.
|
|
func StreamFatal(err error) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
return &streamFatalError{err: err}
|
|
}
|
|
|
|
// IsStreamRetryable reports whether err contains a retryable stream marker.
|
|
func IsStreamRetryable(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
var target *streamRetryableError
|
|
return errors.As(err, &target)
|
|
}
|
|
|
|
// IsStreamFatal reports whether err contains a fatal stream marker.
|
|
func IsStreamFatal(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
var target *streamFatalError
|
|
return errors.As(err, &target)
|
|
}
|