flix_db/
connection.rs

1//! Types and functions related to [DatabaseConnection]s
2
3use sea_orm::{DatabaseConnection, DbErr};
4use sea_orm_migration::MigratorTrait as _;
5
6/// A newtype wrapping a [DatabaseConnection]
7pub struct Connection(DatabaseConnection);
8
9impl Connection {
10	/// Helper function for applying database migrations while wrapping a
11	/// [DatabaseConnection] in a newtype
12	pub async fn try_from(db: DatabaseConnection) -> Result<Self, DbErr> {
13		crate::migration::Migrator::down(&db, None).await?;
14		db.get_schema_registry("flix_db::*").sync(&db).await?;
15		db.get_schema_registry("flix_db::*").sync(&db).await?;
16		crate::migration::Migrator::up(&db, None).await?;
17		Ok(Self(db))
18	}
19}
20
21impl AsRef<DatabaseConnection> for Connection {
22	fn as_ref(&self) -> &DatabaseConnection {
23		&self.0
24	}
25}
26
27#[cfg(test)]
28impl Connection {
29	pub(crate) fn take(self) -> DatabaseConnection {
30		self.0
31	}
32}