aboutsummaryrefslogtreecommitdiff
path: root/src/main/rust
diff options
context:
space:
mode:
authorKevin Hoerr <kjhoerr@submelon.dev>2026-02-25 22:28:26 +0000
committerKevin Hoerr <kjhoerr@submelon.dev>2026-02-25 22:28:26 +0000
commit8a4f311c1d1fa4d978c93e58d95bf59a8a38b587 (patch)
tree2d0b2c526d4bc25ba048664e77519cf278702a37 /src/main/rust
parentd96b45f468a1587fd0ba1e8ecd0552478d7e6f90 (diff)
downloadequity-tracker-8a4f311c1d1fa4d978c93e58d95bf59a8a38b587.tar.gz
equity-tracker-8a4f311c1d1fa4d978c93e58d95bf59a8a38b587.tar.bz2
equity-tracker-8a4f311c1d1fa4d978c93e58d95bf59a8a38b587.zip
Add context and initialization
Diffstat (limited to 'src/main/rust')
-rw-r--r--src/main/rust/main.rs18
-rw-r--r--src/main/rust/store/mod.rs32
-rw-r--r--src/main/rust/store/sqlite.rs48
3 files changed, 96 insertions, 2 deletions
diff --git a/src/main/rust/main.rs b/src/main/rust/main.rs
index e231aae..0805796 100644
--- a/src/main/rust/main.rs
+++ b/src/main/rust/main.rs
@@ -1,3 +1,5 @@
+pub mod store;
+
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
use miette::{Diagnostic, IntoDiagnostic, Result};
use ratatui::{
@@ -9,10 +11,12 @@ use ratatui::{
text::{Line, Text},
widgets::{Block, Paragraph, Widget},
};
+use store::{Context, Store};
use thiserror::Error;
-#[derive(Debug, Default)]
+#[derive(Default)]
pub struct App {
+ context: Context,
counter: u8,
exit: bool,
}
@@ -27,10 +31,20 @@ pub struct OverflowError {
#[cfg(not(tarpaulin_include))]
fn main() -> Result<()> {
- ratatui::run(|term| App::default().run(term))
+ ratatui::run(|term| App::default().init_context()?.run(term))
}
impl App {
+ // Initializes context
+ pub fn init_context(&mut self) -> Result<&mut Self> {
+ match &mut self.context {
+ Context::SQLite(s) => {
+ s.init()?;
+ }
+ }
+ Ok(self)
+ }
+
/// runs the application's main loop until the user quits
#[cfg(not(tarpaulin_include))]
pub fn run(&mut self, terminal: &mut DefaultTerminal) -> Result<()> {
diff --git a/src/main/rust/store/mod.rs b/src/main/rust/store/mod.rs
new file mode 100644
index 0000000..42f1809
--- /dev/null
+++ b/src/main/rust/store/mod.rs
@@ -0,0 +1,32 @@
+pub mod sqlite;
+
+use miette::Result;
+
+pub enum Context {
+ SQLite(sqlite::SQLite),
+}
+
+impl Default for Context {
+ fn default() -> Self {
+ Context::SQLite(sqlite::SQLite::default())
+ }
+}
+
+pub trait Store {
+ fn init(&mut self) -> Result<()>;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn context_default() {
+ let context = Context::default();
+
+ let res = match context {
+ Context::SQLite(_) => true,
+ };
+ assert!(res);
+ }
+}
diff --git a/src/main/rust/store/sqlite.rs b/src/main/rust/store/sqlite.rs
new file mode 100644
index 0000000..734c635
--- /dev/null
+++ b/src/main/rust/store/sqlite.rs
@@ -0,0 +1,48 @@
+use crate::store::Store;
+use miette::{IntoDiagnostic, Result};
+use sqlite::Connection;
+
+pub struct SQLite {
+ location: String,
+ connection: Option<Connection>,
+}
+
+impl Default for SQLite {
+ fn default() -> Self {
+ SQLite {
+ location: ":memory:".into(),
+ connection: Option::None,
+ }
+ }
+}
+
+impl Store for SQLite {
+ fn init(&mut self) -> Result<()> {
+ let conn_path = self.location.clone();
+ self.connection = sqlite::open(conn_path).into_diagnostic().ok();
+ Ok(())
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn sqlite_default() {
+ let context = SQLite::default();
+
+ assert_eq!(context.location, ":memory:");
+ assert!(context.connection.is_none());
+ }
+
+ #[test]
+ fn sqlite_init() {
+ let mut context = SQLite::default();
+
+ let res = context.init();
+
+ assert!(res.is_ok());
+ assert!(context.connection.is_some());
+ }
+}