rs_zero/core/dependency_config/
database.rs1use serde::Deserialize;
2
3#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
5#[serde(default, deny_unknown_fields)]
6pub struct DatabaseSection {
7 pub kind: DatabaseKindSection,
8 pub url: String,
9 pub max_connections: u32,
10 pub connect_timeout_ms: u64,
11}
12
13impl Default for DatabaseSection {
14 fn default() -> Self {
15 Self {
16 kind: DatabaseKindSection::Sqlite,
17 url: "sqlite::memory:".to_string(),
18 max_connections: 5,
19 connect_timeout_ms: 5000,
20 }
21 }
22}
23
24impl DatabaseSection {
25 #[cfg(feature = "db")]
27 pub fn to_database_config(&self) -> crate::db::DatabaseConfig {
28 crate::db::DatabaseConfig {
29 kind: match self.kind {
30 DatabaseKindSection::Sqlite => crate::db::DatabaseKind::Sqlite,
31 DatabaseKindSection::Postgres => crate::db::DatabaseKind::Postgres,
32 DatabaseKindSection::Mysql => crate::db::DatabaseKind::Mysql,
33 },
34 url: self.url.clone(),
35 max_connections: self.max_connections,
36 connect_timeout: std::time::Duration::from_millis(self.connect_timeout_ms),
37 }
38 }
39}
40
41#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Eq, Default)]
43#[serde(rename_all = "snake_case")]
44pub enum DatabaseKindSection {
45 #[default]
47 Sqlite,
48 Postgres,
50 Mysql,
52}