MCPcopy Create free account
hub / github.com/apache/thrift / skip_till_depth

Method skip_till_depth

lib/rs/src/protocol/mod.rs:196–257  ·  view source on GitHub ↗

Skip a field with type `field_type` recursively up to `depth` levels.

(&mut self, field_type: TType, depth: i8)

Source from the content-addressed store, hash-verified

194 }
195 /// Skip a field with type `field_type` recursively up to `depth` levels.
196 fn skip_till_depth(&mut self, field_type: TType, depth: i8) -> crate::Result<()> {
197 if depth == 0 {
198 return Err(crate::Error::Protocol(ProtocolError {
199 kind: ProtocolErrorKind::DepthLimit,
200 message: format!("cannot parse past {:?}", field_type),
201 }));
202 }
203
204 match field_type {
205 TType::Bool => self.read_bool().map(|_| ()),
206 TType::I08 => self.read_i8().map(|_| ()),
207 TType::I16 => self.read_i16().map(|_| ()),
208 TType::I32 => self.read_i32().map(|_| ()),
209 TType::I64 => self.read_i64().map(|_| ()),
210 TType::Double => self.read_double().map(|_| ()),
211 TType::String => self.read_bytes().map(|_| ()),
212 TType::Uuid => self.read_uuid().map(|_| ()),
213 TType::Struct => {
214 self.read_struct_begin()?;
215 loop {
216 let field_ident = self.read_field_begin()?;
217 if field_ident.field_type == TType::Stop {
218 break;
219 }
220 self.skip_till_depth(field_ident.field_type, depth - 1)?;
221 }
222 self.read_struct_end()
223 }
224 TType::List => {
225 let list_ident = self.read_list_begin()?;
226 for _ in 0..list_ident.size {
227 self.skip_till_depth(list_ident.element_type, depth - 1)?;
228 }
229 self.read_list_end()
230 }
231 TType::Set => {
232 let set_ident = self.read_set_begin()?;
233 for _ in 0..set_ident.size {
234 self.skip_till_depth(set_ident.element_type, depth - 1)?;
235 }
236 self.read_set_end()
237 }
238 TType::Map => {
239 let map_ident = self.read_map_begin()?;
240 for _ in 0..map_ident.size {
241 let key_type = map_ident
242 .key_type
243 .expect("non-zero sized map should contain key type");
244 let val_type = map_ident
245 .value_type
246 .expect("non-zero sized map should contain value type");
247 self.skip_till_depth(key_type, depth - 1)?;
248 self.skip_till_depth(val_type, depth - 1)?;
249 }
250 self.read_map_end()
251 }
252 u => Err(crate::Error::Protocol(ProtocolError {
253 kind: ProtocolErrorKind::Unknown,

Callers 1

skipMethod · 0.80

Implementers 4

compact.rslib/rs/src/protocol/compact.rs
binary.rslib/rs/src/protocol/binary.rs
mod.rslib/rs/src/protocol/mod.rs
stored.rslib/rs/src/protocol/stored.rs

Calls 15

ProtocolClass · 0.50
read_boolMethod · 0.45
read_i8Method · 0.45
read_i16Method · 0.45
read_i32Method · 0.45
read_i64Method · 0.45
read_doubleMethod · 0.45
read_bytesMethod · 0.45
read_uuidMethod · 0.45
read_struct_beginMethod · 0.45
read_field_beginMethod · 0.45
read_struct_endMethod · 0.45

Tested by

no test coverage detected