shaperail_core/
database.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[serde(rename_all = "lowercase")]
10pub enum DatabaseEngine {
11 Postgres,
13
14 MySQL,
16
17 SQLite,
19
20 MongoDB,
22}
23
24impl DatabaseEngine {
25 pub const fn default_engine() -> Self {
27 Self::Postgres
28 }
29
30 pub const fn is_sql(&self) -> bool {
32 matches!(self, Self::Postgres | Self::MySQL | Self::SQLite)
33 }
34
35 pub const fn is_mongo(&self) -> bool {
37 matches!(self, Self::MongoDB)
38 }
39}
40
41impl Default for DatabaseEngine {
42 fn default() -> Self {
43 Self::default_engine()
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50
51 #[test]
52 fn engine_is_sql() {
53 assert!(DatabaseEngine::Postgres.is_sql());
54 assert!(DatabaseEngine::MySQL.is_sql());
55 assert!(DatabaseEngine::SQLite.is_sql());
56 assert!(!DatabaseEngine::MongoDB.is_sql());
57 }
58
59 #[test]
60 fn engine_serde() {
61 let s = serde_json::to_string(&DatabaseEngine::Postgres).unwrap();
62 assert_eq!(s, r#""postgres""#);
63 let e: DatabaseEngine = serde_json::from_str(&s).unwrap();
64 assert_eq!(e, DatabaseEngine::Postgres);
65 }
66}