From 293053134f8322ba15fb9e0ce32309cd9cf27f85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bianca=20F=C3=BCrstenau?= Date: Fri, 7 Mar 2025 01:41:31 +0100 Subject: [PATCH] Split up types --- src/types.rs | 135 ------------------------------------------- src/types/account.rs | 50 ++++++++++++++++ src/types/cash.rs | 23 ++++++++ src/types/mod.rs | 22 +++++++ src/types/store.rs | 56 ++++++++++++++++++ 5 files changed, 151 insertions(+), 135 deletions(-) delete mode 100644 src/types.rs create mode 100644 src/types/account.rs create mode 100644 src/types/cash.rs create mode 100644 src/types/mod.rs create mode 100644 src/types/store.rs diff --git a/src/types.rs b/src/types.rs deleted file mode 100644 index 36e0800..0000000 --- a/src/types.rs +++ /dev/null @@ -1,135 +0,0 @@ -#[cfg(feature = "server")] -use rusqlite::{types::ToSqlOutput, ToSql}; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Copy, Debug, Serialize, Deserialize)] -pub enum Store { - Aldi, - Edeka, - Dm, - Lidl, - Rewe, - Tegut, -} - -#[derive(Clone, Copy, Debug, Serialize, Deserialize)] -pub enum Account { - Sumpf, - Heinersyndikat, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Inventory { - pub acc: Account, - pub cash: i64, - pub vouchers: Vec, -} - -#[derive(Clone, Copy, Debug, Serialize, Deserialize)] -pub struct VoucherInventory { - pub store: Store, - pub count: i64, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -struct Cash(i64); - -impl std::str::FromStr for Cash { - type Err = (); - - fn from_str(s: &str) -> Result { - let split: Vec<&str> = s.split(".").collect(); - let i = i64::from_str(split.get(0).ok_or(())?) - .map_err(|e| println!("{:?}", e))?; - let f = match split.get(1) { - None => 0, - Some(fs) => i64::from_str(&format!("00{}", fs)[0..2]) - .map_err(|e| println!("{:?}", e))?, - }; - Ok(Cash(i * 100 + f)) - } -} - -impl Into for &Store { - fn into(self) -> String { - String::from(match *self { - Store::Aldi => "aldi", - Store::Edeka => "edeka", - Store::Dm => "dm", - Store::Lidl => "lidl", - Store::Rewe => "rewe", - Store::Tegut => "tegut", - }) - } -} - -impl TryFrom<&str> for Store { - type Error = (); - - fn try_from(s: &str) -> Result { - match s { - "aldi" => Ok(Store::Aldi), - "edeka" => Ok(Store::Edeka), - "dm" => Ok(Store::Dm), - "lidl" => Ok(Store::Lidl), - "rewe" => Ok(Store::Rewe), - "tegut" => Ok(Store::Tegut), - _ => Err(()), - } - } -} - -impl TryFrom<&str> for Account { - type Error = (); - - fn try_from(s: &str) -> Result { - match s { - "sumpf" => Ok(Account::Sumpf), - "hs" => Ok(Account::Heinersyndikat), - _ => Err(()), - } - } -} - -impl Into for &Account { - fn into(self) -> String { - String::from(match *self { - Account::Sumpf => "sumpf", - Account::Heinersyndikat => "hs", - }) - } -} - -impl std::fmt::Display for Account { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match *self { - Account::Sumpf => "Sumpf", - Account::Heinersyndikat => "Heinersyndikat", - } - .fmt(f) - } -} - -#[cfg(feature = "server")] -impl ToSql for Store { - fn to_sql(&self) -> rusqlite::Result> { - match self { - Store::Aldi => 0.to_sql(), - Store::Edeka => 1.to_sql(), - Store::Dm => 2.to_sql(), - Store::Lidl => 3.to_sql(), - Store::Rewe => 4.to_sql(), - Store::Tegut => 5.to_sql(), - } - } -} - -#[cfg(feature = "server")] -impl ToSql for Account { - fn to_sql(&self) -> rusqlite::Result> { - match self { - Account::Sumpf => 0.to_sql(), - Account::Heinersyndikat => 1.to_sql(), - } - } -} diff --git a/src/types/account.rs b/src/types/account.rs new file mode 100644 index 0000000..6da16e1 --- /dev/null +++ b/src/types/account.rs @@ -0,0 +1,50 @@ +#[cfg(feature = "server")] +use rusqlite::{types::ToSqlOutput, ToSql}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub enum Account { + Sumpf, + Heinersyndikat, +} + +impl TryFrom<&str> for Account { + type Error = (); + + fn try_from(s: &str) -> Result { + match s { + "sumpf" => Ok(Account::Sumpf), + "hs" => Ok(Account::Heinersyndikat), + _ => Err(()), + } + } +} + +impl Into for &Account { + fn into(self) -> String { + String::from(match *self { + Account::Sumpf => "sumpf", + Account::Heinersyndikat => "hs", + }) + } +} + +impl std::fmt::Display for Account { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match *self { + Account::Sumpf => "Sumpf", + Account::Heinersyndikat => "Heinersyndikat", + } + .fmt(f) + } +} + +#[cfg(feature = "server")] +impl ToSql for Account { + fn to_sql(&self) -> rusqlite::Result> { + match self { + Account::Sumpf => 0.to_sql(), + Account::Heinersyndikat => 1.to_sql(), + } + } +} diff --git a/src/types/cash.rs b/src/types/cash.rs new file mode 100644 index 0000000..d73255e --- /dev/null +++ b/src/types/cash.rs @@ -0,0 +1,23 @@ +use serde::{Deserialize, Serialize}; + +/// An amount of cash, +/// measured as an integer multiple +/// of 0.01 €. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub struct Cash(i64); + +impl std::str::FromStr for Cash { + type Err = (); + + fn from_str(s: &str) -> Result { + let split: Vec<&str> = s.split(".").collect(); + let i = i64::from_str(split.get(0).ok_or(())?) + .map_err(|e| println!("{:?}", e))?; + let f = match split.get(1) { + None => 0, + Some(fs) => i64::from_str(&format!("00{}", fs)[0..2]) + .map_err(|e| println!("{:?}", e))?, + }; + Ok(Cash(i * 100 + f)) + } +} \ No newline at end of file diff --git a/src/types/mod.rs b/src/types/mod.rs new file mode 100644 index 0000000..0fa5794 --- /dev/null +++ b/src/types/mod.rs @@ -0,0 +1,22 @@ +use serde::{Deserialize, Serialize}; + +mod store; +mod account; +mod cash; + +pub use store::Store; +pub use account::Account; +pub use cash::Cash; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Inventory { + pub acc: Account, + pub cash: Cash, + pub vouchers: Vec, +} + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub struct VoucherInventory { + pub store: Store, + pub count: i64, +} diff --git a/src/types/store.rs b/src/types/store.rs new file mode 100644 index 0000000..cd0fe30 --- /dev/null +++ b/src/types/store.rs @@ -0,0 +1,56 @@ +#[cfg(feature = "server")] +use rusqlite::{types::ToSqlOutput, ToSql}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub enum Store { + Aldi, + Edeka, + Dm, + Lidl, + Rewe, + Tegut, +} + +impl Into for &Store { + fn into(self) -> String { + String::from(match *self { + Store::Aldi => "aldi", + Store::Edeka => "edeka", + Store::Dm => "dm", + Store::Lidl => "lidl", + Store::Rewe => "rewe", + Store::Tegut => "tegut", + }) + } +} + +impl TryFrom<&str> for Store { + type Error = (); + + fn try_from(s: &str) -> Result { + match s { + "aldi" => Ok(Store::Aldi), + "edeka" => Ok(Store::Edeka), + "dm" => Ok(Store::Dm), + "lidl" => Ok(Store::Lidl), + "rewe" => Ok(Store::Rewe), + "tegut" => Ok(Store::Tegut), + _ => Err(()), + } + } +} + +#[cfg(feature = "server")] +impl ToSql for Store { + fn to_sql(&self) -> rusqlite::Result> { + match self { + Store::Aldi => 0.to_sql(), + Store::Edeka => 1.to_sql(), + Store::Dm => 2.to_sql(), + Store::Lidl => 3.to_sql(), + Store::Rewe => 4.to_sql(), + Store::Tegut => 5.to_sql(), + } + } +}