Macro limine_protocol::limine_request
source · 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,
}
}
}