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; fn set_counter(&mut self, new_count: u8) -> Result; } 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); } }