use sqlx::sqlite::SqlitePool; use super::{repo::Provider as _, Login, Password}; pub struct Logins<'a> { db: &'a SqlitePool, } impl<'a> Logins<'a> { pub const fn new(db: &'a SqlitePool) -> Self { Self { db } } pub async fn create(&self, name: &str, password: &Password) -> Result { let password_hash = password.hash()?; let mut tx = self.db.begin().await?; let login = tx.logins().create(name, &password_hash).await?; tx.commit().await?; Ok(login) } } #[derive(Debug, thiserror::Error)] #[error(transparent)] pub enum CreateError { DatabaseError(#[from] sqlx::Error), PasswordHashError(#[from] password_hash::Error), }