reifydb_sub_server/
state.rs1use std::time::Duration;
10
11use reifydb_engine::engine::StandardEngine;
12use reifydb_runtime::actor::system::ActorSystem;
13
14#[derive(Debug, Clone)]
16pub struct StateConfig {
17 pub query_timeout: Duration,
20 pub request_timeout: Duration,
23 pub max_connections: usize,
26}
27
28impl Default for StateConfig {
29 fn default() -> Self {
30 Self {
31 query_timeout: Duration::from_secs(30),
32 request_timeout: Duration::from_secs(60),
33 max_connections: 10_000,
34 }
35 }
36}
37
38impl StateConfig {
39 pub fn new() -> Self {
41 Self::default()
42 }
43
44 pub fn query_timeout(mut self, timeout: Duration) -> Self {
46 self.query_timeout = timeout;
47 self
48 }
49
50 pub fn request_timeout(mut self, timeout: Duration) -> Self {
52 self.request_timeout = timeout;
53 self
54 }
55
56 pub fn max_connections(mut self, max: usize) -> Self {
58 self.max_connections = max;
59 self
60 }
61}
62
63#[derive(Clone)]
81pub struct AppState {
82 actor_system: ActorSystem,
83 engine: StandardEngine,
84 config: StateConfig,
85}
86
87impl AppState {
88 pub fn new(actor_system: ActorSystem, engine: StandardEngine, config: StateConfig) -> Self {
90 Self {
91 actor_system,
92 engine,
93 config,
94 }
95 }
96
97 #[inline]
101 pub fn actor_system(&self) -> ActorSystem {
102 self.actor_system.clone()
103 }
104
105 #[inline]
107 pub fn engine(&self) -> &StandardEngine {
108 &self.engine
109 }
110
111 #[inline]
115 pub fn engine_clone(&self) -> StandardEngine {
116 self.engine.clone()
117 }
118
119 #[inline]
121 pub fn config(&self) -> &StateConfig {
122 &self.config
123 }
124
125 #[inline]
127 pub fn query_timeout(&self) -> Duration {
128 self.config.query_timeout
129 }
130
131 #[inline]
133 pub fn request_timeout(&self) -> Duration {
134 self.config.request_timeout
135 }
136
137 #[inline]
139 pub fn max_connections(&self) -> usize {
140 self.config.max_connections
141 }
142}
143
144#[cfg(test)]
145pub mod tests {
146 use super::*;
147
148 #[test]
149 fn test_query_config_defaults() {
150 let config = StateConfig::default();
151 assert_eq!(config.query_timeout, Duration::from_secs(30));
152 assert_eq!(config.request_timeout, Duration::from_secs(60));
153 assert_eq!(config.max_connections, 10_000);
154 }
155
156 #[test]
157 fn test_query_config_builder() {
158 let config = StateConfig::new()
159 .query_timeout(Duration::from_secs(60))
160 .request_timeout(Duration::from_secs(120))
161 .max_connections(5_000);
162
163 assert_eq!(config.query_timeout, Duration::from_secs(60));
164 assert_eq!(config.request_timeout, Duration::from_secs(120));
165 assert_eq!(config.max_connections, 5_000);
166 }
167}