#[macro_export]
macro_rules! cfg_table {
() => {
unreachable!()
};
(_ => $expr:expr,) => {{
$expr
}};
([$cfg:meta] => $expr:expr, $($tail:tt)*) => {{
#[cfg($cfg)] {
$expr
}
#[cfg(not($cfg))] {
$crate::cfg_table!($($tail)*)
}
}};
(32 => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_pointer_width = "32")] {
$expr
}
#[cfg(not(target_pointer_width = "32"))] {
$crate::cfg_table!($($tail)*)
}
}};
(64 => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_pointer_width = "64")] {
$expr
}
#[cfg(not(target_pointer_width = "64"))] {
$crate::cfg_table!($($tail)*)
}
}};
("32" => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_pointer_width = "32")] {
$expr
}
#[cfg(not(target_pointer_width = "32"))] {
$crate::cfg_table!($($tail)*)
}
}};
("64" => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_pointer_width = "64")] {
$expr
}
#[cfg(not(target_pointer_width = "64"))] {
$crate::cfg_table!($($tail)*)
}
}};
(macos => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_os = "macos")] {
$expr
}
#[cfg(not(target_os = "macos"))] {
$crate::cfg_table!($($tail)*)
}
}};
(linux => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_os = "linux")] {
$expr
}
#[cfg(not(target_os = "linux"))] {
$crate::cfg_table!($($tail)*)
}
}};
(windows => $expr:expr, $($tail:tt)*) => {{
#[cfg(target_os = "windows")] {
$expr
}
#[cfg(not(target_os = "windows"))] {
$crate::cfg_table!($($tail)*)
}
}};
(macos32 => $expr:expr, $($tail:tt)*) => {{
#[cfg(all(target_os = "macos", target_pointer_width = "32"))] {
$expr
}
#[cfg(not(all(target_os = "macos", target_pointer_width = "32")))] {
$crate::cfg_table!($($tail)*)
}
}};
(macos64 => $expr:expr, $($tail:tt)*) => {{
#[cfg(all(target_os = "macos", target_pointer_width = "64"))] {
$expr
}
#[cfg(not(all(target_os = "macos", target_pointer_width = "64")))] {
$crate::cfg_table!($($tail)*)
}
}};
(linux32 => $expr:expr, $($tail:tt)*) => {{
#[cfg(all(target_os = "linux", target_pointer_width = "32"))] {
$expr
}
#[cfg(not(all(target_os = "linux", target_pointer_width = "32")))] {
$crate::cfg_table!($($tail)*)
}
}};
(linux64 => $expr:expr, $($tail:tt)*) => {{
#[cfg(all(target_os = "linux", target_pointer_width = "64"))] {
$expr
}
#[cfg(not(all(target_os = "linux", target_pointer_width = "64")))] {
$crate::cfg_table!($($tail)*)
}
}};
(win32 => $expr:expr, $($tail:tt)*) => {{
#[cfg(all(target_os = "windows", target_pointer_width = "32"))] {
$expr
}
#[cfg(not(all(target_os = "windows", target_pointer_width = "32")))] {
$crate::cfg_table!($($tail)*)
}
}};
(win64 => $expr:expr, $($tail:tt)*) => {{
#[cfg(all(target_os = "windows", target_pointer_width = "64"))] {
$expr
}
#[cfg(not(all(target_os = "windows", target_pointer_width = "64")))] {
$crate::cfg_table!($($tail)*)
}
}};
}