rs_query/
options.rs

1//! Query and mutation options
2
3use std::time::Duration;
4
5/// Configuration options for a query
6#[derive(Debug, Clone)]
7pub struct QueryOptions {
8    /// Time after which data is considered stale (default: 0 = immediately)
9    pub stale_time: Duration,
10    /// Time after which inactive cache is garbage collected (default: 5 min)
11    pub gc_time: Duration,
12    /// Whether to refetch when query becomes active
13    pub refetch_on_mount: RefetchOnMount,
14    /// Retry configuration
15    pub retry: RetryConfig,
16    /// Whether query is enabled
17    pub enabled: bool,
18}
19
20/// When to refetch on mount
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum RefetchOnMount {
23    /// Always refetch
24    Always,
25    /// Only if data is stale
26    IfStale,
27    /// Never refetch on mount
28    Never,
29}
30
31/// Retry configuration with exponential backoff
32#[derive(Debug, Clone)]
33pub struct RetryConfig {
34    /// Maximum retry attempts
35    pub max_retries: u32,
36    /// Base delay for exponential backoff
37    pub base_delay: Duration,
38    /// Maximum delay cap
39    pub max_delay: Duration,
40}
41
42impl Default for QueryOptions {
43    fn default() -> Self {
44        Self {
45            stale_time: Duration::ZERO,
46            gc_time: Duration::from_secs(5 * 60),
47            refetch_on_mount: RefetchOnMount::IfStale,
48            retry: RetryConfig::default(),
49            enabled: true,
50        }
51    }
52}
53
54impl Default for RetryConfig {
55    fn default() -> Self {
56        Self {
57            max_retries: 3,
58            base_delay: Duration::from_millis(1000),
59            max_delay: Duration::from_secs(30),
60        }
61    }
62}
63
64impl RetryConfig {
65    /// No retries
66    pub fn none() -> Self {
67        Self {
68            max_retries: 0,
69            ..Default::default()
70        }
71    }
72
73    /// Custom retry count
74    pub fn retries(max_retries: u32) -> Self {
75        Self {
76            max_retries,
77            ..Default::default()
78        }
79    }
80}