use std::time::Duration;
#[derive(Debug, Clone)]
pub struct QueryOptions {
pub stale_time: Duration,
pub gc_time: Duration,
pub refetch_on_mount: RefetchOnMount,
pub retry: RetryConfig,
pub enabled: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RefetchOnMount {
Always,
IfStale,
Never,
}
#[derive(Debug, Clone)]
pub struct RetryConfig {
pub max_retries: u32,
pub base_delay: Duration,
pub max_delay: Duration,
}
impl Default for QueryOptions {
fn default() -> Self {
Self {
stale_time: Duration::ZERO,
gc_time: Duration::from_secs(5 * 60),
refetch_on_mount: RefetchOnMount::IfStale,
retry: RetryConfig::default(),
enabled: true,
}
}
}
impl Default for RetryConfig {
fn default() -> Self {
Self {
max_retries: 3,
base_delay: Duration::from_millis(1000),
max_delay: Duration::from_secs(30),
}
}
}
impl RetryConfig {
pub fn none() -> Self {
Self {
max_retries: 0,
..Default::default()
}
}
pub fn retries(max_retries: u32) -> Self {
Self {
max_retries,
..Default::default()
}
}
}