Skip to main content

auto_commit_rs/
ui.rs

1use inquire::Select;
2
3/// Replacement for `inquire::Confirm` — presents a Select with "Yes" / "No" choices.
4/// Returns `default_val` on cancellation (Esc/Ctrl-C).
5pub fn confirm(prompt: &str, default_val: bool) -> bool {
6    let choices = if default_val {
7        vec!["Yes", "No"]
8    } else {
9        vec!["No", "Yes"]
10    };
11    match Select::new(prompt, choices).prompt() {
12        Ok("Yes") => true,
13        Ok("No") => false,
14        _ => default_val,
15    }
16}
17
18/// Strip tree-drawing Unicode characters from a string for cleaner display.
19pub fn strip_tree_chars(s: &str) -> String {
20    s.chars()
21        .filter(|c| {
22            !matches!(
23                c,
24                '\u{2500}'..='\u{257F}' | // Box Drawing block
25                '\u{25B6}' | '\u{25BC}'   // Arrows ▶ ▼
26            )
27        })
28        .collect::<String>()
29        .split_whitespace()
30        .collect::<Vec<_>>()
31        .join(" ")
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37
38    #[test]
39    fn test_strip_tree_chars_branch() {
40        let input = "  ├── Provider              groq";
41        let result = strip_tree_chars(input);
42        assert_eq!(result, "Provider groq");
43    }
44
45    #[test]
46    fn test_strip_tree_chars_last_branch() {
47        let input = "  └── API Key               ****";
48        let result = strip_tree_chars(input);
49        assert_eq!(result, "API Key ****");
50    }
51
52    #[test]
53    fn test_strip_tree_chars_nested() {
54        let input = "  │   ├── Locale              en";
55        let result = strip_tree_chars(input);
56        assert_eq!(result, "Locale en");
57    }
58
59    #[test]
60    fn test_strip_tree_chars_arrow() {
61        let input = "▼ Basic";
62        let result = strip_tree_chars(input);
63        assert_eq!(result, "Basic");
64    }
65
66    #[test]
67    fn test_strip_tree_chars_no_change() {
68        let input = "Save & Exit";
69        let result = strip_tree_chars(input);
70        assert_eq!(result, "Save & Exit");
71    }
72}