Skip to main content

Classify

Trait Classify 

Source
pub trait Classify {
    // Required method
    fn kind(&self) -> FailureKind;
}
Expand description

Implemented by every crate::Publisher::Error and OutboxStore::Error (reliar-outbox) so a dispatcher can decide retry vs. dead without a downcast. Carried by the error type, not by the publisher: the error value is what crosses a JoinSet boundary into the dispatcher, so it must carry its own verdict (ADR 0008).

use reliar_core::{Classify, FailureKind};

#[derive(Debug)]
enum MyPublishError {
    Timeout,
    PayloadTooLarge,
}

impl Classify for MyPublishError {
    fn kind(&self) -> FailureKind {
        match self {
            Self::Timeout => FailureKind::Transient,
            Self::PayloadTooLarge => FailureKind::Permanent,
        }
    }
}

assert_eq!(MyPublishError::Timeout.kind(), FailureKind::Transient);

Required Methods§

Source

fn kind(&self) -> FailureKind

Whether the failure this error represents can succeed on retry.

use reliar_core::{Classify, FailureKind};

#[derive(Debug)]
struct TimedOut;

impl Classify for TimedOut {
    fn kind(&self) -> FailureKind {
        FailureKind::Transient
    }
}

assert_eq!(TimedOut.kind(), FailureKind::Transient);

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§