use ratatui::layout::Constraint;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Spacing {
Xs,
Sm,
Md,
Lg,
Xl,
}
impl Spacing {
#[must_use]
pub const fn cells(self) -> u16 {
match self {
Spacing::Xs => 1,
Spacing::Sm => 2,
Spacing::Md => 3,
Spacing::Lg => 5,
Spacing::Xl => 8,
}
}
}
impl From<Spacing> for Constraint {
fn from(s: Spacing) -> Self {
Constraint::Length(s.cells())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn scale_is_strictly_monotonic() {
let scale = [
Spacing::Xs,
Spacing::Sm,
Spacing::Md,
Spacing::Lg,
Spacing::Xl,
];
for pair in scale.windows(2) {
assert!(
pair[0].cells() < pair[1].cells(),
"{:?}={} ≥ {:?}={}",
pair[0],
pair[0].cells(),
pair[1],
pair[1].cells(),
);
}
}
#[test]
fn into_constraint_is_length() {
let c: Constraint = Spacing::Md.into();
assert_eq!(c, Constraint::Length(3));
}
}