soph_database/config/
mod.rs

1use serde::Deserialize;
2
3#[derive(Debug, Default, Deserialize)]
4pub struct Database {
5    pub url: String,
6
7    #[serde(default = "default_migration_path")]
8    pub migration_path: String,
9
10    #[serde(default = "default_model_path")]
11    pub model_path: String,
12
13    #[serde(default = "default_max_connections")]
14    pub max_connections: u32,
15
16    #[serde(default = "default_min_connections")]
17    pub min_connections: u32,
18
19    #[serde(default = "default_connect_timeout")]
20    pub connect_timeout: u64,
21
22    #[serde(default = "default_idle_timeout")]
23    pub idle_timeout: u64,
24
25    #[serde(default = "default_acquire_timeout")]
26    pub acquire_timeout: u64,
27
28    #[serde(default = "default_max_lifetime")]
29    pub max_lifetime: u64,
30
31    #[serde(default)]
32    pub sqlx_logging: bool,
33
34    #[serde(default = "default_sqlx_logging_level")]
35    pub sqlx_logging_level: LevelFilter,
36
37    #[serde(default)]
38    pub sqlx_slow_statements_logging_level: LevelFilter,
39
40    #[serde(default = "default_sqlx_slow_statements_logging_threshold")]
41    pub sqlx_slow_statements_logging_threshold: u64,
42
43    #[serde(default = "default_test_before_acquire")]
44    pub test_before_acquire: bool,
45}
46
47#[derive(Clone, Debug, Default, Deserialize)]
48pub enum LevelFilter {
49    #[serde(rename = "off")]
50    #[default]
51    Off,
52    #[serde(rename = "error")]
53    Error,
54    #[serde(rename = "warn")]
55    Warn,
56    #[serde(rename = "info")]
57    Info,
58    #[serde(rename = "debug")]
59    Debug,
60    #[serde(rename = "trace")]
61    Trace,
62}
63
64impl From<LevelFilter> for tracing::log::LevelFilter {
65    fn from(level: LevelFilter) -> Self {
66        match level {
67            LevelFilter::Off => tracing::log::LevelFilter::Off,
68            LevelFilter::Error => tracing::log::LevelFilter::Error,
69            LevelFilter::Warn => tracing::log::LevelFilter::Warn,
70            LevelFilter::Info => tracing::log::LevelFilter::Info,
71            LevelFilter::Debug => tracing::log::LevelFilter::Debug,
72            LevelFilter::Trace => tracing::log::LevelFilter::Trace,
73        }
74    }
75}
76
77fn default_migration_path() -> String {
78    "database/migrations".to_string()
79}
80
81fn default_model_path() -> String {
82    "app/src/models".to_string()
83}
84
85fn default_max_connections() -> u32 {
86    10
87}
88
89fn default_min_connections() -> u32 {
90    1
91}
92
93fn default_connect_timeout() -> u64 {
94    3 * 1000
95}
96
97fn default_idle_timeout() -> u64 {
98    8 * 1000
99}
100
101fn default_acquire_timeout() -> u64 {
102    3 * 1000
103}
104
105fn default_max_lifetime() -> u64 {
106    8 * 1000
107}
108
109fn default_sqlx_logging_level() -> LevelFilter {
110    LevelFilter::Info
111}
112
113fn default_sqlx_slow_statements_logging_threshold() -> u64 {
114    1000
115}
116
117fn default_test_before_acquire() -> bool {
118    true
119}