Skip to main content

finance/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum CommodityError {
5    #[error("Can't build the commodity {0}")]
6    Build(String),
7    #[error("Can't find symbol for the commodity {0}")]
8    NoSymbol(String),
9}
10
11#[derive(Debug, Error)]
12pub enum SplitError {
13    #[error("Can't build the split {0}")]
14    Build(String),
15}
16
17#[derive(Debug, Error)]
18pub enum PriceError {
19    #[error("Can't build the price {0}")]
20    Build(String),
21}
22
23#[derive(Debug, Error)]
24pub enum TransactionError {
25    #[error("Can't build the transaction {0}")]
26    Build(String),
27    #[error("Transaction sum is not zero")]
28    ZeroSum,
29    #[error("Inappropriate split applied")]
30    WrongSplit(String),
31}
32
33#[derive(Debug, Error)]
34pub enum AccountError {
35    #[error("Can't build the account {0}")]
36    Build(String),
37}
38
39#[derive(Debug, Error)]
40pub enum BalanceError {
41    #[error(
42        "Missing price conversion for split {split_id}: cannot convert from {from_commodity} to {to_commodity}"
43    )]
44    MissingConversion {
45        split_id: uuid::Uuid,
46        from_commodity: String,
47        to_commodity: String,
48    },
49}
50
51#[derive(Debug, Error)]
52pub enum ReportError {
53    #[error("Missing price conversion: cannot convert {from_commodity} to {to_commodity}")]
54    MissingConversion {
55        from_commodity: String,
56        to_commodity: String,
57    },
58    #[error("Invalid tag filter expression: {0}")]
59    InvalidReportFilter(String),
60}
61
62#[derive(Debug, Error)]
63pub enum FinanceError {
64    #[error("Commodity")]
65    Commodity(#[from] CommodityError),
66    #[error("Split")]
67    Split(#[from] SplitError),
68    #[error("Price")]
69    Price(#[from] PriceError),
70    #[error("Transaction")]
71    Transaction(#[from] TransactionError),
72    #[error("Account")]
73    Account(#[from] AccountError),
74    #[error("Balance")]
75    Balance(#[from] BalanceError),
76    #[error("Report")]
77    Report(#[from] ReportError),
78    #[error("Database error")]
79    DB(#[from] sqlx::Error),
80    #[error("Internal: {0}")]
81    Internal(String),
82}
83
84#[derive(Debug, Error)]
85pub enum TagError {
86    #[error("Can't build the tag {0}")]
87    Build(String),
88}