use std::io; use rusqlite::{Connection, OpenFlags}; #[derive(Debug)] pub enum Error { SqlError(rusqlite::Error), InvalidDrawer(String), InvalidAmount(String), InvalidPayee(String), DoubleSpendingError(String), IOError(io::Error), Testing(String), } pub type CustomResult = Result; trait SQLiteConnectionFactory { fn connection(&self) -> Connection; fn readonly(&self) -> Connection; } pub struct PathSQLiteConnectionFactory { path: String, } impl PathSQLiteConnectionFactory { pub fn new(path: String) -> PathSQLiteConnectionFactory { PathSQLiteConnectionFactory { path } } } impl SQLiteConnectionFactory for PathSQLiteConnectionFactory { fn connection(&self) -> Connection { Connection::open(&self.path).unwrap() } fn readonly(&self) -> Connection { Connection::open_with_flags(&self.path, OpenFlags::SQLITE_OPEN_READ_ONLY).unwrap() } } pub struct InMemorySQLiteConnectionFactory {} impl SQLiteConnectionFactory for InMemorySQLiteConnectionFactory { fn connection(&self) -> Connection { Connection::open_in_memory().unwrap() } fn readonly(&self) -> Connection { Connection::open_in_memory_with_flags(OpenFlags::SQLITE_OPEN_READ_ONLY).unwrap() } }