Skip to main content

libtw2_common/
str.rs

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}