tailwind_rs_core/utilities/effects/
opacity.rs1use crate::classes::ClassBuilder;
6use serde::{Deserialize, Serialize};
7use std::fmt;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11pub enum Opacity {
12 Zero,
14 Five,
16 Ten,
18 Twenty,
20 TwentyFive,
22 Thirty,
24 Forty,
26 Fifty,
28 Sixty,
30 Seventy,
32 SeventyFive,
34 Eighty,
36 Ninety,
38 NinetyFive,
40 Hundred,
42}
43
44impl fmt::Display for Opacity {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 match self {
47 Opacity::Zero => write!(f, "opacity-0"),
48 Opacity::Five => write!(f, "opacity-5"),
49 Opacity::Ten => write!(f, "opacity-10"),
50 Opacity::Twenty => write!(f, "opacity-20"),
51 Opacity::TwentyFive => write!(f, "opacity-25"),
52 Opacity::Thirty => write!(f, "opacity-30"),
53 Opacity::Forty => write!(f, "opacity-40"),
54 Opacity::Fifty => write!(f, "opacity-50"),
55 Opacity::Sixty => write!(f, "opacity-60"),
56 Opacity::Seventy => write!(f, "opacity-70"),
57 Opacity::SeventyFive => write!(f, "opacity-75"),
58 Opacity::Eighty => write!(f, "opacity-80"),
59 Opacity::Ninety => write!(f, "opacity-90"),
60 Opacity::NinetyFive => write!(f, "opacity-95"),
61 Opacity::Hundred => write!(f, "opacity-100"),
62 }
63 }
64}
65
66pub trait OpacityUtilities {
68 fn opacity(self, opacity: Opacity) -> Self;
69}
70
71impl OpacityUtilities for ClassBuilder {
72 fn opacity(self, opacity: Opacity) -> Self {
73 self.class(opacity.to_string())
74 }
75}
76
77#[cfg(test)]
78mod tests {
79 use super::*;
80
81 #[test]
82 fn test_opacity_display() {
83 assert_eq!(Opacity::Zero.to_string(), "opacity-0");
84 assert_eq!(Opacity::Five.to_string(), "opacity-5");
85 assert_eq!(Opacity::Ten.to_string(), "opacity-10");
86 assert_eq!(Opacity::Twenty.to_string(), "opacity-20");
87 assert_eq!(Opacity::TwentyFive.to_string(), "opacity-25");
88 assert_eq!(Opacity::Thirty.to_string(), "opacity-30");
89 assert_eq!(Opacity::Forty.to_string(), "opacity-40");
90 assert_eq!(Opacity::Fifty.to_string(), "opacity-50");
91 assert_eq!(Opacity::Sixty.to_string(), "opacity-60");
92 assert_eq!(Opacity::Seventy.to_string(), "opacity-70");
93 assert_eq!(Opacity::SeventyFive.to_string(), "opacity-75");
94 assert_eq!(Opacity::Eighty.to_string(), "opacity-80");
95 assert_eq!(Opacity::Ninety.to_string(), "opacity-90");
96 assert_eq!(Opacity::NinetyFive.to_string(), "opacity-95");
97 assert_eq!(Opacity::Hundred.to_string(), "opacity-100");
98 }
99
100 #[test]
101 fn test_opacity_utilities() {
102 let classes = ClassBuilder::new().opacity(Opacity::Fifty).build();
103
104 assert!(classes.to_css_classes().contains("opacity-50"));
105 }
106
107 #[test]
108 fn test_opacity_serialization() {
109 let opacity = Opacity::SeventyFive;
110 let serialized = serde_json::to_string(&opacity).unwrap();
111 let deserialized: Opacity = serde_json::from_str(&serialized).unwrap();
112 assert_eq!(opacity, deserialized);
113 }
114
115 #[test]
116 fn test_opacity_equality_and_hash() {
117 let opacity1 = Opacity::Fifty;
118 let opacity2 = Opacity::Fifty;
119 let opacity3 = Opacity::SeventyFive;
120
121 assert_eq!(opacity1, opacity2);
122 assert_ne!(opacity1, opacity3);
123
124 use std::collections::hash_map::DefaultHasher;
126 use std::hash::{Hash, Hasher};
127
128 let mut hasher1 = DefaultHasher::new();
129 let mut hasher2 = DefaultHasher::new();
130 opacity1.hash(&mut hasher1);
131 opacity2.hash(&mut hasher2);
132 assert_eq!(hasher1.finish(), hasher2.finish());
133 }
134}