profileme / src/chunk.rs

raw file 573 bytes
pub fn chunk(text: &str, size: usize, overlap: usize) -> Vec<String> {
    let chars: Vec<char> = text.chars().collect();
    if chars.len() <= size {
        return vec![text.to_string()];
    }
    let mut out = Vec::new();
    let mut i = 0;
    while i < chars.len() {
        let end = (i + size).min(chars.len());
        let piece: String = chars[i..end].iter().collect();
        out.push(piece);
        if end == chars.len() {
            break;
        }
        i = end.saturating_sub(overlap);
        if i == 0 {
            i = end;
        }
    }
    out
}