use cssparser::match_ignore_ascii_case;
use taffy::Overflow as TaffyOverflow;
use crate::layout::style::{declare_enum_from_css_impl, tw::TailwindPropertyParser};
#[derive(Debug, Clone, Copy, PartialEq, Default)]
#[non_exhaustive]
pub enum Overflow {
#[default]
Visible,
Clip,
Hidden,
}
declare_enum_from_css_impl!(
Overflow,
"visible" => Overflow::Visible,
"clip" => Overflow::Clip,
"hidden" => Overflow::Hidden,
);
impl TailwindPropertyParser for Overflow {
fn parse_tw(token: &str) -> Option<Self> {
match_ignore_ascii_case! {token,
"visible" => Some(Overflow::Visible),
"clip" => Some(Overflow::Clip),
"hidden" => Some(Overflow::Hidden),
_ => None,
}
}
}
impl From<Overflow> for TaffyOverflow {
fn from(val: Overflow) -> Self {
match val {
Overflow::Visible => TaffyOverflow::Visible,
Overflow::Clip => TaffyOverflow::Clip,
Overflow::Hidden => TaffyOverflow::Hidden,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::layout::style::FromCss;
#[test]
fn parses_css_clip() {
assert_eq!(Overflow::from_str("clip"), Ok(Overflow::Clip));
}
#[test]
fn parses_tailwind_clip() {
assert_eq!(Overflow::parse_tw("clip"), Some(Overflow::Clip));
}
}