Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9418901 authored by Martin Geisler's avatar Martin Geisler
Browse files

pdl: Add support for reserved fields

Test: atest pdl_tests pdl_rust_generator_tests_{le,be}
Change-Id: Ie09c2fa09694f940e8584d56df3beb5019f91cf3
parent a1ee89e3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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",
+12 −3
Original line number Diff line number Diff line
@@ -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 =
@@ -410,4 +410,13 @@ mod tests {
          }
        "
    );

    test_pdl!(
        packet_decl_reserved_field,
        "
          packet Foo {
            _reserved_: 40,
          }
        "
    );
}
+4 −0
Original line number Diff line number Diff line
@@ -27,6 +27,10 @@ impl FieldDeclarations {
                    #id: #field_type,
                }
            }
            ast::Field::Reserved { .. } => {
                // Nothing to do here.
                quote! {}
            }
            _ => todo!(),
        });
    }
+4 −0
Original line number Diff line number Diff line
@@ -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!(),
            });
        }
+10 −1
Original line number Diff line number Diff line
@@ -77,6 +77,9 @@ impl<'a> FieldSerializer<'a> {
                    shift: self.shift,
                });
            }
            ast::Field::Reserved { .. } => {
                // Nothing to do here.
            }
            _ => todo!(),
        }

@@ -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