У меня есть Vec<u8>
, который я хочу разделить на \n
и обработать его построчно.В какой-то момент появляется пустая строка, и я хочу обработать весь оставшийся вектор в одном фрагменте (не построчно).Подобные вещи распространены в HTTP или в объектах коммитов Git.
Например:
key: value
otherkey: othervalue
This is the content
that is now just a big
block. I don't care about
newlines here.
Есть ли элегантный способ разобрать это с Rust?Я могу разделить это следующим образом:
pub fn main() {
let data: Vec<u8> = "key: value\notherkey: othervalue\n\nThis is the content\nthat is now just a big\nblock. I don't care about\nnewlines here.".as_bytes().to_owned();
for line in data.split(|&c| c == '\n' as u8) {
println!("Line: {:?}", line);
if line.len() == 0 {
// Start of message...
} else {
// Header
}
}
}
Однако, когда я добираюсь до \n\n
, я не могу найти способ сказать "дай мне оставшуюся часть Vec
отсюда".Было бы легко, если бы существовала форма split()
, которая возвращала бы фрагменты с индексами вместо фактического содержимого, но я не могу найти ни одного.
Существует ли элегантный способ сделать это, чтоне просто разделить сообщение и затем снова присоединиться к нему?