rs-zero 0.2.10

Rust-first microservice framework inspired by go-zero engineering practices
Documentation
use serde::Deserialize;

/// Serializable database configuration used by model repositories.
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(default, deny_unknown_fields)]
pub struct DatabaseSection {
    pub kind: DatabaseKindSection,
    pub url: String,
    pub max_connections: u32,
    pub connect_timeout_ms: u64,
}

impl Default for DatabaseSection {
    fn default() -> Self {
        Self {
            kind: DatabaseKindSection::Sqlite,
            url: "sqlite::memory:".to_string(),
            max_connections: 5,
            connect_timeout_ms: 5000,
        }
    }
}

impl DatabaseSection {
    /// Converts this section into the runtime database config.
    #[cfg(feature = "db")]
    pub fn to_database_config(&self) -> crate::db::DatabaseConfig {
        crate::db::DatabaseConfig {
            kind: match self.kind {
                DatabaseKindSection::Sqlite => crate::db::DatabaseKind::Sqlite,
                DatabaseKindSection::Postgres => crate::db::DatabaseKind::Postgres,
                DatabaseKindSection::Mysql => crate::db::DatabaseKind::Mysql,
            },
            url: self.url.clone(),
            max_connections: self.max_connections,
            connect_timeout: std::time::Duration::from_millis(self.connect_timeout_ms),
        }
    }
}

/// Serializable database kind.
#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum DatabaseKindSection {
    /// SQLite.
    #[default]
    Sqlite,
    /// PostgreSQL.
    Postgres,
    /// MySQL.
    Mysql,
}