use ALIGN for Push::alignment in struct types (#8398)

* use ALIGN for Push::alignment in struct types

* regenerate and add a test for struct alignment
This commit is contained in:
Benjamin Kietzman 2024-10-28 10:42:55 -05:00 committed by GitHub
parent 807adb73b2
commit 49061f8c7c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 89 additions and 1 deletions

View File

@ -52,7 +52,7 @@ pub use crate::builder::{Allocator, DefaultAllocator, FlatBufferBuilder};
pub use crate::endian_scalar::{emplace_scalar, read_scalar, read_scalar_at, EndianScalar};
pub use crate::follow::{Follow, FollowStart};
pub use crate::primitives::*;
pub use crate::push::Push;
pub use crate::push::{Push, PushAlignment};
pub use crate::table::{buffer_has_identifier, Table};
pub use crate::vector::{follow_cast_ref, Vector, VectorIter};
pub use crate::verifier::{

View File

@ -50,6 +50,10 @@ impl<'b> flatbuffers::Push for Vec3 {
let src = ::core::slice::from_raw_parts(self as *const Vec3 as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Vec3 {

View File

@ -2703,6 +2703,10 @@ class RustGenerator : public BaseGenerator {
"{{STRUCT_TY}} as *const u8, Self::size());";
code_ += " dst.copy_from_slice(src);";
code_ += " }";
code_ += " #[inline]";
code_ += " fn alignment() -> flatbuffers::PushAlignment {";
code_ += " flatbuffers::PushAlignment::new({{ALIGN}})";
code_ += " }";
code_ += "}";
code_ += "";

View File

@ -53,6 +53,10 @@ impl<'b> flatbuffers::Push for ArrayStruct {
let src = ::core::slice::from_raw_parts(self as *const ArrayStruct as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(8)
}
}
impl<'a> flatbuffers::Verifiable for ArrayStruct {

View File

@ -51,6 +51,10 @@ impl<'b> flatbuffers::Push for NestedStruct {
let src = ::core::slice::from_raw_parts(self as *const NestedStruct as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(8)
}
}
impl<'a> flatbuffers::Verifiable for NestedStruct {

View File

@ -48,6 +48,10 @@ impl<'b> flatbuffers::Push for Unused {
let src = ::core::slice::from_raw_parts(self as *const Unused as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Unused {

View File

@ -48,6 +48,10 @@ impl<'b> flatbuffers::Push for Unused {
let src = ::core::slice::from_raw_parts(self as *const Unused as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Unused {

View File

@ -49,6 +49,10 @@ impl<'b> flatbuffers::Push for Ability {
let src = ::core::slice::from_raw_parts(self as *const Ability as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Ability {

View File

@ -50,6 +50,10 @@ impl<'b> flatbuffers::Push for StructOfStructs {
let src = ::core::slice::from_raw_parts(self as *const StructOfStructs as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for StructOfStructs {

View File

@ -48,6 +48,10 @@ impl<'b> flatbuffers::Push for StructOfStructsOfStructs {
let src = ::core::slice::from_raw_parts(self as *const StructOfStructsOfStructs as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for StructOfStructsOfStructs {

View File

@ -49,6 +49,10 @@ impl<'b> flatbuffers::Push for Test {
let src = ::core::slice::from_raw_parts(self as *const Test as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(2)
}
}
impl<'a> flatbuffers::Verifiable for Test {

View File

@ -53,6 +53,10 @@ impl<'b> flatbuffers::Push for Vec3 {
let src = ::core::slice::from_raw_parts(self as *const Vec3 as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(8)
}
}
impl<'a> flatbuffers::Verifiable for Vec3 {

View File

@ -48,6 +48,10 @@ impl<'b> flatbuffers::Push for Unused {
let src = ::core::slice::from_raw_parts(self as *const Unused as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Unused {

View File

@ -51,6 +51,10 @@ impl<'b> flatbuffers::Push for Ability {
let src = ::core::slice::from_raw_parts(self as *const Ability as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Ability {

View File

@ -52,6 +52,10 @@ impl<'b> flatbuffers::Push for StructOfStructs {
let src = ::core::slice::from_raw_parts(self as *const StructOfStructs as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for StructOfStructs {

View File

@ -50,6 +50,10 @@ impl<'b> flatbuffers::Push for StructOfStructsOfStructs {
let src = ::core::slice::from_raw_parts(self as *const StructOfStructsOfStructs as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for StructOfStructsOfStructs {

View File

@ -51,6 +51,10 @@ impl<'b> flatbuffers::Push for Test {
let src = ::core::slice::from_raw_parts(self as *const Test as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(2)
}
}
impl<'a> flatbuffers::Verifiable for Test {

View File

@ -55,6 +55,10 @@ impl<'b> flatbuffers::Push for Vec3 {
let src = ::core::slice::from_raw_parts(self as *const Vec3 as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(8)
}
}
impl<'a> flatbuffers::Verifiable for Vec3 {

View File

@ -50,6 +50,10 @@ impl<'b> flatbuffers::Push for Unused {
let src = ::core::slice::from_raw_parts(self as *const Unused as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Unused {

View File

@ -49,6 +49,10 @@ impl<'b> flatbuffers::Push for StructInNestedNS {
let src = ::core::slice::from_raw_parts(self as *const StructInNestedNS as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for StructInNestedNS {

View File

@ -48,6 +48,10 @@ impl<'b> flatbuffers::Push for Object {
let src = ::core::slice::from_raw_parts(self as *const Object as *const u8, Self::size());
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> flatbuffers::PushAlignment {
flatbuffers::PushAlignment::new(4)
}
}
impl<'a> flatbuffers::Verifiable for Object {

View File

@ -2422,6 +2422,14 @@ mod push_impls {
0, 0, 0, 0,
0, 0, 0, 1]);
}
#[test]
fn push_u8_generated_struct_alignment() {
let mut b = flatbuffers::FlatBufferBuilder::new();
b.push(1u8);
b.push(my_game::example::Test::new(10, 20));
check(&b, &[10, 0, 20, 0, 0, 1]);
}
}
#[cfg(test)]