jormungandr-bite/packages/backend/native-utils/crates/database/src/lib.rs
2023-06-02 23:48:16 -04:00

35 lines
927 B
Rust

pub mod error;
use sea_orm::{Database, DatabaseConnection};
use crate::error::Error;
static DB_CONN: once_cell::sync::OnceCell<DatabaseConnection> = once_cell::sync::OnceCell::new();
pub async fn init_database(connection_uri: impl Into<String>) -> Result<(), Error> {
let conn = Database::connect(connection_uri.into()).await?;
DB_CONN.get_or_init(move || conn);
Ok(())
}
pub fn get_database() -> Result<&'static DatabaseConnection, Error> {
DB_CONN.get().ok_or(Error::Uninitialized)
}
#[cfg(test)]
mod tests {
use super::get_database;
use crate::{error::Error, init_database};
#[test]
fn unit_lib_error_uninitialized() {
assert_eq!(get_database().unwrap_err(), Error::Uninitialized);
}
#[tokio::test]
async fn unit_lib_connect_in_memory_sqlite() -> Result<(), Error> {
init_database("sqlite::memory:").await?;
get_database()?;
Ok(())
}
}