macro_rules! register_gtype_tokens {
($engine:expr_2021; $($token:ident),+ $(,)?) => {{
$( $engine.register_get(stringify!($token), |_: &mut ScriptGType| GType::$token); )+
}};
}
macro_rules! register_variadic {
(@arity_ctx $registry:expr_2021, $names:expr_2021, [$($p:ident),+], |$ctx:ident, $recv:tt : $recv_ty:ty, $args:ident| $delegate:expr_2021) => {
for name in $names {
$registry.register_fn(name, move |$ctx: NativeCallContext, $recv: $recv_ty, $($p: Dynamic),+| {
let $args: Vec<Dynamic> = vec![$($p),+];
$delegate
});
}
};
(ctx $registry:expr_2021, $names:expr_2021, |$ctx:ident, $recv:tt : $recv_ty:ty, $args:ident| $delegate:expr_2021) => {
register_variadic!(@arity_ctx $registry, $names, [a1, a2], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4, a5], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4, a5, a6], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4, a5, a6, a7], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4, a5, a6, a7, a8], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4, a5, a6, a7, a8, a9], |$ctx, $recv: $recv_ty, $args| $delegate);
register_variadic!(@arity_ctx $registry, $names, [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10], |$ctx, $recv: $recv_ty, $args| $delegate);
};
(@arity $registry:expr_2021, $names:expr_2021 => $n:ident, [$($p:ident),+], |$recv:tt : $recv_ty:ty, $args:ident| $delegate:expr_2021) => {
for $n in $names {
$registry.register_fn($n, move |$recv: $recv_ty, $($p: Dynamic),+| {
let $args: Vec<Dynamic> = vec![$($p),+];
$delegate
});
}
};
($registry:expr_2021, $names:expr_2021 => $n:ident, |$recv:tt : $recv_ty:ty, $args:ident| $delegate:expr_2021) => {
register_variadic!(@arity $registry, $names => $n, [a1, a2], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4, a5], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4, a5, a6], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4, a5, a6, a7], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4, a5, a6, a7, a8], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4, a5, a6, a7, a8, a9], |$recv: $recv_ty, $args| $delegate);
register_variadic!(@arity $registry, $names => $n, [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10], |$recv: $recv_ty, $args| $delegate);
};
($registry:expr_2021, $names:expr_2021, |$recv:tt : $recv_ty:ty, $args:ident| $delegate:expr_2021) => {
register_variadic!($registry, $names => _name, |$recv: $recv_ty, $args| $delegate)
};
}
macro_rules! register_variadic_module {
(@arity $module:expr_2021, $names:expr_2021, [$($p:ident),+], |$args:ident| $delegate:expr_2021) => {
for name in $names {
FuncRegistration::new(name).set_into_module($module, |$($p: Dynamic),+| {
let $args: Vec<Dynamic> = vec![$($p),+];
$delegate
});
}
};
($module:expr_2021, $names:expr_2021, |$args:ident| $delegate:expr_2021) => {
register_variadic_module!(@arity $module, $names, [a1, a2], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4, a5], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4, a5, a6], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4, a5, a6, a7], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4, a5, a6, a7, a8], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4, a5, a6, a7, a8, a9], |$args| $delegate);
register_variadic_module!(@arity $module, $names, [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10], |$args| $delegate);
};
}
mod docs;
#[doc(hidden)]
pub fn doc_examples() -> impl Iterator<
Item = (
&'static str,
&'static str,
&'static str,
Option<&'static str>,
),
> {
docs::DOCS.iter().map(|doc| {
let result = (doc.result != docs::NOT_RUN).then_some(doc.result);
(doc.receiver, doc.name, doc.example, result)
})
}
#[cfg(all(test, feature = "serde"))]
mod docs_tests;
mod registry;
mod steps;
mod terminals;
mod tokens;
mod types;
pub(crate) use registry::Registry;
pub(super) use registry::new_engine;
#[cfg(test)]
pub(crate) use registry::replaced_signatures;
pub(crate) use registry::{display_type_name, display_type_names_in};
fn register_all(registry: &mut Registry) {
types::register_graph_source(registry);
tokens::register(registry);
types::register_values(registry);
types::register_schema(registry);
terminals::register(registry);
steps::register(registry);
crate::script::fake::register(registry);
}