ratatui_core/layout/
direction.rs1use strum::{Display, EnumString};
2
3#[derive(Debug, Default, Display, EnumString, Clone, Copy, Eq, PartialEq, Hash)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub enum Direction {
15 Horizontal,
17 #[default]
19 Vertical,
20}
21
22impl Direction {
23 #[inline]
27 #[must_use = "returns the perpendicular direction"]
28 pub const fn perpendicular(self) -> Self {
29 match self {
30 Self::Horizontal => Self::Vertical,
31 Self::Vertical => Self::Horizontal,
32 }
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use alloc::string::ToString;
39
40 use strum::ParseError;
41
42 use super::*;
43
44 #[test]
45 fn direction_to_string() {
46 assert_eq!(Direction::Horizontal.to_string(), "Horizontal");
47 assert_eq!(Direction::Vertical.to_string(), "Vertical");
48 }
49
50 #[test]
51 fn direction_from_str() {
52 assert_eq!("Horizontal".parse::<Direction>(), Ok(Direction::Horizontal));
53 assert_eq!("Vertical".parse::<Direction>(), Ok(Direction::Vertical));
54 assert_eq!("".parse::<Direction>(), Err(ParseError::VariantNotFound));
55 }
56
57 #[test]
58 fn other() {
59 use Direction::*;
60 assert_eq!(Horizontal.perpendicular(), Vertical);
61 assert_eq!(Vertical.perpendicular(), Horizontal);
62 }
63}