1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use std::fmt::{Display, Formatter, Result as FmtResult};
pub fn capitalize(txt: String, cap_type: Capitalization) -> Result<String, EmptyStringError> {
let txt = txt.trim();
let mut char_vec = txt.chars().collect::<Vec<char>>();
if let Some(first_char) = char_vec.get_mut(0) {
if first_char.is_whitespace() {
return Err(EmptyStringError);
}
if let Capitalization::UpperCase = cap_type {
first_char.make_ascii_uppercase();
} else {
first_char.make_ascii_lowercase();
}
let mut result = String::new();
for ch in char_vec {
let mut buf = [0; 4];
let str_char = ch.encode_utf8(&mut buf);
result.push_str(str_char);
}
Ok(result)
} else {
Err(EmptyStringError)
}
}
pub fn vec_to_delimited_str<T: Display>(str_vec: &Vec<T>, delimiter: char) -> String {
let mut result = String::new();
for (i, str) in str_vec.iter().enumerate() {
if i > 0 {
result.push(delimiter);
}
result.push_str(str.to_string().as_str())
}
result
}
#[derive(Debug, Clone)]
pub struct EmptyStringError;
impl Display for EmptyStringError {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
write!(f, "The supplied string is empty")
}
}
pub enum Capitalization {
LowerCase,
UpperCase,
}