pre-rfc3243-libtw2-common 0.2.0

pre-rfc3243-libtw2-common
Documentation
use arrayvec::Array;
use arrayvec::ArrayString;

pub fn truncated_arraystring<A: Array<Item = u8> + Copy>(mut s: &str) -> ArrayString<A> {
    let mut result = ArrayString::new();
    if s.len() > result.capacity() {
        for n in (0..result.capacity() + 1).rev() {
            if s.is_char_boundary(n) {
                s = &s[..n];
                break;
            }
        }
    }
    result.push_str(s);
    result
}

#[cfg(test)]
mod test {
    use super::truncated_arraystring;
    use quickcheck::quickcheck;
    quickcheck! {
        fn truncated_arraystring0(v: String) -> bool {
            truncated_arraystring::<[u8; 0]>(&v);
            true
        }
        fn truncated_arraystring1(v: String) -> bool {
            truncated_arraystring::<[u8; 1]>(&v);
            true
        }
        fn truncated_arraystring2(v: String) -> bool {
            truncated_arraystring::<[u8; 2]>(&v);
            true
        }
        fn truncated_arraystring4(v: String) -> bool {
            truncated_arraystring::<[u8; 4]>(&v);
            true
        }
        fn truncated_arraystring8(v: String) -> bool {
            truncated_arraystring::<[u8; 8]>(&v);
            true
        }
        fn truncated_arraystring16(v: String) -> bool {
            truncated_arraystring::<[u8; 16]>(&v);
            true
        }
    }
}