#[doc(hidden)]
#[macro_export]
macro_rules! __nichlink_object {
(collector: $collector:ident, $($tokens:tt)*) => {
$crate::__control_object! { collector: $collector, $($tokens)* }
};
($($tokens:tt)*) => {
$crate::__control_object! { collector: development, $($tokens)* }
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __control_object {
{
collector: $collector:ident,
kind: $kind:ident,
$(preset: $preset:ty,)?
$(parts: $parts:ty,)?
$(name: { zh: $name_zh:expr, en: $name_en:expr },)?
$(summary: { zh: $summary_zh:expr, en: $summary_en:expr },)?
$(exports: [$($export:expr),* $(,)?],)?
$(stable_name: $stable_name:literal,)?
$(needs_registry: $needs_registry:expr,)?
$(parent: $parent:expr,)?
$(getting_from_other_registry: $getting:expr,)?
$(registry_rule_path: $rule_path:expr,)?
$(registry_rule: $rule:expr,)?
$(admission: $admission:expr,)?
$(handle_traits: [$($handle_trait:literal),* $(,)?],)?
$(handle_contracts: [$($handle_contract:path),* $(,)?],)?
$(part_traits: [$($part_trait:literal),* $(,)?],)?
$(part_contracts: [$($part_contract:path),* $(,)?],)?
$(requires: [$($require:expr => $provider:expr),* $(,)?],)?
$(provides: [$($provide:expr),* $(,)?],)?
$(flow: $flow:expr,)?
$(flow_provider: $flow_provider:path,)?
$(plugin: $plugin:expr,)?
$(runtime_checks: [$($runtime_check:expr),* $(,)?],)?
$(,)?
} => {
$crate::__registration_face! {
source: $crate::registry_core::manifest_relative_source(env!("CARGO_MANIFEST_DIR"), file!()),
collector: $collector,
kind: $kind,
preset: $crate::__face_ty_or!($crate::NoPreset; $($preset)?),
preset_name: $crate::__face_ty_name_or!("NoPreset"; $($preset)?),
parts: $crate::__face_ty_or!($crate::NoParts; $($parts)?),
parts_name: $crate::__face_ty_name_or!("NoParts"; $($parts)?),
name: {
zh: $crate::__face_value_or!(stringify!($kind); [$($name_zh)?]),
en: $crate::__face_value_or!(stringify!($kind); [$($name_en)?]),
},
summary: {
zh: $crate::__face_value_or!(""; [$($summary_zh)?]),
en: $crate::__face_value_or!(""; [$($summary_en)?]),
},
params: stringify!($kind),
exports: [$($($export),*)?],
handle: $kind,
handle_name: stringify!($kind),
$(stable_name: $stable_name,)?
needs_registry: $crate::__face_expr_or!(false; $($needs_registry)?),
registry_name: $crate::registry_core::last_path_segment(module_path!()),
parent: $crate::__face_expr_or!($crate::root_node_id(env!("CARGO_PKG_NAME")); $($parent)?),
getting_from_other_registry: $crate::__face_expr_or!(None; $($getting)?),
registry_rule_path: $crate::__face_expr_or!($crate::registry_core::manifest_relative_source(env!("CARGO_MANIFEST_DIR"), file!()); $($rule_path)?),
registry_rule: $crate::__face_rule_or!(
$crate::RegistrationRule::ANY;
$($needs_registry)?;
$($rule)?
),
$(admission: $admission,)?
$(handle_traits: [$($handle_trait),*],)?
$(handle_contracts: [$($handle_contract),*],)?
$(part_traits: [$($part_trait),*],)?
$(part_contracts: [$($part_contract),*],)?
requires: [$($($require => $provider),*)?],
provides: [$($($provide),*)?],
$(flow: $flow,)?
$(flow_provider: $flow_provider,)?
$(plugin: $plugin,)?
runtime_checks: [$($($runtime_check),*)?],
}
};
{
collector: $collector:ident,
$($tokens:tt)*
} => {
::nichlink_run_method::face_fields! { @control collector: $collector, $($tokens)* }
};
}