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