#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Position {
#[default]
Start,
Center,
End,
}
impl Position {
pub const LEFT: Self = Self::Start;
pub const RIGHT: Self = Self::End;
pub const TOP: Self = Self::Start;
pub const BOTTOM: Self = Self::End;
pub fn offset(self, content_size: usize, container_size: usize) -> usize {
if content_size >= container_size {
return 0;
}
let space = container_size - content_size;
match self {
Position::Start => 0,
Position::Center => space / 2,
Position::End => space,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_position_offset() {
assert_eq!(Position::Start.offset(5, 10), 0);
assert_eq!(Position::Center.offset(5, 10), 2); assert_eq!(Position::End.offset(5, 10), 5);
assert_eq!(Position::Center.offset(10, 10), 0);
assert_eq!(Position::Center.offset(15, 10), 0);
}
#[test]
fn test_position_aliases() {
assert_eq!(Position::LEFT, Position::Start);
assert_eq!(Position::RIGHT, Position::End);
assert_eq!(Position::TOP, Position::Start);
assert_eq!(Position::BOTTOM, Position::End);
}
}