Loading tools/pdl/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,8 @@ rust_test_host { "tests/generated/packet_decl_mask_scalar_value_little_endian.rs", "tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs", "tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs", "tests/generated/packet_decl_reserved_field_big_endian.rs", "tests/generated/packet_decl_reserved_field_little_endian.rs", "tests/generated/packet_decl_simple_scalars_big_endian.rs", "tests/generated/packet_decl_simple_scalars_little_endian.rs", "tests/generated/preamble.rs", Loading tools/pdl/src/backends/rust.rs +12 −3 Original line number Diff line number Diff line Loading @@ -71,10 +71,10 @@ fn generate_packet_decl( let id_data = format_ident!("{id}Data"); let id_builder = format_ident!("{id}Builder"); let fields_with_ids = fields.iter().filter(|f| f.id().is_some()).collect::<Vec<_>>(); let field_names = fields.iter().map(|f| format_ident!("{}", f.id().unwrap())).collect::<Vec<_>>(); let field_types = fields.iter().map(types::rust_type).collect::<Vec<_>>(); fields_with_ids.iter().map(|f| format_ident!("{}", f.id().unwrap())).collect::<Vec<_>>(); let field_types = fields_with_ids.iter().map(|f| types::rust_type(f)).collect::<Vec<_>>(); let getter_names = field_names.iter().map(|id| format_ident!("get_{id}")); let packet_size = Loading Loading @@ -410,4 +410,13 @@ mod tests { } " ); test_pdl!( packet_decl_reserved_field, " packet Foo { _reserved_: 40, } " ); } tools/pdl/src/backends/rust/declarations.rs +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,10 @@ impl FieldDeclarations { #id: #field_type, } } ast::Field::Reserved { .. } => { // Nothing to do here. quote! {} } _ => todo!(), }); } Loading tools/pdl/src/backends/rust/parser.rs +4 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,10 @@ impl<'a> FieldParser<'a> { let #id = #type_id::#from_u(#v).unwrap(); } } ast::Field::Reserved { .. } => { // Nothing to do here. quote! {} } _ => todo!(), }); } Loading tools/pdl/src/backends/rust/serializer.rs +10 −1 Original line number Diff line number Diff line Loading @@ -77,6 +77,9 @@ impl<'a> FieldSerializer<'a> { shift: self.shift, }); } ast::Field::Reserved { .. } => { // Nothing to do here. } _ => todo!(), } Loading Loading @@ -110,7 +113,13 @@ impl<'a> FieldSerializer<'a> { .collect::<Vec<_>>(); match values.as_slice() { [] => todo!(), [] => { let span = format_ident!("{}", self.span); let count = syn::Index::from(self.shift / 8); self.code.push(quote! { #span.put_bytes(0, #count); }); } [value] => { let put = types::put_uint(self.endianness, value, self.shift, self.span); self.code.push(quote! { Loading Loading
tools/pdl/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,8 @@ rust_test_host { "tests/generated/packet_decl_mask_scalar_value_little_endian.rs", "tests/generated/packet_decl_mixed_scalars_enums_big_endian.rs", "tests/generated/packet_decl_mixed_scalars_enums_little_endian.rs", "tests/generated/packet_decl_reserved_field_big_endian.rs", "tests/generated/packet_decl_reserved_field_little_endian.rs", "tests/generated/packet_decl_simple_scalars_big_endian.rs", "tests/generated/packet_decl_simple_scalars_little_endian.rs", "tests/generated/preamble.rs", Loading
tools/pdl/src/backends/rust.rs +12 −3 Original line number Diff line number Diff line Loading @@ -71,10 +71,10 @@ fn generate_packet_decl( let id_data = format_ident!("{id}Data"); let id_builder = format_ident!("{id}Builder"); let fields_with_ids = fields.iter().filter(|f| f.id().is_some()).collect::<Vec<_>>(); let field_names = fields.iter().map(|f| format_ident!("{}", f.id().unwrap())).collect::<Vec<_>>(); let field_types = fields.iter().map(types::rust_type).collect::<Vec<_>>(); fields_with_ids.iter().map(|f| format_ident!("{}", f.id().unwrap())).collect::<Vec<_>>(); let field_types = fields_with_ids.iter().map(|f| types::rust_type(f)).collect::<Vec<_>>(); let getter_names = field_names.iter().map(|id| format_ident!("get_{id}")); let packet_size = Loading Loading @@ -410,4 +410,13 @@ mod tests { } " ); test_pdl!( packet_decl_reserved_field, " packet Foo { _reserved_: 40, } " ); }
tools/pdl/src/backends/rust/declarations.rs +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,10 @@ impl FieldDeclarations { #id: #field_type, } } ast::Field::Reserved { .. } => { // Nothing to do here. quote! {} } _ => todo!(), }); } Loading
tools/pdl/src/backends/rust/parser.rs +4 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,10 @@ impl<'a> FieldParser<'a> { let #id = #type_id::#from_u(#v).unwrap(); } } ast::Field::Reserved { .. } => { // Nothing to do here. quote! {} } _ => todo!(), }); } Loading
tools/pdl/src/backends/rust/serializer.rs +10 −1 Original line number Diff line number Diff line Loading @@ -77,6 +77,9 @@ impl<'a> FieldSerializer<'a> { shift: self.shift, }); } ast::Field::Reserved { .. } => { // Nothing to do here. } _ => todo!(), } Loading Loading @@ -110,7 +113,13 @@ impl<'a> FieldSerializer<'a> { .collect::<Vec<_>>(); match values.as_slice() { [] => todo!(), [] => { let span = format_ident!("{}", self.span); let count = syn::Index::from(self.shift / 8); self.code.push(quote! { #span.put_bytes(0, #count); }); } [value] => { let put = types::put_uint(self.endianness, value, self.shift, self.span); self.code.push(quote! { Loading