Skip to main content

stratum_components/
common.rs

1//! Shared types used across all stratum-components.
2
3/// Standard size enum used by most components.
4#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
5pub enum Size {
6    /// Extra small
7    Xs,
8    /// Small
9    Sm,
10    /// Medium (default)
11    #[default]
12    Md,
13    /// Large
14    Lg,
15    /// Extra large
16    Xl,
17}
18
19impl Size {
20    /// Get the string representation of this size.
21    pub fn as_str(&self) -> &'static str {
22        match self {
23            Size::Xs => "xs",
24            Size::Sm => "sm",
25            Size::Md => "md",
26            Size::Lg => "lg",
27            Size::Xl => "xl",
28        }
29    }
30}
31
32/// Helper to merge a user-provided class override into a computed class string.
33pub fn merge_classes(computed: &str, user_class: &Option<String>) -> String {
34    match user_class {
35        Some(extra) => format!("{} {}", computed, extra),
36        None => computed.to_string(),
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn size_default_is_md() {
46        assert_eq!(Size::default(), Size::Md);
47    }
48
49    #[test]
50    fn size_as_str() {
51        assert_eq!(Size::Xs.as_str(), "xs");
52        assert_eq!(Size::Sm.as_str(), "sm");
53        assert_eq!(Size::Md.as_str(), "md");
54        assert_eq!(Size::Lg.as_str(), "lg");
55        assert_eq!(Size::Xl.as_str(), "xl");
56    }
57
58    #[test]
59    fn merge_classes_without_override() {
60        let result = merge_classes("btn btn-primary", &None);
61        assert_eq!(result, "btn btn-primary");
62    }
63
64    #[test]
65    fn merge_classes_with_override() {
66        let result = merge_classes("btn btn-primary", &Some("my-custom".to_string()));
67        assert_eq!(result, "btn btn-primary my-custom");
68    }
69}