pub fn chunk(text: &str, size: usize, overlap: usize) -> Vec { let chars: Vec = 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 }