limine_protocol_for_rust/requests/
mod.rs

1pub mod memory_map;
2pub mod framebuffer;
3pub mod bootloader_info;
4pub mod hhdm;
5pub mod date_at_boot;
6pub mod executable_cmdline;
7pub mod firmware_type;
8pub mod stack_size;
9pub mod paging_mode;
10#[cfg(target_arch = "riscv64")]
11pub mod bsp_hart_id;
12pub mod executable_file;
13pub mod rsdp;
14pub mod smbios;
15pub mod efi_system_table;
16pub mod efi_memory_map;
17pub mod executable_address;
18pub mod device_tree_blob;
19pub mod bootloader_performance;
20
21///Implements [LimineRequest] for $req. Requires \$req to have a resp field of the type core::mem::MaybeUninit\<usize\>.
22#[macro_export]
23macro_rules! impl_limine_req {
24    ($req:ty, $resp:ty) => {
25        impl LimineRequest for $req {
26            type Response = $resp;
27
28            fn get_response(&self) -> Option<&Self::Response> {
29                unsafe {
30                    if self.resp.assume_init() == 0 {
31                       return None
32                    }
33                    (self.resp.assume_init() as *const Self::Response).as_ref()
34                }
35            }
36        }
37    };
38}
39
40pub trait LimineRequest {
41    type Response;
42    fn get_response(&self) -> Option<&Self::Response>;
43}