#[cfg(not(feature = "vendored"))]
#[macro_export]
macro_rules! lua_module {
($name:ident, $init:expr) => {
#[no_mangle]
pub unsafe extern "C-unwind" fn $name(l: *mut $crate::ffi::lua_State) -> i32 {
$crate::convert::module_function_wrapper($init)(l)
}
};
}
#[cfg(feature = "vendored")]
#[macro_export]
macro_rules! lua_module {
($name:ident, $init:expr) => {
compile_error!("Feature `vendored` should be not enabled when crate build as a lua module");
};
}
#[cfg(feature = "serde")]
#[macro_export]
macro_rules! impl_tolua_as_serde {
($t:ty) => {
impl $crate::prelude::ToLua for $t {
fn to_lua<'a>(
self,
lua: &'a $crate::prelude::LuaState,
) -> $crate::prelude::LuaResult<$crate::prelude::ValRef<'a>> {
$crate::prelude::ToLua::to_lua($crate::serde::SerdeValue(self), lua)
}
}
};
}
#[cfg(feature = "serde")]
#[macro_export]
macro_rules! impl_fromlua_as_serde {
($t:ty) => {
impl $crate::prelude::FromLua<'_> for $t {
fn from_lua(
lua: &$crate::prelude::LuaState,
val: $crate::prelude::ValRef,
) -> $crate::prelude::LuaResult<Self> {
<$crate::serde::SerdeValue<Self> as $crate::prelude::FromLua>::from_lua(lua, val)
.map(|s| s.0)
}
}
};
(owned $t:ty) => {
impl $crate::prelude::FromLua<'_> for $t {
fn from_lua(
lua: &$crate::prelude::LuaState,
val: $crate::prelude::ValRef,
) -> $crate::prelude::LuaResult<Self> {
<$crate::serde::SerdeOwnedValue<Self> as $crate::prelude::FromLua>::from_lua(
lua, val,
)
.map(|s| s.0)
}
}
};
}
#[macro_export]
macro_rules! impl_toluamulti {
($t:ty as $as:ty: |$self:ident| $map:expr) => {
impl $crate::prelude::ToLuaMulti for $t {
const VALUE_COUNT: Option<usize> = <$as as $crate::prelude::ToLuaMulti>::VALUE_COUNT;
fn push_multi(
$self,
lua: &$crate::prelude::LuaState,
) -> $crate::prelude::LuaResult<usize> {
$crate::prelude::ToLuaMulti::push_multi($map, lua)
}
}
};
}
#[macro_export]
macro_rules! impl_fromlua_as_bitflags {
($t:ty) => {
impl $crate::prelude::FromLua<'_> for $t {
fn from_lua(
lua: &$crate::prelude::LuaState,
val: $crate::prelude::ValRef,
) -> $crate::prelude::LuaResult<Self> {
<$crate::marker::BitFlags<Self> as $crate::prelude::FromLua>::from_lua(lua, val)
.map(|s| s.0)
}
}
};
}
#[macro_export]
macro_rules! impl_tolua_as_bitflags {
($t:ty) => {
impl $crate::prelude::ToLua for $t {
fn to_lua<'a>(
self,
lua: &'a $crate::prelude::LuaState,
) -> $crate::prelude::LuaResult<$crate::prelude::ValRef<'a>> {
$crate::prelude::ToLua::to_lua($crate::marker::BitFlags(self), lua)
}
}
};
}
#[macro_export]
macro_rules! bitflags_table {
($fn:ident => $t:ty) => {
fn $fn(
lua: &$crate::prelude::LuaState,
) -> $crate::prelude::LuaResult<$crate::prelude::LuaTable> {
use ::bitflags::Flag;
let t = lua.new_table()?;
for flag in <$t as ::bitflags::Flags>::FLAGS {
t.set(flag.name(), flag.value().bits())?;
t.set(flag.value().bits(), flag.name())?;
}
$crate::prelude::LuaResult::Ok(t)
}
};
}
#[macro_export]
macro_rules! enum_table {
($fn:ident => $(($t:expr, $v:expr),)+) => {
fn $fn(
lua: &$crate::prelude::LuaState,
) -> $crate::prelude::LuaResult<$crate::prelude::LuaTable> {
let t = lua.new_table()?;
$(t.set($t, $v)?;)+
$(t.set($v, $t)?;)+
$crate::prelude::LuaResult::Ok(t)
}
};
}