Skip to main content

whisker_css/keyword/
border.rs

1//! Border-related keyword enums.
2//!
3//! References:
4//! - <https://lynxjs.org/api/css/properties/border-style>
5
6use core::fmt;
7
8use crate::to_css::ToCss;
9
10/// The `border-style` keyword. Lynx accepts the full CSS set of
11/// border styles for the four sides.
12#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
13pub enum BorderStyle {
14    /// `none` — no border.
15    None,
16    /// `hidden` — no border, but takes priority for border-conflict
17    /// resolution in tables.
18    Hidden,
19    /// `solid` — a single solid line.
20    Solid,
21    /// `dashed` — a series of short dashes.
22    Dashed,
23    /// `dotted` — a series of dots.
24    Dotted,
25    /// `double` — two parallel lines with a gap.
26    Double,
27    /// `groove` — a 3-D grooved appearance.
28    Groove,
29    /// `ridge` — a 3-D ridged appearance.
30    Ridge,
31    /// `inset` — a 3-D inset appearance.
32    Inset,
33    /// `outset` — a 3-D outset appearance.
34    Outset,
35}
36
37impl ToCss for BorderStyle {
38    fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
39        dest.write_str(match self {
40            BorderStyle::None => "none",
41            BorderStyle::Hidden => "hidden",
42            BorderStyle::Solid => "solid",
43            BorderStyle::Dashed => "dashed",
44            BorderStyle::Dotted => "dotted",
45            BorderStyle::Double => "double",
46            BorderStyle::Groove => "groove",
47            BorderStyle::Ridge => "ridge",
48            BorderStyle::Inset => "inset",
49            BorderStyle::Outset => "outset",
50        })
51    }
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57
58    #[test]
59    fn all_border_styles() {
60        let cases = [
61            (BorderStyle::None, "none"),
62            (BorderStyle::Hidden, "hidden"),
63            (BorderStyle::Solid, "solid"),
64            (BorderStyle::Dashed, "dashed"),
65            (BorderStyle::Dotted, "dotted"),
66            (BorderStyle::Double, "double"),
67            (BorderStyle::Groove, "groove"),
68            (BorderStyle::Ridge, "ridge"),
69            (BorderStyle::Inset, "inset"),
70            (BorderStyle::Outset, "outset"),
71        ];
72        for (k, expected) in cases {
73            assert_eq!(k.to_css_string(), expected);
74        }
75    }
76}