1use 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 fn get_id(&self) -> Result<usize, DataError>;
54 fn set_id(&mut self, id: usize) -> Result<(), DataError>;
56}