if values.is_empty() { fields.remove(field); } Some(value) } } fn remove_and_concatenate_field( fields: &mut BTreeMap<&[u8], Vec<&[u8]>>, field: &[u8], ) -> Option> { let value = fields.remove(field)?; if value.is_empty() { None } else { Some(value.into_iter().flatten().cloned().collect()) } } impl From for ParsedEnvelope { fn from(envelope: RawEnvelope) -> Self { let body = envelope .payload .iter() .enumerate() .position(|(i, push)| i % 2 == 0 && push.is_empty()); let mut fields: BTreeMap<&[u8], Vec<&[u8]>> = BTreeMap::new(); let mut incomplete_field = false; for item in envelope.payload[..body.unwrap_or(envelope.payload.len())].chunks(2) { match item { [key, value] => fields.entry(key).or_default().push(value), _ => incomplete_field = true, } } let duplicate_field = fields.iter().any(|(_key, values)| values.len() > 1); let content_encoding = remove_field(&mut fields, &CONTENT_ENCODING_TAG);