made-core 0.7.4

Domain core of MADE: entities, value objects, events, ports. No IO.
Documentation
use super::{BudgetTokenCount, CostMicros, ExecutionDuration, ToolCallCount};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct BudgetQuantities {
    duration: ExecutionDuration,
    tokens: BudgetTokenCount,
    cost: CostMicros,
    tool_calls: ToolCallCount,
}
impl BudgetQuantities {
    #[must_use]
    pub const fn new(
        duration: ExecutionDuration,
        tokens: BudgetTokenCount,
        cost: CostMicros,
        tool_calls: ToolCallCount,
    ) -> Self {
        Self {
            duration,
            tokens,
            cost,
            tool_calls,
        }
    }
    #[must_use]
    pub const fn duration(self) -> ExecutionDuration {
        self.duration
    }
    #[must_use]
    pub const fn tokens(self) -> BudgetTokenCount {
        self.tokens
    }
    #[must_use]
    pub const fn cost(self) -> CostMicros {
        self.cost
    }
    #[must_use]
    pub const fn tool_calls(self) -> ToolCallCount {
        self.tool_calls
    }
    #[must_use]
    pub const fn is_zero(self) -> bool {
        self.duration.as_micros() == 0
            && self.tokens.value() == 0
            && self.cost.value() == 0
            && self.tool_calls.value() == 0
    }
}