use std::time::Duration;
use aspero_core::ResiliencePolicy;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub struct CallOptions {
pub deadline: Option<Duration>,
pub max_retries: Option<u32>,
pub offline: bool,
}
impl CallOptions {
pub fn interactive() -> Self {
CallOptions {
deadline: Some(Duration::from_secs(8)),
max_retries: Some(1),
offline: false,
}
}
pub fn offline() -> Self {
CallOptions {
offline: true,
..CallOptions::default()
}
}
pub(crate) fn apply(&self, policy: &ResiliencePolicy) -> ResiliencePolicy {
let mut p = policy.clone();
if let Some(d) = self.deadline {
p.deadline = p.deadline.min(d);
p.attempt_timeout = p.attempt_timeout.min(d);
}
if let Some(r) = self.max_retries {
p.max_retries = p.max_retries.min(r);
}
p
}
}