protobuf/rt/
map.rs
1use crate::error::WireError;
2use crate::wire_format::WireType;
3use crate::CodedInputStream;
4
5pub(crate) fn read_map_template_new(
6 is: &mut CodedInputStream,
7 mut key: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>,
8 mut value: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>,
9) -> crate::Result<()> {
10 let len = is.read_raw_varint32()?;
11 let old_limit = is.push_limit(len as u64)?;
12 while !is.eof()? {
13 let (field_number, wire_type) = is.read_tag_unpack()?;
14 match field_number {
15 1 => key(wire_type, is)?,
16 2 => value(wire_type, is)?,
17 _ => is.skip_field(wire_type)?,
18 }
19 }
20 is.pop_limit(old_limit);
21 Ok(())
22}
23
24pub(crate) fn read_map_template(
25 wire_type: WireType,
26 is: &mut CodedInputStream,
27 key: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>,
28 value: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>,
29) -> crate::Result<()> {
30 if wire_type != WireType::LengthDelimited {
31 return Err(WireError::UnexpectedWireType(wire_type).into());
32 }
33
34 read_map_template_new(is, key, value)
35}