1use arrayvec::Array;
2use arrayvec::ArrayString;
3
4pub fn truncated_arraystring<A: Array<Item = u8> + Copy>(mut s: &str) -> ArrayString<A> {
5 let mut result = ArrayString::new();
6 if s.len() > result.capacity() {
7 for n in (0..result.capacity() + 1).rev() {
8 if s.is_char_boundary(n) {
9 s = &s[..n];
10 break;
11 }
12 }
13 }
14 result.push_str(s);
15 result
16}
17
18#[cfg(test)]
19mod test {
20 use super::truncated_arraystring;
21 use quickcheck::quickcheck;
22 quickcheck! {
23 fn truncated_arraystring0(v: String) -> bool {
24 truncated_arraystring::<[u8; 0]>(&v);
25 true
26 }
27 fn truncated_arraystring1(v: String) -> bool {
28 truncated_arraystring::<[u8; 1]>(&v);
29 true
30 }
31 fn truncated_arraystring2(v: String) -> bool {
32 truncated_arraystring::<[u8; 2]>(&v);
33 true
34 }
35 fn truncated_arraystring4(v: String) -> bool {
36 truncated_arraystring::<[u8; 4]>(&v);
37 true
38 }
39 fn truncated_arraystring8(v: String) -> bool {
40 truncated_arraystring::<[u8; 8]>(&v);
41 true
42 }
43 fn truncated_arraystring16(v: String) -> bool {
44 truncated_arraystring::<[u8; 16]>(&v);
45 true
46 }
47 }
48}