From a5eafc49f50fc91105334d15cd8f97929c969453 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Sun, 5 Mar 2023 15:13:23 +0100 Subject: [PATCH] settings: split in multiple modules --- crates/settings/src/database.rs | 51 ++++++++++++++++++++++++++ crates/settings/src/error.rs | 8 ++++ crates/settings/src/lib.rs | 65 ++++----------------------------- 3 files changed, 66 insertions(+), 58 deletions(-) create mode 100644 crates/settings/src/database.rs create mode 100644 crates/settings/src/error.rs diff --git a/crates/settings/src/database.rs b/crates/settings/src/database.rs new file mode 100644 index 0000000..f6afda6 --- /dev/null +++ b/crates/settings/src/database.rs @@ -0,0 +1,51 @@ +use crate::error::Error; +use crate::Settings; +use database::sqlx::SqliteExecutor; +use database::Settings as DatabaseSettings; + +const DEFAULT_BUSINESS_NAME: &str = "ezidam"; +pub const DEFAULT_BUSINESS_LOGO: &[u8] = include_bytes!("../../../logo/ezidam.png"); + +impl From for Settings { + fn from(db: DatabaseSettings) -> Self { + Self { + created_at: db.created_at, + updated_at: db.updated_at, + business_name: db + .business_name + .unwrap_or_else(|| DEFAULT_BUSINESS_NAME.into()), + business_logo: db + .business_logo + .unwrap_or_else(|| DEFAULT_BUSINESS_LOGO.to_vec()), + } + } +} + +impl Settings { + pub async fn init(conn: impl SqliteExecutor<'_>) -> Result, Error> { + Ok(DatabaseSettings::init(conn).await?) + } + + pub async fn get(conn: impl SqliteExecutor<'_>) -> Result { + Ok(DatabaseSettings::get(conn).await.map(Self::from)?) + } + + pub async fn set_business_name( + conn: impl SqliteExecutor<'_>, + business_name: &str, + ) -> Result<(), Error> { + DatabaseSettings::set_business_name(conn, Some(business_name)).await?; + + Ok(()) + } + + /// **Warning**: No checks are performed, make sure the bytes are safe! + pub async fn set_business_logo( + conn: impl SqliteExecutor<'_>, + business_logo: &[u8], + ) -> Result<(), Error> { + DatabaseSettings::set_business_logo(conn, Some(business_logo)).await?; + + Ok(()) + } +} diff --git a/crates/settings/src/error.rs b/crates/settings/src/error.rs new file mode 100644 index 0000000..47def78 --- /dev/null +++ b/crates/settings/src/error.rs @@ -0,0 +1,8 @@ +// error +#[derive(thiserror::Error)] +// the rest +#[derive(Debug)] +pub enum Error { + #[error("Database: {0}")] + Database(#[from] database::Error), +} diff --git a/crates/settings/src/lib.rs b/crates/settings/src/lib.rs index 5c03aa4..33d96c2 100644 --- a/crates/settings/src/lib.rs +++ b/crates/settings/src/lib.rs @@ -1,15 +1,11 @@ -use chrono::{DateTime, Utc}; -use database::sqlx::SqliteExecutor; -use database::Settings as DatabaseSettings; +mod database; +mod error; -// error -#[derive(thiserror::Error)] -// the rest -#[derive(Debug)] -pub enum Error { - #[error("Database: {0}")] - Database(#[from] database::Error), -} +use chrono::{DateTime, Utc}; + +// Exports +pub use crate::database::DEFAULT_BUSINESS_LOGO; +pub use crate::error::Error; // the rest #[derive(Debug)] @@ -20,55 +16,8 @@ pub struct Settings { business_logo: Vec, } -const DEFAULT_BUSINESS_NAME: &str = "ezidam"; -pub const DEFAULT_BUSINESS_LOGO: &[u8] = include_bytes!("../../../logo/ezidam.png"); - -impl From for Settings { - fn from(db: DatabaseSettings) -> Self { - Self { - created_at: db.created_at, - updated_at: db.updated_at, - business_name: db - .business_name - .unwrap_or_else(|| DEFAULT_BUSINESS_NAME.into()), - business_logo: db - .business_logo - .unwrap_or_else(|| DEFAULT_BUSINESS_LOGO.to_vec()), - } - } -} - impl Settings { pub fn business_logo(&self) -> &[u8] { self.business_logo.as_slice() } } - -impl Settings { - pub async fn init(conn: impl SqliteExecutor<'_>) -> Result, Error> { - Ok(DatabaseSettings::init(conn).await?) - } - - pub async fn get(conn: impl SqliteExecutor<'_>) -> Result { - Ok(DatabaseSettings::get(conn).await.map(Self::from)?) - } - - pub async fn set_business_name( - conn: impl SqliteExecutor<'_>, - business_name: &str, - ) -> Result<(), Error> { - DatabaseSettings::set_business_name(conn, Some(business_name)).await?; - - Ok(()) - } - - /// **Warning**: No checks are performed, make sure the bytes are safe! - pub async fn set_business_logo( - conn: impl SqliteExecutor<'_>, - business_logo: &[u8], - ) -> Result<(), Error> { - DatabaseSettings::set_business_logo(conn, Some(business_logo)).await?; - - Ok(()) - } -}