tailwind_css/modules/borders/outline/outline_style/
mod.rs1use crate::StandardValue;
2
3use super::*;
4
5#[doc=include_str!("readme.md")]
6#[derive(Clone, Debug)]
7pub struct TailwindOutlineStyle {
8 kind: StandardValue,
9}
10
11impl<T> From<T> for TailwindOutlineStyle
12where
13 T: Into<String>,
14{
15 fn from(input: T) -> Self {
16 Self { kind: StandardValue::from(input.into()) }
17 }
18}
19
20impl Display for TailwindOutlineStyle {
21 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
22 write!(f, "outline")?;
23 match &self.kind {
24 StandardValue::Keyword(s) => match s.as_str() {
25 "solid" => write!(f, ""),
26 "<NONE>" => write!(f, "-none"),
27 s @ ("dashed" | "dotted" | "double" | "hidden") => write!(f, "-{}", s),
28 _ => write!(f, "-style-{}", s),
29 },
30 StandardValue::Arbitrary(a) => a.write_class(f, "-style-"),
31 }
32 }
33}
34
35impl TailwindInstance for TailwindOutlineStyle {
36 fn attributes(&self, _: &TailwindBuilder) -> CssAttributes {
37 match &self.kind {
38 StandardValue::Keyword(s) => match s.as_str() {
39 "<NONE>" => css_attributes! {
40 "outline" => "2px solid transparent",
41 "outline-offset" => "2px"
42 },
43 _ => css_attributes! {
44 "outline-style" => s
45 },
46 },
47 StandardValue::Arbitrary(s) => css_attributes! {
48 "outline-style" => s.get_properties()
49 },
50 }
51 }
52}
53
54impl TailwindOutlineStyle {
55 pub fn parse(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
57 let kind = match pattern {
58 ["none"] => StandardValue::from("<NONE>"),
59 [] if arbitrary.is_none() => StandardValue::from("solid"),
60 _ => StandardValue::parser("outline-style", &Self::check_valid)(pattern, arbitrary)?,
61 };
62 Ok(Self { kind })
63 }
64 pub fn check_valid(mode: &str) -> bool {
66 let set = BTreeSet::from_iter(vec![
67 "auto", "dashed", "dotted", "double", "groove", "inherit", "initial", "inset", "none", "outset", "revert", "ridge",
68 "solid", "unset",
69 ]);
70 set.contains(mode)
71 }
72}