use std::sync::Arc;
use std::time::Duration;
use crate::{BudgetId, Resource};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Remaining {
Unlimited,
Limited(u64),
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ResourceSnapshot {
pub resource: Resource,
pub local_limit: Option<u64>,
pub consumed: u64,
pub reserved: u64,
pub effective_remaining: Remaining,
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BudgetSnapshot {
pub id: BudgetId,
pub name: Option<Arc<str>>,
pub resources: Vec<ResourceSnapshot>,
pub deadline_remaining: Option<Duration>,
#[cfg(feature = "tokio")]
pub cancelled: bool,
}