use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DatabaseEngine {
Postgres,
MySQL,
SQLite,
MongoDB,
}
impl DatabaseEngine {
pub const fn default_engine() -> Self {
Self::Postgres
}
pub const fn is_sql(&self) -> bool {
matches!(self, Self::Postgres | Self::MySQL | Self::SQLite)
}
pub const fn is_mongo(&self) -> bool {
matches!(self, Self::MongoDB)
}
}
impl Default for DatabaseEngine {
fn default() -> Self {
Self::default_engine()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn engine_is_sql() {
assert!(DatabaseEngine::Postgres.is_sql());
assert!(DatabaseEngine::MySQL.is_sql());
assert!(DatabaseEngine::SQLite.is_sql());
assert!(!DatabaseEngine::MongoDB.is_sql());
}
#[test]
fn engine_serde() {
let s = serde_json::to_string(&DatabaseEngine::Postgres).unwrap();
assert_eq!(s, r#""postgres""#);
let e: DatabaseEngine = serde_json::from_str(&s).unwrap();
assert_eq!(e, DatabaseEngine::Postgres);
}
}