made_core/value_objects/budget/
budget_reservation.rs1use super::{
2 BudgetOperationId, BudgetQuantities, BudgetReconciliationId, BudgetReservationEstimate,
3 BudgetReservationId, MeasuredBudgetQuantities,
4};
5use serde::{Deserialize, Serialize};
6use time::OffsetDateTime;
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9pub struct BudgetReservation {
10 id: BudgetReservationId,
11 operation_id: BudgetOperationId,
12 quantities: BudgetQuantities,
13 estimate: BudgetReservationEstimate,
14 #[serde(with = "time::serde::rfc3339")]
15 reserved_at: OffsetDateTime,
16 reconciliation: Option<(BudgetReconciliationId, MeasuredBudgetQuantities)>,
17}
18impl BudgetReservation {
19 #[must_use]
20 pub const fn new(
21 id: BudgetReservationId,
22 operation_id: BudgetOperationId,
23 quantities: BudgetQuantities,
24 estimate: BudgetReservationEstimate,
25 reserved_at: OffsetDateTime,
26 ) -> Self {
27 Self {
28 id,
29 operation_id,
30 quantities,
31 estimate,
32 reserved_at,
33 reconciliation: None,
34 }
35 }
36 #[must_use]
37 pub fn id(&self) -> &BudgetReservationId {
38 &self.id
39 }
40 #[must_use]
41 pub fn operation_id(&self) -> &BudgetOperationId {
42 &self.operation_id
43 }
44 #[must_use]
45 pub const fn quantities(&self) -> BudgetQuantities {
46 self.quantities
47 }
48 #[must_use]
49 pub const fn estimate(&self) -> BudgetReservationEstimate {
50 self.estimate
51 }
52 #[must_use]
53 pub const fn reserved_at(&self) -> OffsetDateTime {
54 self.reserved_at
55 }
56 #[must_use]
57 pub const fn reconciliation(
58 &self,
59 ) -> Option<&(BudgetReconciliationId, MeasuredBudgetQuantities)> {
60 self.reconciliation.as_ref()
61 }
62 pub(crate) fn reconcile(
63 &mut self,
64 id: BudgetReconciliationId,
65 measured: MeasuredBudgetQuantities,
66 ) {
67 self.reconciliation = Some((id, measured));
68 }
69}