1 use crate::fixed::ProtobufFixed;
2 use crate::rt::compute_raw_varint32_size;
3 use crate::rt::tag_size;
4 use crate::varint::generic::ProtobufVarint;
5 use crate::zigzag::ProtobufVarintZigzag;
6 use crate::Enum;
7 use crate::EnumOrUnknown;
8 
9 /// Size of serialized repeated packed field, excluding length and tag.
vec_packed_varint_data_size<T: ProtobufVarint>(vec: &[T]) -> u6410 pub(crate) fn vec_packed_varint_data_size<T: ProtobufVarint>(vec: &[T]) -> u64 {
11     vec.iter().map(|v| v.len_varint() as u64).sum()
12 }
13 
14 /// Size of serialized repeated packed field, excluding length and tag.
vec_packed_varint_zigzag_data_size<T: ProtobufVarintZigzag>(vec: &[T]) -> u6415 pub(crate) fn vec_packed_varint_zigzag_data_size<T: ProtobufVarintZigzag>(vec: &[T]) -> u64 {
16     vec.iter().map(|v| v.len_varint_zigzag()).sum()
17 }
18 
19 /// Size of serialized repeated packed enum field, excluding length and tag.
vec_packed_enum_or_unknown_data_size<E: Enum>(vec: &[EnumOrUnknown<E>]) -> u6420 pub(crate) fn vec_packed_enum_or_unknown_data_size<E: Enum>(vec: &[EnumOrUnknown<E>]) -> u64 {
21     vec.iter()
22         .map(|e| compute_raw_varint32_size(e.value() as u32))
23         .sum()
24 }
25 
26 /// Size of serialized data with length prefix and tag
27 #[inline]
vec_packed_varint_size<T: ProtobufVarint>(field_number: u32, vec: &[T]) -> u6428 fn vec_packed_varint_size<T: ProtobufVarint>(field_number: u32, vec: &[T]) -> u64 {
29     if vec.is_empty() {
30         0
31     } else {
32         let data_size = vec_packed_varint_data_size(vec);
33         tag_size(field_number) + data_size.len_varint() + data_size
34     }
35 }
36 
37 /// Size of serialized data with length prefix and tag.
38 #[inline]
vec_packed_int32_size(field_number: u32, vec: &[i32]) -> u6439 pub fn vec_packed_int32_size(field_number: u32, vec: &[i32]) -> u64 {
40     vec_packed_varint_size(field_number, vec)
41 }
42 
43 /// Size of serialized data with length prefix and tag.
44 #[inline]
vec_packed_int64_size(field_number: u32, vec: &[i64]) -> u6445 pub fn vec_packed_int64_size(field_number: u32, vec: &[i64]) -> u64 {
46     vec_packed_varint_size(field_number, vec)
47 }
48 
49 /// Size of serialized data with length prefix and tag.
50 #[inline]
vec_packed_uint32_size(field_number: u32, vec: &[u32]) -> u6451 pub fn vec_packed_uint32_size(field_number: u32, vec: &[u32]) -> u64 {
52     vec_packed_varint_size(field_number, vec)
53 }
54 
55 /// Size of serialized data with length prefix and tag.
56 #[inline]
vec_packed_uint64_size(field_number: u32, vec: &[u64]) -> u6457 pub fn vec_packed_uint64_size(field_number: u32, vec: &[u64]) -> u64 {
58     vec_packed_varint_size(field_number, vec)
59 }
60 
61 /// Size of serialized data with length prefix and tag
62 #[inline]
vec_packed_varint_zigzag_size<T: ProtobufVarintZigzag>(field_number: u32, vec: &[T]) -> u6463 fn vec_packed_varint_zigzag_size<T: ProtobufVarintZigzag>(field_number: u32, vec: &[T]) -> u64 {
64     if vec.is_empty() {
65         0
66     } else {
67         let data_size = vec_packed_varint_zigzag_data_size(vec);
68         tag_size(field_number) + data_size.len_varint() + data_size
69     }
70 }
71 
72 /// Size of serialized data with length prefix and tag.
73 #[inline]
vec_packed_sint32_size(field_number: u32, vec: &[i32]) -> u6474 pub fn vec_packed_sint32_size(field_number: u32, vec: &[i32]) -> u64 {
75     vec_packed_varint_zigzag_size(field_number, vec)
76 }
77 
78 /// Size of serialized data with length prefix and tag.
79 #[inline]
vec_packed_sint64_size(field_number: u32, vec: &[i64]) -> u6480 pub fn vec_packed_sint64_size(field_number: u32, vec: &[i64]) -> u64 {
81     vec_packed_varint_zigzag_size(field_number, vec)
82 }
83 
84 /// Size of serialized data with length prefix and tag
85 #[inline]
vec_packed_enum_or_unknown_size<E: Enum>( field_number: u32, vec: &[EnumOrUnknown<E>], ) -> u6486 pub fn vec_packed_enum_or_unknown_size<E: Enum>(
87     field_number: u32,
88     vec: &[EnumOrUnknown<E>],
89 ) -> u64 {
90     if vec.is_empty() {
91         0
92     } else {
93         let data_size = vec_packed_enum_or_unknown_data_size(vec);
94         tag_size(field_number) + data_size.len_varint() + data_size
95     }
96 }
97 
98 /// Compute data size of fixed encoding of repeated field data.
vec_packed_fixed_data_size<V: ProtobufFixed>(vec: &[V]) -> u6499 pub(crate) fn vec_packed_fixed_data_size<V: ProtobufFixed>(vec: &[V]) -> u64 {
100     (vec.len() as u64) * (V::LEN as u64)
101 }
102 
103 /// Compute field size (data plus header) of fixed encoding of repeated field.
104 #[inline]
vec_packed_fixed_size<V: ProtobufFixed>(field_number: u32, vec: &[V]) -> u64105 fn vec_packed_fixed_size<V: ProtobufFixed>(field_number: u32, vec: &[V]) -> u64 {
106     if vec.is_empty() {
107         0
108     } else {
109         let data_size = vec_packed_fixed_data_size::<V>(vec);
110         tag_size(field_number) + data_size.len_varint() + data_size
111     }
112 }
113 
114 /// Compute data size of fixed encoding of repeated field data.
115 #[inline]
vec_packed_fixed32_size(field_number: u32, vec: &[u32]) -> u64116 pub fn vec_packed_fixed32_size(field_number: u32, vec: &[u32]) -> u64 {
117     vec_packed_fixed_size(field_number, vec)
118 }
119 
120 /// Compute data size of fixed encoding of repeated field data.
121 #[inline]
vec_packed_fixed64_size(field_number: u32, vec: &[u64]) -> u64122 pub fn vec_packed_fixed64_size(field_number: u32, vec: &[u64]) -> u64 {
123     vec_packed_fixed_size(field_number, vec)
124 }
125 
126 /// Compute data size of fixed encoding of repeated field data.
127 #[inline]
vec_packed_sfixed32_size(field_number: u32, vec: &[i32]) -> u64128 pub fn vec_packed_sfixed32_size(field_number: u32, vec: &[i32]) -> u64 {
129     vec_packed_fixed_size(field_number, vec)
130 }
131 
132 /// Compute data size of fixed encoding of repeated field data.
133 #[inline]
vec_packed_sfixed64_size(field_number: u32, vec: &[i64]) -> u64134 pub fn vec_packed_sfixed64_size(field_number: u32, vec: &[i64]) -> u64 {
135     vec_packed_fixed_size(field_number, vec)
136 }
137 
138 /// Compute data size of fixed encoding of repeated field data.
139 #[inline]
vec_packed_float_size(field_number: u32, vec: &[f32]) -> u64140 pub fn vec_packed_float_size(field_number: u32, vec: &[f32]) -> u64 {
141     vec_packed_fixed_size(field_number, vec)
142 }
143 
144 /// Compute data size of fixed encoding of repeated field data.
145 #[inline]
vec_packed_double_size(field_number: u32, vec: &[f64]) -> u64146 pub fn vec_packed_double_size(field_number: u32, vec: &[f64]) -> u64 {
147     vec_packed_fixed_size(field_number, vec)
148 }
149 
150 /// Compute data size of fixed encoding of repeated field data.
151 #[inline]
vec_packed_bool_size(field_number: u32, vec: &[bool]) -> u64152 pub fn vec_packed_bool_size(field_number: u32, vec: &[bool]) -> u64 {
153     vec_packed_fixed_size(field_number, vec)
154 }
155