use thiserror::Error;
use crate::budget::MemoryBudget;
pub type MemoryResult<T> = Result<T, MemoryError>;
#[doc(hidden)]
#[derive(Clone, Copy, Debug, Error, PartialEq, Eq)]
pub enum FootprintOverflow {
#[error("memory footprint addition overflow")]
Addition,
#[error("memory footprint multiplication overflow")]
Multiplication,
#[error("memory footprint conversion overflow")]
Conversion,
}
#[derive(Clone, Debug, Error, PartialEq)]
pub enum MemoryError {
#[error("invalid memory budget: {0}")]
InvalidBudget(String),
#[error("cannot resolve {budget} for {resource}: {basis} memory is unavailable")]
UnknownCapacity {
resource: String,
budget: MemoryBudget,
basis: &'static str,
},
#[error(
"memory budget exceeded for {resource}: requested {requested} bytes, \
{remaining} bytes remain"
)]
BudgetExceeded {
resource: String,
requested: u64,
remaining: u64,
},
}