diff --git a/rust/flatbuffers/src/push.rs b/rust/flatbuffers/src/push.rs index 20bacd8e2..59d16bea6 100644 --- a/rust/flatbuffers/src/push.rs +++ b/rust/flatbuffers/src/push.rs @@ -83,6 +83,11 @@ macro_rules! impl_push_for_endian_scalar { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { emplace_scalar::<$ty>(dst, *self); } + + #[inline] + fn alignment() -> PushAlignment { + PushAlignment::new(size_of::<$ty>()) + } } }; } @@ -98,3 +103,23 @@ impl_push_for_endian_scalar!(u64); impl_push_for_endian_scalar!(i64); impl_push_for_endian_scalar!(f32); impl_push_for_endian_scalar!(f64); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn endian_scalar_push_alignment_matches_wire_size() { + assert_eq!(::alignment().value(), 1); + assert_eq!(::alignment().value(), 1); + assert_eq!(::alignment().value(), 1); + assert_eq!(::alignment().value(), 2); + assert_eq!(::alignment().value(), 2); + assert_eq!(::alignment().value(), 4); + assert_eq!(::alignment().value(), 4); + assert_eq!(::alignment().value(), 4); + assert_eq!(::alignment().value(), 8); + assert_eq!(::alignment().value(), 8); + assert_eq!(::alignment().value(), 8); + } +}