use core::fmt;
use crate::to_css::ToCss;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum Display {
None,
Flex,
Grid,
Linear,
Relative,
}
impl ToCss for Display {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
Display::None => "none",
Display::Flex => "flex",
Display::Grid => "grid",
Display::Linear => "linear",
Display::Relative => "relative",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum PositionKind {
Relative,
Absolute,
Fixed,
Sticky,
}
impl ToCss for PositionKind {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
PositionKind::Relative => "relative",
PositionKind::Absolute => "absolute",
PositionKind::Fixed => "fixed",
PositionKind::Sticky => "sticky",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum Overflow {
Visible,
Hidden,
}
impl ToCss for Overflow {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
Overflow::Visible => "visible",
Overflow::Hidden => "hidden",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum Visibility {
Visible,
Hidden,
}
impl ToCss for Visibility {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
Visibility::Visible => "visible",
Visibility::Hidden => "hidden",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum BoxSizing {
ContentBox,
BorderBox,
}
impl ToCss for BoxSizing {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
BoxSizing::ContentBox => "content-box",
BoxSizing::BorderBox => "border-box",
})
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum PointerEvents {
Auto,
None,
}
impl ToCss for PointerEvents {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
dest.write_str(match self {
PointerEvents::Auto => "auto",
PointerEvents::None => "none",
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_keywords() {
let cases = [
(Display::None, "none"),
(Display::Flex, "flex"),
(Display::Grid, "grid"),
(Display::Linear, "linear"),
(Display::Relative, "relative"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn position_keywords() {
let cases = [
(PositionKind::Relative, "relative"),
(PositionKind::Absolute, "absolute"),
(PositionKind::Fixed, "fixed"),
(PositionKind::Sticky, "sticky"),
];
for (k, expected) in cases {
assert_eq!(k.to_css_string(), expected);
}
}
#[test]
fn overflow_keywords() {
assert_eq!(Overflow::Visible.to_css_string(), "visible");
assert_eq!(Overflow::Hidden.to_css_string(), "hidden");
}
#[test]
fn visibility_keywords() {
assert_eq!(Visibility::Visible.to_css_string(), "visible");
assert_eq!(Visibility::Hidden.to_css_string(), "hidden");
}
#[test]
fn box_sizing_keywords() {
assert_eq!(BoxSizing::ContentBox.to_css_string(), "content-box");
assert_eq!(BoxSizing::BorderBox.to_css_string(), "border-box");
}
#[test]
fn pointer_events_keywords() {
assert_eq!(PointerEvents::Auto.to_css_string(), "auto");
assert_eq!(PointerEvents::None.to_css_string(), "none");
}
}