Skip to main content

vespertide_config/
name_case.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4/// Supported naming cases.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
6#[serde(rename_all = "snake_case")]
7pub enum NameCase {
8    Snake,
9    Camel,
10    Pascal,
11}
12
13impl NameCase {
14    /// Returns true when snake case.
15    pub fn is_snake(self) -> bool {
16        matches!(self, NameCase::Snake)
17    }
18
19    /// Returns true when camel case.
20    pub fn is_camel(self) -> bool {
21        matches!(self, NameCase::Camel)
22    }
23
24    /// Returns true when pascal case.
25    pub fn is_pascal(self) -> bool {
26        matches!(self, NameCase::Pascal)
27    }
28
29    /// Returns the serde rename_all attribute value for this case.
30    pub fn serde_rename_all(self) -> &'static str {
31        match self {
32            NameCase::Snake => "snake_case",
33            NameCase::Camel => "camelCase",
34            NameCase::Pascal => "PascalCase",
35        }
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn test_serde_rename_all() {
45        assert_eq!(NameCase::Snake.serde_rename_all(), "snake_case");
46        assert_eq!(NameCase::Camel.serde_rename_all(), "camelCase");
47        assert_eq!(NameCase::Pascal.serde_rename_all(), "PascalCase");
48    }
49}