reifydb_sub_server/
state.rs1use std::time::Duration;
10
11use reifydb_engine::StandardEngine;
12
13#[derive(Debug, Clone)]
15pub struct QueryConfig {
16 pub query_timeout: Duration,
19
20 pub request_timeout: Duration,
23
24 pub max_connections: usize,
27}
28
29impl Default for QueryConfig {
30 fn default() -> Self {
31 Self {
32 query_timeout: Duration::from_secs(30),
33 request_timeout: Duration::from_secs(60),
34 max_connections: 10_000,
35 }
36 }
37}
38
39impl QueryConfig {
40 pub fn new() -> Self {
42 Self::default()
43 }
44
45 pub fn query_timeout(mut self, timeout: Duration) -> Self {
47 self.query_timeout = timeout;
48 self
49 }
50
51 pub fn request_timeout(mut self, timeout: Duration) -> Self {
53 self.request_timeout = timeout;
54 self
55 }
56
57 pub fn max_connections(mut self, max: usize) -> Self {
59 self.max_connections = max;
60 self
61 }
62}
63
64#[derive(Clone)]
81pub struct AppState {
82 engine: StandardEngine,
83 config: QueryConfig,
84}
85
86impl AppState {
87 pub fn new(engine: StandardEngine, config: QueryConfig) -> Self {
89 Self {
90 engine,
91 config,
92 }
93 }
94
95 #[inline]
97 pub fn engine(&self) -> &StandardEngine {
98 &self.engine
99 }
100
101 #[inline]
105 pub fn engine_clone(&self) -> StandardEngine {
106 self.engine.clone()
107 }
108
109 #[inline]
111 pub fn config(&self) -> &QueryConfig {
112 &self.config
113 }
114
115 #[inline]
117 pub fn query_timeout(&self) -> Duration {
118 self.config.query_timeout
119 }
120
121 #[inline]
123 pub fn request_timeout(&self) -> Duration {
124 self.config.request_timeout
125 }
126
127 #[inline]
129 pub fn max_connections(&self) -> usize {
130 self.config.max_connections
131 }
132}
133
134#[cfg(test)]
135mod tests {
136 use super::*;
137
138 #[test]
139 fn test_query_config_defaults() {
140 let config = QueryConfig::default();
141 assert_eq!(config.query_timeout, Duration::from_secs(30));
142 assert_eq!(config.request_timeout, Duration::from_secs(60));
143 assert_eq!(config.max_connections, 10_000);
144 }
145
146 #[test]
147 fn test_query_config_builder() {
148 let config = QueryConfig::new()
149 .query_timeout(Duration::from_secs(60))
150 .request_timeout(Duration::from_secs(120))
151 .max_connections(5_000);
152
153 assert_eq!(config.query_timeout, Duration::from_secs(60));
154 assert_eq!(config.request_timeout, Duration::from_secs(120));
155 assert_eq!(config.max_connections, 5_000);
156 }
157}