pub fn apply(input: &[u8], limit: usize) -> Vec<u8> {
if input.len() <= limit {
return input.to_vec();
}
if let Some(dot_pos) = input.iter().rposition(|&b| b == b'.') {
let ext = &input[dot_pos..]; if ext.len() < limit {
let keep_base = limit - ext.len();
let mut out = Vec::with_capacity(limit);
out.extend_from_slice(&input[..keep_base]);
out.extend_from_slice(ext);
return out;
}
return ext.to_vec();
}
input[..limit].to_vec()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn no_truncation_when_under_limit() {
assert_eq!(apply(b"short.txt", 255), b"short.txt");
}
#[test]
fn truncates_preserving_extension() {
let long = b"abcdefghij.txt"; assert_eq!(apply(long, 10), b"abcdef.txt");
}
#[test]
fn no_dot_just_truncates() {
assert_eq!(apply(b"abcdefghij", 5), b"abcde");
}
#[test]
fn last_dot_wins_for_extension_picker() {
assert_eq!(apply(b"foo.tar.gz", 6), b"foo.gz");
}
}