• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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