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) }