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}