use std::cmp::min;
#[derive(Debug, Clone, Copy)]
pub enum SizeConstraint {
Free,
Full,
Fixed(usize),
AtMost(usize),
AtLeast(usize),
}
impl SizeConstraint {
pub fn available(self, available: usize) -> usize {
match self {
SizeConstraint::Free |
SizeConstraint::Full |
SizeConstraint::AtLeast(_) => available,
SizeConstraint::Fixed(value) |
SizeConstraint::AtMost(value) => min(value, available),
}
}
pub fn result(self, (result, available): (usize, usize)) -> usize {
match self {
SizeConstraint::AtLeast(value) if result < value => value,
SizeConstraint::AtMost(value) if result > value => value,
SizeConstraint::Fixed(value) => value,
SizeConstraint::Full => available,
_ => result,
}
}
}