pub unsafe trait VtableRegistered {}
#[doc(hidden)]
#[macro_export]
macro_rules! register_simple_vtable_entry {
($type:ty) => {
#[allow(unexpected_cfgs)]
const _: () = {
#[cfg(feature = "pagable")]
$crate::__derive_refs::inventory::submit! {
$crate::__derive_refs::VTableRegistryEntry {
deser_type_id: $crate::__derive_refs::DeserTypeId::of::<$type>(),
vtable: $crate::__derive_refs::AValueVTable::new::<
$crate::__derive_refs::AValueSimple<$type>
>(),
}
}
};
};
}
#[macro_export]
macro_rules! register_avalue_simple_frozen {
($type:ty) => {
$crate::register_simple_vtable_entry!($type);
unsafe impl $crate::__derive_refs::VtableRegistered for $type {}
$crate::register_ty_starlark_value!($type);
};
}
macro_rules! register_special_avalue_frozen {
($starlark_value:ty, $avalue:ty) => {
#[allow(unexpected_cfgs)]
const _: () = {
#[cfg(feature = "pagable")]
inventory::submit! {
$crate::pagable::vtable_registry::VTableRegistryEntry {
deser_type_id: $crate::__derive_refs::DeserTypeId::of::<$starlark_value>(),
vtable: $crate::values::layout::vtable::AValueVTable::new::<$avalue>(),
}
}
};
};
}
pub(crate) use register_special_avalue_frozen;
#[macro_export]
macro_rules! register_type_matcher {
($wrapper:ident < $($arg:ty),+ $(,)? >) => {
$crate::register_simple_vtable_entry!(
$crate::values::typing::TypeCompiledImplAsStarlarkValue<$wrapper<$($arg),+>>
);
pagable::register_typetag!($wrapper<$($arg),+> as dyn $crate::__derive_refs::TypeMatcherDyn);
};
($matcher:ty) => {
$crate::register_simple_vtable_entry!(
$crate::values::typing::TypeCompiledImplAsStarlarkValue<
$matcher,
>
);
};
}