(data: &Data)
| 54 | } |
| 55 | |
| 56 | fn bytes_size(data: &Data) -> TokenStream { |
| 57 | match *data { |
| 58 | Data::Struct(ref data) => { |
| 59 | match data.fields { |
| 60 | Fields::Named(ref fields) => { |
| 61 | // Expands to an expression like |
| 62 | // |
| 63 | // 0 + <self.x as PackedSize>::PACKED_LEN + <self.y as PackedSize>::PACKED_LEN |
| 64 | let recurse = fields.named.iter().map(|f| { |
| 65 | let ty = &f.ty; |
| 66 | quote_spanned! {f.span()=> |
| 67 | <#ty as PackedSize>::PACKED_LEN |
| 68 | } |
| 69 | }); |
| 70 | |
| 71 | quote! { |
| 72 | 0 #(+ #recurse)* |
| 73 | } |
| 74 | } |
| 75 | Fields::Unnamed(ref fields) => { |
| 76 | // Expands to an expression like |
| 77 | // |
| 78 | // 0 + <self.0 as PackedSize>::PACKED_LEN + <self.1 as PackedSize>::PACKED_LEN |
| 79 | let recurse = fields.unnamed.iter().map(|f| { |
| 80 | let ty = &f.ty; |
| 81 | quote_spanned! {f.span()=> |
| 82 | <#ty as PackedSize>::PACKED_LEN |
| 83 | } |
| 84 | }); |
| 85 | quote! { |
| 86 | 0 #(+ #recurse)* |
| 87 | } |
| 88 | } |
| 89 | Fields::Unit => { |
| 90 | // Unit structs cannot own more than 0 bytes of heap memory. |
| 91 | quote!(0) |
| 92 | } |
| 93 | } |
| 94 | } |
| 95 | Data::Enum(_) | Data::Union(_) => unimplemented!(), |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | #[proc_macro_derive(EncodeLE)] |
| 100 | pub fn derive_endian_ser_bytes(input: proc_macro::TokenStream) -> proc_macro::TokenStream { |
no outgoing calls
no test coverage detected