cat_gateway/settings/
event_db.rs1use std::time::Duration;
4
5use super::str_env_var::StringEnvVar;
6
7const EVENT_DB_MAX_CONNECTIONS_DEFAULT: u32 = 100;
9
10const EVENT_DB_CONN_TIMEOUT_DEFAULT: Duration = Duration::from_secs(5);
12
13const EVENT_DB_SLOT_WAIT_TIMEOUT_DEFAULT: Duration = Duration::from_secs(5);
15
16const EVENT_DB_CONN_RECYCLE_TIMEOUT_DEFAULT: Duration = Duration::from_secs(5);
18
19const EVENT_DB_URL_DEFAULT: &str =
21 "postgresql://postgres:postgres@localhost/catalyst_events?sslmode=disable";
22
23#[derive(Clone)]
25pub(crate) struct EnvVars {
26 url: StringEnvVar,
28
29 username: Option<StringEnvVar>,
31
32 password: Option<StringEnvVar>,
34
35 max_connections: u32,
38
39 connection_creation_timeout: Duration,
42
43 slot_wait_timeout: Duration,
46
47 connection_recycle_timeout: Duration,
50}
51
52impl EnvVars {
53 pub(super) fn new() -> Self {
55 Self {
56 url: StringEnvVar::new("EVENT_DB_URL", (EVENT_DB_URL_DEFAULT, true).into()),
57 username: StringEnvVar::new_optional("EVENT_DB_USERNAME", false),
58 password: StringEnvVar::new_optional("EVENT_DB_PASSWORD", true),
59 max_connections: StringEnvVar::new_as_int(
60 "EVENT_DB_MAX_CONNECTIONS",
61 EVENT_DB_MAX_CONNECTIONS_DEFAULT,
62 0,
63 u32::MAX,
64 ),
65 connection_creation_timeout: StringEnvVar::new_as_duration(
66 "EVENT_DB_CONN_TIMEOUT",
67 EVENT_DB_CONN_TIMEOUT_DEFAULT,
68 ),
69 slot_wait_timeout: StringEnvVar::new_as_duration(
70 "EVENT_DB_SLOT_WAIT_TIMEOUT",
71 EVENT_DB_SLOT_WAIT_TIMEOUT_DEFAULT,
72 ),
73 connection_recycle_timeout: StringEnvVar::new_as_duration(
74 "EVENT_DB_CONN_RECYCLE_TIMEOUT",
75 EVENT_DB_CONN_RECYCLE_TIMEOUT_DEFAULT,
76 ),
77 }
78 }
79
80 pub(crate) fn url(&self) -> &str {
82 self.url.as_str()
83 }
84
85 pub(crate) fn username(&self) -> Option<&str> {
87 self.username.as_ref().map(StringEnvVar::as_str)
88 }
89
90 pub(crate) fn password(&self) -> Option<&str> {
92 self.password.as_ref().map(StringEnvVar::as_str)
93 }
94
95 pub(crate) fn max_connections(&self) -> u32 {
97 self.max_connections
98 }
99
100 pub(crate) fn connection_creation_timeout(&self) -> Duration {
102 self.connection_creation_timeout
103 }
104
105 pub(crate) fn slot_wait_timeout(&self) -> Duration {
107 self.slot_wait_timeout
108 }
109
110 pub(crate) fn connection_recycle_timeout(&self) -> Duration {
112 self.connection_recycle_timeout
113 }
114}