pub struct HookRegistry { /* private fields */ }Expand description
Registry of component lifecycle hooks.
Hooks are runtime-only (not persisted to on-chain storage) and must be re-registered each contract invocation. They allow reactive patterns such as updating indexes or cleaning up related state.
§Example
use cougr_core::runtime::HookRegistry;
use soroban_sdk::{symbol_short, Bytes, Symbol};
fn on_add(_entity_id: u32, _ctype: &Symbol, _data: &Bytes) {}
let mut hooks = HookRegistry::new();
hooks.on_add(symbol_short!("pos"), on_add);
assert_eq!(hooks.add_hook_count(), 1);Implementations§
Source§impl HookRegistry
impl HookRegistry
Sourcepub fn on_add(
&mut self,
component_type: Symbol,
hook: fn(entity_id: EntityId, component_type: &Symbol, data: &Bytes),
)
pub fn on_add( &mut self, component_type: Symbol, hook: fn(entity_id: EntityId, component_type: &Symbol, data: &Bytes), )
Register a hook that fires when a component of the given type is added.
Sourcepub fn on_remove(
&mut self,
component_type: Symbol,
hook: fn(entity_id: EntityId, component_type: &Symbol),
)
pub fn on_remove( &mut self, component_type: Symbol, hook: fn(entity_id: EntityId, component_type: &Symbol), )
Register a hook that fires when a component of the given type is removed.
Sourcepub fn fire_on_add(
&self,
entity_id: EntityId,
component_type: &Symbol,
data: &Bytes,
)
pub fn fire_on_add( &self, entity_id: EntityId, component_type: &Symbol, data: &Bytes, )
Fire all registered on_add hooks for the given component type.
Sourcepub fn fire_on_remove(&self, entity_id: EntityId, component_type: &Symbol)
pub fn fire_on_remove(&self, entity_id: EntityId, component_type: &Symbol)
Fire all registered on_remove hooks for the given component type.
Sourcepub fn add_hook_count(&self) -> usize
pub fn add_hook_count(&self) -> usize
Returns the number of registered add hooks.
Sourcepub fn remove_hook_count(&self) -> usize
pub fn remove_hook_count(&self) -> usize
Returns the number of registered remove hooks.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for HookRegistry
impl !RefUnwindSafe for HookRegistry
impl !Send for HookRegistry
impl !Sync for HookRegistry
impl Unpin for HookRegistry
impl UnsafeUnpin for HookRegistry
impl !UnwindSafe for HookRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W), b: &(T, U, V, W), ) -> Result<Ordering, <C as Compare<(T, U, V, W)>>::Error>
Source§impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
type Error = E
fn compare( &self, a: &(T, U, V, W, X), b: &(T, U, V, W, X), ) -> Result<Ordering, <C as Compare<(T, U, V, W, X)>>::Error>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more