aboutsummaryrefslogtreecommitdiff
path: root/src/app/store/mod.rs
diff options
context:
space:
mode:
authorKevin Hoerr <kjhoerr@submelon.dev>2026-04-16 11:37:21 -0400
committerKevin Hoerr <kjhoerr@submelon.dev>2026-04-16 11:37:21 -0400
commit615d44041d35ee1a08ddc66423f67a9d48f53ae9 (patch)
tree9720d6a192e0bae9c7393b8b99ff8ae401ec7f72 /src/app/store/mod.rs
parent51623bc995c29937bb0a13d5b71ff908be8d1a1c (diff)
downloadequity-tracker-615d44041d35ee1a08ddc66423f67a9d48f53ae9.tar.gz
equity-tracker-615d44041d35ee1a08ddc66423f67a9d48f53ae9.tar.bz2
equity-tracker-615d44041d35ee1a08ddc66423f67a9d48f53ae9.zip
Switch to distrobox as base for development
Diffstat (limited to 'src/app/store/mod.rs')
-rw-r--r--src/app/store/mod.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/app/store/mod.rs b/src/app/store/mod.rs
new file mode 100644
index 0000000..d038167
--- /dev/null
+++ b/src/app/store/mod.rs
@@ -0,0 +1,58 @@
+mod sqlite;
+
+use sqlite::{SQLiteStore};
+use miette::{Diagnostic, Result};
+use thiserror::Error;
+
+pub enum Context {
+ SQLite(SQLiteStore),
+}
+
+#[derive(Debug, Diagnostic, Error)]
+pub enum ContextError {
+ #[error("Data storage error")]
+ DataError(#[from] ::sqlite::Error),
+ #[error("Int conversion error")]
+ ConversionError(#[from] std::num::TryFromIntError),
+}
+
+impl Default for Context {
+ fn default() -> Self {
+ Context::SQLite(SQLiteStore::default())
+ }
+}
+
+pub trait Store {
+ fn init(&mut self) -> Result<(), ContextError>;
+ fn get_counter(&self) -> Result<u8, ContextError>;
+ fn set_counter(&mut self, new_count: u8) -> Result<u8, ContextError>;
+}
+
+impl Context {
+ pub fn unwrap_store(&mut self) -> &mut impl Store {
+ match self {
+ Context::SQLite(store) => store,
+ }
+ }
+
+ pub fn get_store(&self) -> &impl Store {
+ match self {
+ Context::SQLite(store) => store,
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn context_default() {
+ let context = Context::default();
+
+ let res = match context {
+ Context::SQLite(_) => true,
+ };
+ assert!(res);
+ }
+}