made_core/entities/
budget_ledger_event.rs1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3
4use crate::value_objects::{
5 BudgetAccountId, BudgetLimits, BudgetOperationId, BudgetQuantities, BudgetReconciliationId,
6 BudgetReservationEstimate, BudgetReservationId, MeasuredBudgetQuantities,
7};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10#[serde(rename_all = "snake_case", tag = "type")]
11pub enum BudgetLedgerEvent {
12 Opened {
13 account_id: BudgetAccountId,
14 limits: BudgetLimits,
15 #[serde(with = "time::serde::rfc3339")]
16 opened_at: OffsetDateTime,
17 },
18 Reserved {
19 account_id: BudgetAccountId,
20 reservation_id: BudgetReservationId,
21 operation_id: BudgetOperationId,
22 quantities: BudgetQuantities,
23 estimate: BudgetReservationEstimate,
24 #[serde(with = "time::serde::rfc3339")]
25 reserved_at: OffsetDateTime,
26 },
27 Reconciled {
28 account_id: BudgetAccountId,
29 reservation_id: BudgetReservationId,
30 reconciliation_id: BudgetReconciliationId,
31 measured: MeasuredBudgetQuantities,
32 #[serde(with = "time::serde::rfc3339")]
33 reconciled_at: OffsetDateTime,
34 },
35}
36
37impl BudgetLedgerEvent {
38 #[must_use]
39 pub const fn account_id(&self) -> &BudgetAccountId {
40 match self {
41 Self::Opened { account_id, .. }
42 | Self::Reserved { account_id, .. }
43 | Self::Reconciled { account_id, .. } => account_id,
44 }
45 }
46}