forge_core/config/
realtime_config.rs1use std::time::Duration;
4
5use serde::{Deserialize, Serialize};
6
7use super::types::DurationStr;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
13#[non_exhaustive]
14pub struct RealtimeConfig {
15 #[serde(default = "default_max_concurrent_reexecutions")]
17 pub max_concurrent_reexecutions: usize,
18
19 #[serde(default = "default_resync_interval")]
22 pub resync_interval: DurationStr,
23
24 #[serde(
26 default = "default_postgres_change_buffer_size",
27 alias = "listener_channel_buffer"
28 )]
29 pub postgres_change_buffer_size: usize,
30
31 #[serde(default = "default_debounce_quiet_window", alias = "debounce_quiet")]
34 pub debounce_quiet_window: DurationStr,
35
36 #[serde(default = "default_debounce_max_wait", alias = "debounce_max")]
38 pub debounce_max_wait: DurationStr,
39
40 #[serde(default = "default_sse_max_sessions")]
42 pub sse_max_sessions: usize,
43
44 #[serde(default = "default_subscription_max_per_session")]
46 pub subscription_max_per_session: usize,
47
48 #[serde(default = "default_shard_count")]
51 pub shard_count: usize,
52
53 #[serde(default = "default_max_sessions_per_user")]
60 pub max_sessions_per_user: usize,
61
62 #[serde(default = "default_max_sessions_per_ip")]
64 pub max_sessions_per_ip: usize,
65
66 #[serde(default = "default_max_subscriptions_per_user")]
74 pub max_subscriptions_per_user: usize,
75
76 #[serde(default = "default_max_cached_result_bytes")]
79 pub max_cached_result_bytes: usize,
80}
81
82fn default_max_concurrent_reexecutions() -> usize {
83 64
84}
85fn default_resync_interval() -> DurationStr {
86 DurationStr::new(Duration::from_secs(60))
87}
88fn default_postgres_change_buffer_size() -> usize {
89 1024
90}
91fn default_debounce_quiet_window() -> DurationStr {
92 DurationStr::new(Duration::from_millis(50))
93}
94fn default_debounce_max_wait() -> DurationStr {
95 DurationStr::new(Duration::from_millis(200))
96}
97fn default_sse_max_sessions() -> usize {
98 10_000
99}
100fn default_subscription_max_per_session() -> usize {
101 100
102}
103fn default_shard_count() -> usize {
104 64
105}
106fn default_max_sessions_per_user() -> usize {
107 10
108}
109fn default_max_sessions_per_ip() -> usize {
110 32
111}
112fn default_max_subscriptions_per_user() -> usize {
113 500
114}
115fn default_max_cached_result_bytes() -> usize {
116 10_485_760
117}
118
119impl Default for RealtimeConfig {
120 fn default() -> Self {
121 Self {
122 max_concurrent_reexecutions: default_max_concurrent_reexecutions(),
123 resync_interval: default_resync_interval(),
124 postgres_change_buffer_size: default_postgres_change_buffer_size(),
125 debounce_quiet_window: default_debounce_quiet_window(),
126 debounce_max_wait: default_debounce_max_wait(),
127 sse_max_sessions: default_sse_max_sessions(),
128 subscription_max_per_session: default_subscription_max_per_session(),
129 shard_count: default_shard_count(),
130 max_sessions_per_user: default_max_sessions_per_user(),
131 max_sessions_per_ip: default_max_sessions_per_ip(),
132 max_subscriptions_per_user: default_max_subscriptions_per_user(),
133 max_cached_result_bytes: default_max_cached_result_bytes(),
134 }
135 }
136}