cdk_mintd/env_vars/
database.rs

1//! Database environment variables
2
3use std::env;
4
5use crate::config::{PostgresAuthConfig, PostgresConfig};
6
7pub const ENV_POSTGRES_URL: &str = "CDK_MINTD_POSTGRES_URL";
8pub const ENV_POSTGRES_TLS_MODE: &str = "CDK_MINTD_POSTGRES_TLS_MODE";
9pub const ENV_POSTGRES_MAX_CONNECTIONS: &str = "CDK_MINTD_POSTGRES_MAX_CONNECTIONS";
10pub const ENV_POSTGRES_CONNECTION_TIMEOUT: &str = "CDK_MINTD_POSTGRES_CONNECTION_TIMEOUT_SECONDS";
11
12pub const ENV_AUTH_POSTGRES_URL: &str = "CDK_MINTD_AUTH_POSTGRES_URL";
13pub const ENV_AUTH_POSTGRES_TLS_MODE: &str = "CDK_MINTD_AUTH_POSTGRES_TLS_MODE";
14pub const ENV_AUTH_POSTGRES_MAX_CONNECTIONS: &str = "CDK_MINTD_AUTH_POSTGRES_MAX_CONNECTIONS";
15pub const ENV_AUTH_POSTGRES_CONNECTION_TIMEOUT: &str =
16    "CDK_MINTD_AUTH_POSTGRES_CONNECTION_TIMEOUT_SECONDS";
17
18impl PostgresConfig {
19    pub fn from_env(mut self) -> Self {
20        // Check for new PostgreSQL URL env var first, then fallback to legacy DATABASE_URL
21        if let Ok(url) = env::var(ENV_POSTGRES_URL) {
22            self.url = url;
23        } else if let Ok(url) = env::var(super::DATABASE_URL_ENV_VAR) {
24            // Backward compatibility with the existing DATABASE_URL env var
25            self.url = url;
26        }
27
28        if let Ok(tls_mode) = env::var(ENV_POSTGRES_TLS_MODE) {
29            self.tls_mode = Some(tls_mode);
30        }
31
32        if let Ok(max_connections) = env::var(ENV_POSTGRES_MAX_CONNECTIONS) {
33            if let Ok(parsed) = max_connections.parse::<usize>() {
34                self.max_connections = Some(parsed);
35            }
36        }
37
38        if let Ok(timeout) = env::var(ENV_POSTGRES_CONNECTION_TIMEOUT) {
39            if let Ok(parsed) = timeout.parse::<u64>() {
40                self.connection_timeout_seconds = Some(parsed);
41            }
42        }
43
44        self
45    }
46}
47
48impl PostgresAuthConfig {
49    pub fn from_env(mut self) -> Self {
50        if let Ok(url) = env::var(ENV_AUTH_POSTGRES_URL) {
51            self.url = url;
52        }
53
54        if let Ok(tls_mode) = env::var(ENV_AUTH_POSTGRES_TLS_MODE) {
55            self.tls_mode = Some(tls_mode);
56        }
57
58        if let Ok(max_connections) = env::var(ENV_AUTH_POSTGRES_MAX_CONNECTIONS) {
59            if let Ok(parsed) = max_connections.parse::<usize>() {
60                self.max_connections = Some(parsed);
61            }
62        }
63
64        if let Ok(timeout) = env::var(ENV_AUTH_POSTGRES_CONNECTION_TIMEOUT) {
65            if let Ok(parsed) = timeout.parse::<u64>() {
66                self.connection_timeout_seconds = Some(parsed);
67            }
68        }
69
70        self
71    }
72}