(source_fields: &[SourceField<'_>])
| 85 | } |
| 86 | |
| 87 | fn get_source_fields_loop_ts(source_fields: &[SourceField<'_>]) -> TokenStream { |
| 88 | let bindings = match build_bindings(source_fields) { |
| 89 | Ok(bindings) => bindings, |
| 90 | Err(err) => return err.to_compile_error(), |
| 91 | }; |
| 92 | let read_fields_ts: Vec<_> = bindings |
| 93 | .iter() |
| 94 | .map(|binding| match binding { |
| 95 | FieldBinding::Codec(binding) => { |
| 96 | let base = binding.read_field(); |
| 97 | if is_debug_enabled() { |
| 98 | let struct_name = get_struct_name().expect("struct context not set"); |
| 99 | let struct_name_lit = |
| 100 | syn::LitStr::new(&struct_name, proc_macro2::Span::call_site()); |
| 101 | let field_name_lit = syn::LitStr::new( |
| 102 | &binding.source.field_name, |
| 103 | proc_macro2::Span::call_site(), |
| 104 | ); |
| 105 | let private_ident = &binding.private_ident; |
| 106 | quote! { |
| 107 | fory_core::serializer::struct_::struct_before_read_field( |
| 108 | #struct_name_lit, |
| 109 | #field_name_lit, |
| 110 | context, |
| 111 | ); |
| 112 | #base |
| 113 | fory_core::serializer::struct_::struct_after_read_field( |
| 114 | #struct_name_lit, |
| 115 | #field_name_lit, |
| 116 | (&#private_ident) as &dyn ::std::any::Any, |
| 117 | context, |
| 118 | ); |
| 119 | } |
| 120 | } else { |
| 121 | base |
| 122 | } |
| 123 | } |
| 124 | FieldBinding::Skipped(binding) => binding.read_default(), |
| 125 | }) |
| 126 | .collect(); |
| 127 | quote! { |
| 128 | #(#read_fields_ts)* |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | pub fn gen_read_data(source_fields: &[SourceField<'_>]) -> TokenStream { |
| 133 | let fields: Vec<&Field> = source_fields.iter().map(|sf| sf.field).collect(); |
no test coverage detected