pub enum DestinationError {
ConnectionError {
message: String,
source: Option<Box<dyn Error + Send + Sync>>,
},
SerializationError {
message: String,
source: Option<Box<dyn Error + Send + Sync>>,
},
WriteError {
message: String,
retryable: bool,
source: Option<Box<dyn Error + Send + Sync>>,
},
ConfigurationError {
message: String,
parameter: Option<String>,
},
CapacityError {
message: String,
utilization: Option<f64>,
retry_after: Option<Duration>,
},
Other {
message: String,
retryable: bool,
source: Option<Box<dyn Error + Send + Sync>>,
},
}Expand description
Errors that can occur when writing to a destination.
Each error variant includes information about whether the operation is retryable and provides context for error handling and observability.
Variants§
ConnectionError
Connection to the destination failed.
This is typically retryable after a backoff period. Examples include:
- Network timeouts
- DNS resolution failures
- Connection refused
- TLS handshake failures
Fields
SerializationError
Failed to serialize events for writing.
This is typically non-retryable as it indicates a data quality issue. Examples include:
- Invalid UTF-8 sequences
- Schema validation failures
- Unsupported data types
Fields
WriteError
Failed to write events to the destination.
Retryability depends on the specific cause. Examples include:
- Quota exceeded (retryable after backoff)
- Permission denied (non-retryable)
- Destination unavailable (retryable)
- Invalid data format (non-retryable)
Fields
ConfigurationError
Invalid destination configuration.
This is non-retryable and indicates a programming or configuration error. Examples include:
- Missing required configuration parameters
- Invalid connection strings
- Conflicting options
Fields
CapacityError
Destination capacity exceeded.
This signals backpressure and should pause writes. Examples include:
- Write buffer full
- Rate limit exceeded
- Disk space exhausted
- Memory limit reached
Fields
Other
A generic error occurred.
Used for errors that don’t fit other categories or for wrapping destination-specific errors.
Implementations§
Source§impl DestinationError
impl DestinationError
Sourcepub fn connection(source: impl Error + Send + Sync + 'static) -> Self
pub fn connection(source: impl Error + Send + Sync + 'static) -> Self
Creates a connection error from any error type.
Sourcepub fn connection_msg(message: impl Into<String>) -> Self
pub fn connection_msg(message: impl Into<String>) -> Self
Creates a connection error with a custom message.
Sourcepub fn serialization(
source: impl Error + Send + Sync + 'static,
message: impl Into<String>,
) -> Self
pub fn serialization( source: impl Error + Send + Sync + 'static, message: impl Into<String>, ) -> Self
Creates a serialization error from any error type.
Sourcepub fn write(
source: impl Error + Send + Sync + 'static,
retryable: bool,
) -> Self
pub fn write( source: impl Error + Send + Sync + 'static, retryable: bool, ) -> Self
Creates a write error with retryability information.
Sourcepub fn write_msg(message: impl Into<String>, retryable: bool) -> Self
pub fn write_msg(message: impl Into<String>, retryable: bool) -> Self
Creates a write error with a custom message.
Sourcepub fn configuration(
message: impl Into<String>,
parameter: Option<String>,
) -> Self
pub fn configuration( message: impl Into<String>, parameter: Option<String>, ) -> Self
Creates a configuration error.
Sourcepub fn capacity(
message: impl Into<String>,
utilization: Option<f64>,
retry_after: Option<Duration>,
) -> Self
pub fn capacity( message: impl Into<String>, utilization: Option<f64>, retry_after: Option<Duration>, ) -> Self
Creates a capacity error with optional metadata.
§Panics
Panics in debug builds if utilization is provided and not in range [0.0, 1.0].
Sourcepub fn other(
source: impl Error + Send + Sync + 'static,
retryable: bool,
) -> Self
pub fn other( source: impl Error + Send + Sync + 'static, retryable: bool, ) -> Self
Creates a generic error.
Sourcepub const fn is_retryable(&self) -> bool
pub const fn is_retryable(&self) -> bool
Returns whether this error is retryable.
This helps callers implement appropriate retry strategies:
- Retryable errors should be retried with exponential backoff
- Non-retryable errors should fail fast or route to dead letter queue
Sourcepub const fn retry_after(&self) -> Option<Duration>
pub const fn retry_after(&self) -> Option<Duration>
Returns suggested wait time before retry, if applicable.
Trait Implementations§
Source§impl Debug for DestinationError
impl Debug for DestinationError
Source§impl Display for DestinationError
impl Display for DestinationError
Source§impl Error for DestinationError
impl Error for DestinationError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Auto Trait Implementations§
impl Freeze for DestinationError
impl !RefUnwindSafe for DestinationError
impl Send for DestinationError
impl Sync for DestinationError
impl Unpin for DestinationError
impl !UnwindSafe for DestinationError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.