Gen7ScriptsRs/pkmn_lib_interface/src/handling/mod.rs

258 lines
5.9 KiB
Rust
Executable File

#[cfg(not(feature = "mock_data"))]
pub(crate) mod cacheable;
#[cfg(not(feature = "mock_data"))]
pub(crate) mod cached_value;
pub mod capabilities;
pub mod extern_ref;
pub mod ffi_array;
pub mod script;
#[cfg(not(feature = "mock_data"))]
pub(crate) mod temporary;
pub use capabilities::*;
#[cfg(not(feature = "mock_data"))]
pub(crate) use cacheable::Cacheable;
pub use script::Script;
#[repr(u8)]
pub enum ScriptCategory {
Move,
Ability,
Status,
Pokemon,
Battle,
Weather,
Side,
ItemBattleTrigger,
}
#[macro_export]
macro_rules! wasm_reference_getters_extern {
(
$base_type:ty, $type_name:ident,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> $type:ty;
)*
) => {
#[cfg(not(feature = "mock_data"))]
extern "wasm" {
$(
paste::paste!{
fn [<$type_name:snake _get_ $name>](r: ExternRef<$base_type>) -> ExternRef<$type>;
}
)*
}
};
}
#[macro_export]
macro_rules! wasm_reference_getters_funcs {
(
$base_type:ty,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> $type:ty;
)*
) => {
$(
$(#[$attr])*
$v fn $name(&self) -> $type {
paste::paste!{
unsafe{
[<$base_type:snake _get_ $name>](self.inner.reference).get_value().unwrap()
}
}
}
)*
};
}
#[macro_export]
macro_rules! wasm_reference_getters {
(
$base_type:ty,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> $type:ty;
)*
) => {
impl $base_type {
$(
$(#[$attr])*
$v fn $name(&self) -> $type {
paste::paste!{
unsafe{
[<$base_type:snake _get_ $name>](self.inner.reference).get_value().unwrap()
}
}
}
)*
}
#[cfg(not(feature = "mock_data"))]
extern "wasm" {
$(
paste::paste!{
fn [<$base_type:snake _get_ $name>](r: ExternRef<$base_type>) -> ExternRef<$type>;
}
)*
}
};
}
#[macro_export]
macro_rules! wasm_optional_reference_getters {
(
$base_type:ty,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> Option<$type:ty>;
)*
) => {
impl $base_type {
$(
$(#[$attr])*
$v fn $name(&self) -> Option<$type> {
paste::paste!{
unsafe{
[<$base_type:snake _get_ $name>](self.inner.reference).get_value()
}
}
}
)*
}
#[cfg(not(feature = "mock_data"))]
extern "wasm" {
$(
paste::paste!{
fn [<$base_type:snake _get_ $name>](r: ExternRef<$base_type>) -> ExternRef<$type>;
}
)*
}
};
}
#[macro_export]
macro_rules! wasm_optional_reference_getters_extern {
(
$base_type:ty, $type_name:ident,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> Option<$type:ty>;
)*
) => {
#[cfg(not(feature = "mock_data"))]
extern "wasm" {
$(
paste::paste!{
fn [<$type_name:snake _get_ $name>](r: ExternRef<$base_type>) -> ExternRef<$type>;
}
)*
}
};
}
#[macro_export]
macro_rules! wasm_optional_reference_getters_funcs {
(
$base_type:ty,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> Option<$type:ty>;
)*
) => {
$(
$(#[$attr])*
$v fn $name(&self) -> Option<$type> {
paste::paste!{
unsafe{
[<$base_type:snake _get_ $name>](self.inner.reference).get_value()
}
}
}
)*
};
}
#[macro_export]
macro_rules! wasm_value_getters {
(
$base_type:ty,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> $type:ty;
)*
) => {
#[cfg(not(feature = "mock_data"))]
impl $base_type {
$(
$(#[$attr])*
$v fn $name(&self) -> $type {
paste::paste!{
unsafe{
[<$base_type:snake _get_ $name>](self.inner.reference)
}
}
}
)*
}
#[cfg(not(feature = "mock_data"))]
extern "wasm" {
$(
paste::paste!{
fn [<$base_type:snake _get_ $name>](r: ExternRef<$base_type>) -> $type;
}
)*
}
};
}
#[macro_export]
macro_rules! wasm_value_getters_extern {
(
$base_type:ty, $type_name:ident,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> $type:ty;
)*
) => {
#[cfg(not(feature = "mock_data"))]
extern "wasm" {
$(
paste::paste!{
fn [<$type_name:snake _get_ $name>](r: ExternRef<$base_type>) -> $type;
}
)*
}
};
}
#[macro_export]
macro_rules! wasm_value_getters_funcs {
(
$base_type:ty,
$(
$(#[$attr:meta])*
$v:vis fn $name:ident(&self) -> $type:ty;
)*
) => {
$(
$(#[$attr])*
$v fn $name(&self) -> $type {
paste::paste!{
unsafe{
[<$base_type:snake _get_ $name>](self.inner.reference)
}
}
}
)*
};
}