use crate::errors::RequestAttemptError;
use crate::frame::types::Consistency;
#[non_exhaustive]
pub struct RequestInfo<'a> {
pub error: &'a RequestAttemptError,
pub is_idempotent: bool,
pub consistency: Consistency,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum RetryDecision {
RetrySameTarget(Option<Consistency>), RetryNextTarget(Option<Consistency>), DontRetry,
IgnoreWriteError,
}
pub trait RetryPolicy: std::fmt::Debug + Send + Sync {
fn new_session(&self) -> Box<dyn RetrySession>;
}
pub trait RetrySession: Send + Sync {
fn decide_should_retry(&mut self, request_info: RequestInfo) -> RetryDecision;
fn reset(&mut self);
}