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()
103 .opacity(Opacity::Fifty)
104 .build();
105
106 assert!(classes.to_css_classes().contains("opacity-50"));
107 }
108
109 #[test]
110 fn test_opacity_serialization() {
111 let opacity = Opacity::SeventyFive;
112 let serialized = serde_json::to_string(&opacity).unwrap();
113 let deserialized: Opacity = serde_json::from_str(&serialized).unwrap();
114 assert_eq!(opacity, deserialized);
115 }
116
117 #[test]
118 fn test_opacity_equality_and_hash() {
119 let opacity1 = Opacity::Fifty;
120 let opacity2 = Opacity::Fifty;
121 let opacity3 = Opacity::SeventyFive;
122
123 assert_eq!(opacity1, opacity2);
124 assert_ne!(opacity1, opacity3);
125
126 use std::collections::hash_map::DefaultHasher;
128 use std::hash::{Hash, Hasher};
129
130 let mut hasher1 = DefaultHasher::new();
131 let mut hasher2 = DefaultHasher::new();
132 opacity1.hash(&mut hasher1);
133 opacity2.hash(&mut hasher2);
134 assert_eq!(hasher1.finish(), hasher2.finish());
135 }
136}