Skip to main content

made_core/
budget_error.rs

1use thiserror::Error;
2
3use crate::value_objects::{
4    BudgetAccountId, BudgetDimension, BudgetReconciliationId, BudgetReservationId,
5};
6use crate::DomainError;
7
8#[derive(Debug, Clone, PartialEq, Error)]
9pub enum BudgetError {
10    #[error("budget {account_id:?} is exhausted for {dimension:?}")]
11    Exhausted {
12        account_id: BudgetAccountId,
13        dimension: BudgetDimension,
14    },
15    #[error("budget ledger is not open")]
16    LedgerNotOpen,
17    #[error("budget reservation not found: {0:?}")]
18    ReservationNotFound(BudgetReservationId),
19    #[error("budget reservation conflicts with stored identity: {0:?}")]
20    ReservationConflict(BudgetReservationId),
21    #[error("budget reconciliation conflicts with stored observation: {0:?}")]
22    ReconciliationConflict(BudgetReconciliationId),
23    #[error("budget reservation needs an estimate for limited dimension {0:?}")]
24    MissingReservationEstimate(BudgetDimension),
25    #[error("budget persistence failed: {0}")]
26    Persistence(DomainError),
27}
28
29impl From<DomainError> for BudgetError {
30    fn from(value: DomainError) -> Self {
31        Self::Persistence(value)
32    }
33}