1 use crate::rt::compute_raw_varint64_size;
2 use crate::rt::singular::bytes_size_no_tag;
3 use crate::rt::tag_size;
4 use crate::wire_format::Tag;
5 use crate::wire_format::WireType;
6 use crate::CodedInputStream;
7 use crate::UnknownFields;
8 use crate::UnknownValueRef;
9
skip_group(is: &mut CodedInputStream) -> crate::Result<()>10 fn skip_group(is: &mut CodedInputStream) -> crate::Result<()> {
11 loop {
12 let (_, wire_type) = is.read_tag_unpack()?;
13 if wire_type == WireType::EndGroup {
14 return Ok(());
15 }
16 is.skip_field(wire_type)?;
17 }
18 }
19
20 /// Size of encoded unknown fields size.
unknown_fields_size(unknown_fields: &UnknownFields) -> u6421 pub fn unknown_fields_size(unknown_fields: &UnknownFields) -> u64 {
22 let mut r = 0;
23 for (number, value) in unknown_fields {
24 r += tag_size(number);
25 r += match value {
26 UnknownValueRef::Fixed32(_) => 4,
27 UnknownValueRef::Fixed64(_) => 8,
28 UnknownValueRef::Varint(v) => compute_raw_varint64_size(v),
29 UnknownValueRef::LengthDelimited(v) => bytes_size_no_tag(v),
30 };
31 }
32 r
33 }
34
35 /// Handle unknown field in generated code.
36 /// Either store a value in unknown, or skip a group.
read_unknown_or_skip_group_with_tag_unpacked( field_number: u32, wire_type: WireType, is: &mut CodedInputStream, unknown_fields: &mut UnknownFields, ) -> crate::Result<()>37 pub(crate) fn read_unknown_or_skip_group_with_tag_unpacked(
38 field_number: u32,
39 wire_type: WireType,
40 is: &mut CodedInputStream,
41 unknown_fields: &mut UnknownFields,
42 ) -> crate::Result<()> {
43 match wire_type {
44 WireType::StartGroup => skip_group(is),
45 _ => {
46 let unknown = is.read_unknown(wire_type)?;
47 unknown_fields.add_value(field_number, unknown);
48 Ok(())
49 }
50 }
51 }
52
53 /// Handle unknown field in generated code.
54 /// Either store a value in unknown, or skip a group.
55 /// Return error if tag is incorrect.
read_unknown_or_skip_group( tag: u32, is: &mut CodedInputStream, unknown_fields: &mut UnknownFields, ) -> crate::Result<()>56 pub fn read_unknown_or_skip_group(
57 tag: u32,
58 is: &mut CodedInputStream,
59 unknown_fields: &mut UnknownFields,
60 ) -> crate::Result<()> {
61 let (field_humber, wire_type) = Tag::new(tag)?.unpack();
62 read_unknown_or_skip_group_with_tag_unpacked(field_humber, wire_type, is, unknown_fields)
63 }
64
65 /// Skip field.
skip_field_for_tag(tag: u32, is: &mut CodedInputStream) -> crate::Result<()>66 pub fn skip_field_for_tag(tag: u32, is: &mut CodedInputStream) -> crate::Result<()> {
67 let (_field_humber, wire_type) = Tag::new(tag)?.unpack();
68 is.skip_field(wire_type)
69 }
70