soph_database/config/
mod.rs1use 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}