use core::fmt;
use crate::to_css::ToCss;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum FlexDirection {
Row,
RowReverse,
Column,
ColumnReverse,
}
impl ToCss for FlexDirection {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
FlexDirection::Row => "row",
FlexDirection::RowReverse => "row-reverse",
FlexDirection::Column => "column",
FlexDirection::ColumnReverse => "column-reverse",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum FlexWrap {
Nowrap,
Wrap,
WrapReverse,
}
impl ToCss for FlexWrap {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
FlexWrap::Nowrap => "nowrap",
FlexWrap::Wrap => "wrap",
FlexWrap::WrapReverse => "wrap-reverse",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum JustifyContent {
Stretch,
FlexStart,
FlexEnd,
Center,
SpaceBetween,
SpaceAround,
SpaceEvenly,
Start,
End,
}
impl ToCss for JustifyContent {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
JustifyContent::Stretch => "stretch",
JustifyContent::FlexStart => "flex-start",
JustifyContent::FlexEnd => "flex-end",
JustifyContent::Center => "center",
JustifyContent::SpaceBetween => "space-between",
JustifyContent::SpaceAround => "space-around",
JustifyContent::SpaceEvenly => "space-evenly",
JustifyContent::Start => "start",
JustifyContent::End => "end",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum AlignItems {
Stretch,
FlexStart,
FlexEnd,
Center,
Baseline,
Start,
End,
}
impl ToCss for AlignItems {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
AlignItems::Stretch => "stretch",
AlignItems::FlexStart => "flex-start",
AlignItems::FlexEnd => "flex-end",
AlignItems::Center => "center",
AlignItems::Baseline => "baseline",
AlignItems::Start => "start",
AlignItems::End => "end",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum AlignSelf {
Auto,
Stretch,
FlexStart,
FlexEnd,
Center,
Baseline,
Start,
End,
}
impl ToCss for AlignSelf {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
AlignSelf::Auto => "auto",
AlignSelf::Stretch => "stretch",
AlignSelf::FlexStart => "flex-start",
AlignSelf::FlexEnd => "flex-end",
AlignSelf::Center => "center",
AlignSelf::Baseline => "baseline",
AlignSelf::Start => "start",
AlignSelf::End => "end",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum AlignContent {
Stretch,
FlexStart,
FlexEnd,
Center,
SpaceBetween,
SpaceAround,
SpaceEvenly,
}
impl ToCss for AlignContent {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
AlignContent::Stretch => "stretch",
AlignContent::FlexStart => "flex-start",
AlignContent::FlexEnd => "flex-end",
AlignContent::Center => "center",
AlignContent::SpaceBetween => "space-between",
AlignContent::SpaceAround => "space-around",
AlignContent::SpaceEvenly => "space-evenly",
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn flex_direction_all() {
let cases = [
(FlexDirection::Row, "row"),
(FlexDirection::RowReverse, "row-reverse"),
(FlexDirection::Column, "column"),
(FlexDirection::ColumnReverse, "column-reverse"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn flex_wrap_all() {
let cases = [
(FlexWrap::Nowrap, "nowrap"),
(FlexWrap::Wrap, "wrap"),
(FlexWrap::WrapReverse, "wrap-reverse"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn justify_content_all() {
let cases = [
(JustifyContent::Stretch, "stretch"),
(JustifyContent::FlexStart, "flex-start"),
(JustifyContent::FlexEnd, "flex-end"),
(JustifyContent::Center, "center"),
(JustifyContent::SpaceBetween, "space-between"),
(JustifyContent::SpaceAround, "space-around"),
(JustifyContent::SpaceEvenly, "space-evenly"),
(JustifyContent::Start, "start"),
(JustifyContent::End, "end"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn align_items_all() {
let cases = [
(AlignItems::Stretch, "stretch"),
(AlignItems::FlexStart, "flex-start"),
(AlignItems::FlexEnd, "flex-end"),
(AlignItems::Center, "center"),
(AlignItems::Baseline, "baseline"),
(AlignItems::Start, "start"),
(AlignItems::End, "end"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn align_self_all() {
let cases = [
(AlignSelf::Auto, "auto"),
(AlignSelf::Stretch, "stretch"),
(AlignSelf::FlexStart, "flex-start"),
(AlignSelf::FlexEnd, "flex-end"),
(AlignSelf::Center, "center"),
(AlignSelf::Baseline, "baseline"),
(AlignSelf::Start, "start"),
(AlignSelf::End, "end"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn align_content_all() {
let cases = [
(AlignContent::Stretch, "stretch"),
(AlignContent::FlexStart, "flex-start"),
(AlignContent::FlexEnd, "flex-end"),
(AlignContent::Center, "center"),
(AlignContent::SpaceBetween, "space-between"),
(AlignContent::SpaceAround, "space-around"),
(AlignContent::SpaceEvenly, "space-evenly"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
}