use core::fmt;
use crate::to_css::ToCss;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum LinearOrientation {
Horizontal,
Vertical,
HorizontalReverse,
VerticalReverse,
}
impl ToCss for LinearOrientation {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
LinearOrientation::Horizontal => "horizontal",
LinearOrientation::Vertical => "vertical",
LinearOrientation::HorizontalReverse => "horizontal-reverse",
LinearOrientation::VerticalReverse => "vertical-reverse",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum LinearGravity {
None,
Top,
Bottom,
Left,
Right,
CenterVertical,
CenterHorizontal,
SpaceBetween,
Start,
End,
Center,
}
impl ToCss for LinearGravity {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
LinearGravity::None => "none",
LinearGravity::Top => "top",
LinearGravity::Bottom => "bottom",
LinearGravity::Left => "left",
LinearGravity::Right => "right",
LinearGravity::CenterVertical => "center-vertical",
LinearGravity::CenterHorizontal => "center-horizontal",
LinearGravity::SpaceBetween => "space-between",
LinearGravity::Start => "start",
LinearGravity::End => "end",
LinearGravity::Center => "center",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum LinearCrossGravity {
None,
Start,
End,
Center,
Stretch,
}
impl ToCss for LinearCrossGravity {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
LinearCrossGravity::None => "none",
LinearCrossGravity::Start => "start",
LinearCrossGravity::End => "end",
LinearCrossGravity::Center => "center",
LinearCrossGravity::Stretch => "stretch",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum LinearLayoutGravity {
None,
Start,
End,
Center,
Stretch,
}
impl ToCss for LinearLayoutGravity {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
LinearLayoutGravity::None => "none",
LinearLayoutGravity::Start => "start",
LinearLayoutGravity::End => "end",
LinearLayoutGravity::Center => "center",
LinearLayoutGravity::Stretch => "stretch",
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn linear_orientation_all() {
let cases = [
(LinearOrientation::Horizontal, "horizontal"),
(LinearOrientation::Vertical, "vertical"),
(LinearOrientation::HorizontalReverse, "horizontal-reverse"),
(LinearOrientation::VerticalReverse, "vertical-reverse"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn linear_gravity_all() {
let cases = [
(LinearGravity::None, "none"),
(LinearGravity::Top, "top"),
(LinearGravity::Bottom, "bottom"),
(LinearGravity::Left, "left"),
(LinearGravity::Right, "right"),
(LinearGravity::CenterVertical, "center-vertical"),
(LinearGravity::CenterHorizontal, "center-horizontal"),
(LinearGravity::SpaceBetween, "space-between"),
(LinearGravity::Start, "start"),
(LinearGravity::End, "end"),
(LinearGravity::Center, "center"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn linear_cross_gravity_all() {
let cases = [
(LinearCrossGravity::None, "none"),
(LinearCrossGravity::Start, "start"),
(LinearCrossGravity::End, "end"),
(LinearCrossGravity::Center, "center"),
(LinearCrossGravity::Stretch, "stretch"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn linear_layout_gravity_all() {
let cases = [
(LinearLayoutGravity::None, "none"),
(LinearLayoutGravity::Start, "start"),
(LinearLayoutGravity::End, "end"),
(LinearLayoutGravity::Center, "center"),
(LinearLayoutGravity::Stretch, "stretch"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
}