made_core/
budget_error.rs1use 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}