use crate::error::Error;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Fuel {
limit: u64,
remaining: u64,
}
impl Fuel {
#[must_use]
pub fn new(limit: u64) -> Self {
Self {
limit,
remaining: limit,
}
}
#[must_use]
pub fn limit(&self) -> u64 {
self.limit
}
#[must_use]
pub fn remaining(&self) -> u64 {
self.remaining
}
pub fn spend(self) -> Result<Self, Error> {
match self.remaining {
0 => Err(Error::FuelExhausted { limit: self.limit }),
n => Ok(Self {
limit: self.limit,
remaining: n - 1,
}),
}
}
}