Upgraded feedkit's handling of stream sources
This commit is contained in:
63
sources/stream_errors.go
Normal file
63
sources/stream_errors.go
Normal file
@@ -0,0 +1,63 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user