1use inquire::Select;
2
3pub 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
18pub fn strip_tree_chars(s: &str) -> String {
20 s.chars()
21 .filter(|c| {
22 !matches!(
23 c,
24 '\u{2500}'..='\u{257F}' | '\u{25B6}' | '\u{25BC}' )
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}