| use crate::error::WireError; |
| use crate::wire_format::WireType; |
| use crate::CodedInputStream; |
| |
| pub(crate) fn read_map_template_new( |
| is: &mut CodedInputStream, |
| mut key: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>, |
| mut value: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>, |
| ) -> crate::Result<()> { |
| let len = is.read_raw_varint32()?; |
| let old_limit = is.push_limit(len as u64)?; |
| while !is.eof()? { |
| let (field_number, wire_type) = is.read_tag_unpack()?; |
| match field_number { |
| 1 => key(wire_type, is)?, |
| 2 => value(wire_type, is)?, |
| _ => is.skip_field(wire_type)?, |
| } |
| } |
| is.pop_limit(old_limit); |
| Ok(()) |
| } |
| |
| pub(crate) fn read_map_template( |
| wire_type: WireType, |
| is: &mut CodedInputStream, |
| key: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>, |
| value: impl FnMut(WireType, &mut CodedInputStream) -> crate::Result<()>, |
| ) -> crate::Result<()> { |
| if wire_type != WireType::LengthDelimited { |
| return Err(WireError::UnexpectedWireType(wire_type).into()); |
| } |
| |
| read_map_template_new(is, key, value) |
| } |