finql_data/
lib.rs

1///! Implementation of a data handler trait to deal with global data
2use std::fmt;
3
4pub mod asset_handler;
5pub mod quote_handler;
6pub mod transaction_handler;
7pub mod asset;
8pub mod transaction;
9pub mod currency;
10pub mod cash_flow;
11pub mod quote;
12
13pub use asset::Asset;
14pub use asset_handler::AssetHandler;
15pub use quote::{Quote, Ticker};
16pub use quote_handler::QuoteHandler;
17pub use transaction::{Transaction, TransactionType};
18pub use transaction_handler::TransactionHandler;
19pub use currency::{Currency, CurrencyConverter, CurrencyError};
20pub use cash_flow::{CashAmount, CashFlow};
21
22#[derive(Debug)]
23pub enum DataError {
24    DataAccessFailure(String),
25    NotFound(String),
26    UpdateFailed(String),
27    DeleteFailed(String),
28    InsertFailed(String),
29    InvalidTransaction(String),
30}
31
32impl std::error::Error for DataError {
33    fn cause(&self) -> Option<&dyn std::error::Error> {
34        Some(self)
35    }
36}
37
38impl fmt::Display for DataError {
39    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40        match self {
41            Self::DataAccessFailure(err) => write!(f, "connection to database failed: {}", err),
42            Self::NotFound(err) => write!(f, "could not found request object in database: {}", err),
43            Self::UpdateFailed(err) => write!(f, "update of object in database failed: {}", err),
44            Self::DeleteFailed(err) => write!(f, "removing object from database failed: {}", err),
45            Self::InsertFailed(err) => write!(f, "inserting object to database failed: {}", err),
46            Self::InvalidTransaction(err) => write!(f, "invalid transaction type: {}", err),
47        }
48    }
49}
50
51pub trait DataItem {
52    // get id or return error if id hasn't been set yet
53    fn get_id(&self) -> Result<usize, DataError>;
54    // set id or return error if id has already been set
55    fn set_id(&mut self, id: usize) -> Result<(), DataError>;
56}