MCPcopy Create free account
hub / github.com/apache/fory / skip_struct

Function skip_struct

rust/fory-core/src/serializer/skip.rs:383–428  ·  view source on GitHub ↗
(
    context: &mut ReadContext,
    type_id_num: u32,
    type_info: &Option<Rc<crate::TypeInfo>>,
)

Source from the content-addressed store, hash-verified

381#[cold]
382#[inline(never)]
383fn skip_struct(
384 context: &mut ReadContext,
385 type_id_num: u32,
386 type_info: &Option<Rc<crate::TypeInfo>>,
387) -> Result<(), Error> {
388 let type_info_rc: Option<Rc<crate::TypeInfo>>;
389 let type_info_value = if type_info.is_none() {
390 let remote_type_info = context.read_any_type_info()?;
391 let remote_type_id = remote_type_info.get_type_id() as u32;
392 if type_id_num != types::UNKNOWN && remote_type_id != types::UNKNOWN {
393 ensure!(
394 type_id_num == remote_type_id,
395 Error::type_mismatch(type_id_num, remote_type_id)
396 );
397 }
398 type_info_rc = Some(remote_type_info);
399 type_info_rc.as_ref().unwrap()
400 } else {
401 type_info.as_ref().unwrap()
402 };
403 let type_meta = type_info_value.get_type_meta();
404 if ENABLE_FORY_DEBUG_OUTPUT {
405 eprintln!(
406 "[skip_struct] type_name: {:?}, num_fields: {}",
407 type_meta.get_type_name(),
408 type_meta.get_field_infos().len()
409 );
410 }
411 let field_infos = type_meta.get_field_infos().to_vec();
412 context.inc_depth()?;
413 for field_info in field_infos.iter() {
414 if ENABLE_FORY_DEBUG_OUTPUT {
415 eprintln!(
416 "[skip_struct] field: {:?}, type_id: {}, internal_id: {}",
417 field_info.field_name, field_info.field_type.type_id, field_info.field_type.type_id
418 );
419 }
420 let read_ref_flag = util::field_need_write_ref_into(
421 field_info.field_type.type_id,
422 field_info.field_type.nullable,
423 );
424 skip_value(context, &field_info.field_type, read_ref_flag, true, &None)?;
425 }
426 context.dec_depth();
427 Ok(())
428}
429
430#[cold]
431#[inline(never)]

Callers 2

skip_valueFunction · 0.70
skip_enum_variantFunction · 0.70

Calls 11

SomeFunction · 0.85
skip_valueFunction · 0.85
get_type_metaMethod · 0.80
get_field_infosMethod · 0.80
inc_depthMethod · 0.80
dec_depthMethod · 0.80
is_noneMethod · 0.45
read_any_type_infoMethod · 0.45
get_type_idMethod · 0.45
unwrapMethod · 0.45

Tested by

no test coverage detected