(
context: &mut ReadContext,
type_id_num: u32,
type_info: &Option<Rc<crate::TypeInfo>>,
)
| 381 | #[cold] |
| 382 | #[inline(never)] |
| 383 | fn 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)] |
no test coverage detected