#[macro_export]
macro_rules! static_assert {
($cond:expr_2021) => {
const _: () = assert!($cond);
};
($cond:expr_2021, $msg:literal) => {
const _: () = assert!($cond, $msg);
};
}
#[macro_export]
macro_rules! static_assert_eq_size_align {
($T:ty, $U:ty) => {
godot_ffi::static_assert!(
std::mem::size_of::<$T>() == std::mem::size_of::<$U>()
&& std::mem::align_of::<$T>() == std::mem::align_of::<$U>()
);
};
($T:ty, $U:ty, $msg:literal) => {
godot_ffi::static_assert!(
std::mem::size_of::<$T>() == std::mem::size_of::<$U>()
&& std::mem::align_of::<$T>() == std::mem::align_of::<$U>(),
$msg
);
};
}
#[macro_export]
macro_rules! strict_assert {
($($arg:tt)*) => {
#[cfg(safeguards_strict)] #[cfg_attr(published_docs, doc(cfg(safeguards_strict)))]
assert!($($arg)*);
};
}
#[macro_export]
macro_rules! strict_assert_eq {
($actual:expr_2021, $expected:expr_2021) => {
#[cfg(safeguards_strict)] #[cfg_attr(published_docs, doc(cfg(safeguards_strict)))]
assert_eq!($actual, $expected);
};
($actual:expr_2021, $expected:expr_2021, $($arg:tt)*) => {
#[cfg(safeguards_strict)] #[cfg_attr(published_docs, doc(cfg(safeguards_strict)))]
assert_eq!($actual, $expected, $($arg)*);
};
}
#[macro_export]
macro_rules! strict_assert_ne {
($actual:expr_2021, $expected:expr_2021) => {
#[cfg(safeguards_strict)] #[cfg_attr(published_docs, doc(cfg(safeguards_strict)))]
assert_ne!($actual, $expected);
};
($actual:expr_2021, $expected:expr_2021, $($arg:tt)*) => {
#[cfg(safeguards_strict)] #[cfg_attr(published_docs, doc(cfg(safeguards_strict)))]
assert_ne!($actual, $expected, $($arg)*);
};
}
#[macro_export]
macro_rules! balanced_assert {
($($arg:tt)*) => {
#[cfg(safeguards_balanced)] #[cfg_attr(published_docs, doc(cfg(safeguards_balanced)))]
assert!($($arg)*);
};
}
#[macro_export]
macro_rules! balanced_assert_eq {
($actual:expr_2021, $expected:expr_2021) => {
#[cfg(safeguards_balanced)] #[cfg_attr(published_docs, doc(cfg(safeguards_balanced)))]
assert_eq!($actual, $expected);
};
($actual:expr_2021, $expected:expr_2021, $($arg:tt)*) => {
#[cfg(safeguards_balanced)] #[cfg_attr(published_docs, doc(cfg(safeguards_balanced)))]
assert_eq!($actual, $expected, $($arg)*);
};
}
#[macro_export]
macro_rules! balanced_assert_ne {
($actual:expr_2021, $expected:expr_2021) => {
#[cfg(safeguards_balanced)] #[cfg_attr(published_docs, doc(cfg(safeguards_balanced)))]
assert_ne!($actual, $expected);
};
($actual:expr_2021, $expected:expr_2021, $($arg:tt)*) => {
#[cfg(safeguards_balanced)] #[cfg_attr(published_docs, doc(cfg(safeguards_balanced)))]
assert_ne!($actual, $expected, $($arg)*);
};
}