multiboot2_header/
module_align.rs1use crate::{HeaderTagFlag, HeaderTagHeader, HeaderTagType};
2use core::mem;
3use multiboot2_common::{MaybeDynSized, Tag};
4
5#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7#[repr(C, align(8))]
8pub struct ModuleAlignHeaderTag {
9 header: HeaderTagHeader,
10}
11
12impl ModuleAlignHeaderTag {
13 #[must_use]
15 pub const fn new(flags: HeaderTagFlag) -> Self {
16 let header = HeaderTagHeader::new(
17 HeaderTagType::ModuleAlign,
18 flags,
19 mem::size_of::<Self>() as u32,
20 );
21 Self { header }
22 }
23
24 #[must_use]
26 pub const fn typ(&self) -> HeaderTagType {
27 self.header.typ()
28 }
29
30 #[must_use]
32 pub const fn flags(&self) -> HeaderTagFlag {
33 self.header.flags()
34 }
35
36 #[must_use]
38 pub const fn size(&self) -> u32 {
39 self.header.size()
40 }
41}
42
43impl MaybeDynSized for ModuleAlignHeaderTag {
44 type Header = HeaderTagHeader;
45
46 const BASE_SIZE: usize = mem::size_of::<Self>();
47
48 fn dst_len(_header: &Self::Header) -> Self::Metadata {}
49}
50
51impl Tag for ModuleAlignHeaderTag {
52 type IDType = HeaderTagType;
53 const ID: HeaderTagType = HeaderTagType::ModuleAlign;
54}
55
56#[cfg(test)]
57mod tests {
58 use crate::ModuleAlignHeaderTag;
59
60 #[test]
61 fn test_assert_size() {
62 assert_eq!(core::mem::size_of::<ModuleAlignHeaderTag>(), 2 + 2 + 4);
63 }
64}