Macro kernel::define_id_table
source · [−]macro_rules! define_id_table {
($table_name:ident, $id_type:ty, $data_type:ty, [ $($t:tt)* ]) => { ... };
}
Expand description
Defines a new constant IdTable
with a concise syntax.
It is meant to be used by buses and subsystems to create a similar macro with their device id type already specified, i.e., with fewer parameters to the end user.
Examples
ⓘ
#![feature(const_trait_impl)]
#[derive(Copy, Clone)]
struct Id(u32);
// SAFETY: `ZERO` is all zeroes and `to_rawid` stores `offset` as the second element of the raw
// device id pair.
unsafe impl const RawDeviceId for Id {
type RawType = (u64, isize);
const ZERO: Self::RawType = (0, 0);
fn to_rawid(&self, offset: isize) -> Self::RawType {
(self.0 as u64 + 1, offset)
}
}
define_id_table!(T1, Id, &'static [u8], [(Id(10), None)]);
define_id_table!(T2, Id, &'static [u8], [(Id(10), Some(b"id1")), ]);
define_id_table!(T3, Id, &'static [u8], [(Id(10), Some(b"id1")), (Id(20), Some(b"id2"))]);
define_id_table!(T4, Id, &'static [u8], [(Id(10), Some(b"id1")), (Id(20), Some(b"id2")), ]);
define_id_table!(T5, Id, &'static [u8], [(Id(10), None), (Id(20), Some(b"id2")), ]);
define_id_table!(T6, Id, &'static [u8], [(Id(10), Some(b"id1")), (Id(20), None), ]);
define_id_table!(T7, Id, &'static [u8], [(Id(10), None), (Id(20), None), ]);