aboutsummaryrefslogtreecommitdiff
path: root/crates/secd/src/util/from.rs
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2022-12-24 00:43:38 -0800
committerbenj <benj@rse8.com>2022-12-24 00:43:38 -0800
commitc2268c285648ef02ece04de0d9df0813c6d70ff8 (patch)
treef84ec7ee42f97d78245f26d0c5a0c559cd35e89d /crates/secd/src/util/from.rs
parentde6339da72af1d61ca5908b780977e2b037ce014 (diff)
downloadsecdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.tar
secdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.tar.gz
secdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.tar.bz2
secdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.tar.lz
secdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.tar.xz
secdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.tar.zst
secdiam-c2268c285648ef02ece04de0d9df0813c6d70ff8.zip
refactor everything with more abstraction and a nicer interface
Diffstat (limited to 'crates/secd/src/util/from.rs')
-rw-r--r--crates/secd/src/util/from.rs66
1 files changed, 66 insertions, 0 deletions
diff --git a/crates/secd/src/util/from.rs b/crates/secd/src/util/from.rs
new file mode 100644
index 0000000..bab8a25
--- /dev/null
+++ b/crates/secd/src/util/from.rs
@@ -0,0 +1,66 @@
+use std::str::FromStr;
+
+use crate::AuthStore;
+
+impl From<Option<String>> for AuthStore {
+ fn from(s: Option<String>) -> Self {
+ let conn = s.clone().unwrap_or("sqlite::memory:".into());
+ match conn.split(":").next() {
+ Some("postgresql") | Some("postgres") => AuthStore::Postgres { conn },
+ Some("sqlite") => AuthStore::Sqlite { conn },
+ _ => panic!(
+ "AuthStore: Invalid database connection string provided. Found: {:?}",
+ s
+ ),
+ }
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn auth_store_from_string() {
+ let in_conn = None;
+ let a = AuthStore::from(in_conn.clone());
+ match AuthStore::from(in_conn.clone()) {
+ AuthStore::Sqlite { conn } => assert_eq!(conn, "sqlite::memory:"),
+ r @ _ => assert!(
+ false,
+ "should have parsed None as in-memory sqlite. Found: {:?}",
+ r
+ ),
+ }
+
+ let postgresql_conn = Some("postgresql://testuser:p4ssw0rd@1.2.3.4:5432/test-db".into());
+ match AuthStore::from(postgresql_conn.clone()) {
+ AuthStore::Postgres { conn } => assert_eq!(conn, postgresql_conn.unwrap()),
+ r @ _ => assert!(false, "should have parsed as postgres. Found: {:?}", r),
+ }
+
+ let postgres_conn = Some("postgres://testuser:p4ssw0rd@1.2.3.4:5432/test-db".into());
+ match AuthStore::from(postgres_conn.clone()) {
+ AuthStore::Postgres { conn } => assert_eq!(conn, postgres_conn.unwrap()),
+ r @ _ => assert!(false, "should have parsed as postgres. Found: {:?}", r),
+ }
+
+ let sqlite_conn = Some("sqlite:///path/to/db.sql".into());
+ let a = AuthStore::from(sqlite_conn.clone());
+ match AuthStore::from(sqlite_conn.clone()) {
+ AuthStore::Sqlite { conn } => assert_eq!(conn, sqlite_conn.unwrap()),
+ r @ _ => assert!(false, "should have parsed as sqlite. Found: {:?}", r),
+ }
+
+ let sqlite_mem_conn = Some("sqlite:memory:".into());
+ let a = AuthStore::from(sqlite_mem_conn.clone());
+ match AuthStore::from(sqlite_mem_conn.clone()) {
+ AuthStore::Sqlite { conn } => assert_eq!(conn, sqlite_mem_conn.unwrap()),
+ r @ _ => assert!(
+ false,
+ "should have parsed as in-memoy sqlite. Found: {:?}",
+ r
+ ),
+ }
+ }
+}