firmware_controller/
util.rs

1/// Convert to snake case, assuming pascal case.
2///
3/// If `s` is already in snake case, should yield the same result.
4pub(crate) fn pascal_to_snake_case(s: &str) -> String {
5    let mut snake = String::new();
6    for ch in s.chars() {
7        if ch.is_ascii_uppercase() && !snake.is_empty() {
8            snake.push('_');
9        }
10        snake.push(ch.to_ascii_lowercase());
11    }
12    snake
13}
14
15// Convert to pascal case, assuming snake case.
16//
17// If `s` is already in pascal case, should yield the same result.
18pub(crate) fn snake_to_pascal_case(s: &str) -> String {
19    let mut pascal = String::new();
20    let mut capitalize = true;
21    for ch in s.chars() {
22        if ch == '_' {
23            capitalize = true;
24        } else if capitalize {
25            pascal.push(ch.to_ascii_uppercase());
26            capitalize = false;
27        } else {
28            pascal.push(ch);
29        }
30    }
31    pascal
32}