#[cfg(doc)]
use {
crate::{
bindings::{squirreldatatypes::HSquirrelVM, squirrelfunctions::SquirrelFunctions},
high::vector::Vector3,
},
std::ffi::{CStr, CString},
};
#[deprecated = "the name is kinda misleading. use to_c_string instead."]
#[macro_export]
macro_rules! to_sq_string {
($value:expr) => {
std::ffi::CString::new($value.replace("\0", "").as_bytes()).unwrap()
};
}
#[macro_export]
macro_rules! to_c_string {
(const $value:literal) => {
std::ffi::CStr::from_ptr(($value as *const _ as *const i8).cast_mut())
};
(unwrap $value:expr) => {
std::ffi::CString::new($value).unwrap()
};
($value:expr) => {
std::ffi::CString::new($value.replace("\0", "").as_bytes()).unwrap()
};
}
#[macro_export]
macro_rules! sq_return_string {
($value:expr, $sqvm:expr, $sq_functions:expr) => {
$crate::wrappers::squirrel::push_sq_string($sqvm, $sq_functions, $value);
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NOTNULL
};
}
#[macro_export]
macro_rules! sq_return_bool {
($value:expr, $sqvm:expr, $sq_functions: expr) => {
$crate::wrappers::squirrel::push_sq_bool($sqvm, $sq_functions, $value);
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NOTNULL
};
}
#[macro_export]
macro_rules! sq_return_int {
($value:expr, $sqvm:expr, $sq_functions: expr) => {
$crate::wrappers::squirrel::push_sq_int($sqvm, $sq_functions, $value);
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NOTNULL
};
}
#[macro_export]
macro_rules! sq_return_float {
($value:expr, $sqvm:expr, $sq_functions: expr) => {
$crate::wrappers::squirrel::push_sq_float($sqvm, $sq_functions, $value);
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NOTNULL
};
}
#[macro_export]
macro_rules! sq_return_vector {
($value:expr, $sqvm:expr, $sq_functions: expr) => {
$crate::wrappers::squirrel::push_sq_vector($sqvm, $sq_functions, $value);
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NOTNULL
};
}
#[macro_export]
macro_rules! sq_return_null {
() => {
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NULL
};
}
#[macro_export]
macro_rules! sq_return_notnull {
() => {
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_NOTNULL
};
}
#[macro_export]
macro_rules! sq_raise_error {
($value:expr, $sqvm:expr, $sq_functions: expr) => {
let err = $crate::to_c_string!($value);
unsafe { ($sq_functions.sq_raiseerror)($sqvm, err.as_ptr()) };
return $crate::bindings::squirrelclasstypes::SQRESULT::SQRESULT_ERROR
};
($value:expr, $sqvm:expr, $sq_functions: expr, noreturn) => {
unsafe { ($sq_functions.sq_raiseerror)($sqvm, $crate::to_c_string!($value).as_ptr()) };
};
}