settings: split in multiple modules

This commit is contained in:
Philippe Loctaux 2023-03-05 15:13:23 +01:00
parent 33cc5b03e9
commit a5eafc49f5
3 changed files with 66 additions and 58 deletions

View file

@ -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<DatabaseSettings> 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<Option<()>, Error> {
Ok(DatabaseSettings::init(conn).await?)
}
pub async fn get(conn: impl SqliteExecutor<'_>) -> Result<Self, Error> {
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(())
}
}

View file

@ -0,0 +1,8 @@
// error
#[derive(thiserror::Error)]
// the rest
#[derive(Debug)]
pub enum Error {
#[error("Database: {0}")]
Database(#[from] database::Error),
}

View file

@ -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<u8>,
}
const DEFAULT_BUSINESS_NAME: &str = "ezidam";
pub const DEFAULT_BUSINESS_LOGO: &[u8] = include_bytes!("../../../logo/ezidam.png");
impl From<DatabaseSettings> 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<Option<()>, Error> {
Ok(DatabaseSettings::init(conn).await?)
}
pub async fn get(conn: impl SqliteExecutor<'_>) -> Result<Self, Error> {
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(())
}
}