1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct DatabaseConfig {
5 pub database_type: DatabaseType,
6 pub host: String,
7 pub port: u16,
8 pub username: String,
9 pub password: String,
10 pub database: String,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub enum DatabaseType {
15 #[serde(rename = "mysql")]
16 MySql,
17 #[serde(rename = "postgres")]
18 Postgres,
19 #[serde(rename = "sqlite")]
20 Sqlite,
21 #[serde(rename = "redis")]
22 Redis,
23}
24
25impl DatabaseConfig {
26 pub fn connection_string(&self) -> String {
27 match self.database_type {
28 DatabaseType::MySql => format!(
29 "mysql://{}:{}@{}:{}/{}",
30 self.username, self.password, self.host, self.port, self.database
31 ),
32 DatabaseType::Postgres => format!(
33 "postgresql://{}:{}@{}:{}/{}",
34 self.username, self.password, self.host, self.port, self.database
35 ),
36 DatabaseType::Sqlite => self.database.clone(),
37 DatabaseType::Redis => format!(
38 "redis://{}:{}@{}:{}/{}",
39 self.username, self.password, self.host, self.port, self.database
40 ),
41 }
42 }
43}