Skip to main content

rs_zero/db/
config.rs

1use std::time::Duration;
2
3/// Supported database kinds.
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum DatabaseKind {
6    /// SQLite.
7    Sqlite,
8    /// PostgreSQL.
9    Postgres,
10    /// MySQL.
11    Mysql,
12}
13
14/// Database connection pool configuration.
15#[derive(Debug, Clone, PartialEq, Eq)]
16pub struct DatabaseConfig {
17    /// Database kind.
18    pub kind: DatabaseKind,
19    /// Database URL.
20    pub url: String,
21    /// Maximum connections.
22    pub max_connections: u32,
23    /// Connection timeout.
24    pub connect_timeout: Duration,
25}
26
27impl DatabaseConfig {
28    /// Creates a SQLite database configuration.
29    pub fn sqlite(url: impl Into<String>) -> Self {
30        Self {
31            kind: DatabaseKind::Sqlite,
32            url: url.into(),
33            max_connections: 5,
34            connect_timeout: Duration::from_secs(5),
35        }
36    }
37
38    /// Creates a PostgreSQL database configuration.
39    pub fn postgres(url: impl Into<String>) -> Self {
40        Self {
41            kind: DatabaseKind::Postgres,
42            url: url.into(),
43            max_connections: 5,
44            connect_timeout: Duration::from_secs(5),
45        }
46    }
47
48    /// Creates a MySQL database configuration.
49    pub fn mysql(url: impl Into<String>) -> Self {
50        Self {
51            kind: DatabaseKind::Mysql,
52            url: url.into(),
53            max_connections: 5,
54            connect_timeout: Duration::from_secs(5),
55        }
56    }
57}
58
59impl Default for DatabaseConfig {
60    fn default() -> Self {
61        Self::sqlite("sqlite::memory:")
62    }
63}