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) }