macro_rules! limine_request {
(
$(#[$outer_meta:meta])*
$vis:vis struct $req:ident: [$val1:expr, $val2:expr] {
$(
$(#[$inner_meta:meta])*
$vis_f:vis $ident_f:ident: $ty:ty,
)*
}
) => { ... };
}Expand description
This creates a limine request with const defaults by black magic.
It also automatically creates the id and revision fields.
ยงExample
use limine_protocol::limine_request;
use core::ptr::NonNull;
pub struct TestResponse {
/// The response revision number
pub revision: u64,
/// A test number from the bootloader (not actually)
pub number: u64,
}
limine_request! {
/// A test limine request, being public isn't required
pub struct TestRequest: [0xdead, 0xbeef] {
/// The response
pub response: Option<NonNull<TestResponse>>,
}
}Will be expanded to
use core::ptr::NonNull;
pub struct TestResponse {
/// The response revision number
pub revision: u64,
/// A test number from the bootloader (not actually)
pub number: u64,
}
pub struct TestRequest {
/// The request id array
pub id: [u64; 4],
/// The request revision
pub revision: u64,
/// The response
pub response: Option<NonNull<TestResponse>>,
}
impl TestRequest {
/// Create a new instance of this request
pub const fn new() -> Self {
use limine_protocol::ConstDefault;
Self {
id: [
limine_protocol::COMMON_MAGIC[0],
limine_protocol::COMMON_MAGIC[1],
0xdead,
0xbeef,
],
revision: 0,
response: None,
}
}
}