Skip to main content

made_core/value_objects/budget/
budget_reservation.rs

1use 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}