made-core 0.7.7

Domain core of MADE: entities, value objects, events, ports. No IO.
Documentation
use async_trait::async_trait;

use crate::entities::BudgetLedgerEvent;
use crate::value_objects::{
    BudgetAccountId, BudgetLedgerVersion, BudgetPageLimit, BudgetReservationId,
};
use crate::DomainError;

use super::{BudgetAppendOutcome, BudgetLedgerSnapshot, BudgetReservationPage};

#[async_trait]
pub trait BudgetLedgerStorePort: Send + Sync {
    async fn load(
        &self,
        account: &BudgetAccountId,
    ) -> Result<Option<BudgetLedgerSnapshot>, DomainError>;
    async fn append(
        &self,
        account: &BudgetAccountId,
        expected: BudgetLedgerVersion,
        events: Vec<BudgetLedgerEvent>,
    ) -> Result<BudgetAppendOutcome, DomainError>;
    async fn pending(
        &self,
        after: Option<&BudgetReservationId>,
        limit: BudgetPageLimit,
    ) -> Result<BudgetReservationPage, DomainError>;
}