1use std::time::Duration;
4
5#[derive(Debug, Clone)]
7pub struct QueryOptions {
8 pub stale_time: Duration,
10 pub gc_time: Duration,
12 pub refetch_on_mount: RefetchOnMount,
14 pub retry: RetryConfig,
16 pub enabled: bool,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum RefetchOnMount {
23 Always,
25 IfStale,
27 Never,
29}
30
31#[derive(Debug, Clone)]
33pub struct RetryConfig {
34 pub max_retries: u32,
36 pub base_delay: Duration,
38 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 pub fn none() -> Self {
67 Self {
68 max_retries: 0,
69 ..Default::default()
70 }
71 }
72
73 pub fn retries(max_retries: u32) -> Self {
75 Self {
76 max_retries,
77 ..Default::default()
78 }
79 }
80}