pub struct RiHookBus { /* private fields */ }Expand description
Hook bus for registering and emitting hooks.
This struct manages the registration of hook handlers and the emission of hook events. It allows multiple handlers to be registered for the same hook kind.
Implementations§
Source§impl RiHookBus
impl RiHookBus
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new hook bus instance.
Returns a new RiHookBus instance with no registered handlers.
Sourcepub fn register<F>(&mut self, kind: RiHookKind, id: RiHookId, handler: F)
pub fn register<F>(&mut self, kind: RiHookKind, id: RiHookId, handler: F)
Registers a hook handler for a specific hook kind.
§Parameters
kind: The hook kind to register the handler forid: A unique ID for the hook handler (1-128 alphanumeric chars, dash, underscore)handler: The handler function to execute when the hook is emitted
§Security
Hook IDs are validated to prevent injection attacks. Only alphanumeric characters, dashes, and underscores are allowed.
The handler function takes a RiServiceContext and a RiHookEvent and returns a RiResult<()>.
Sourcepub fn emit(&self, kind: &RiHookKind, ctx: &RiServiceContext) -> RiResult<()>
pub fn emit(&self, kind: &RiHookKind, ctx: &RiServiceContext) -> RiResult<()>
Sourcepub fn emit_with(
&self,
kind: &RiHookKind,
ctx: &RiServiceContext,
module: Option<&str>,
phase: Option<RiModulePhase>,
) -> RiResult<()>
pub fn emit_with( &self, kind: &RiHookKind, ctx: &RiServiceContext, module: Option<&str>, phase: Option<RiModulePhase>, ) -> RiResult<()>
Emits a hook event with additional contextual information.
§Parameters
kind: The hook kind to emitctx: The service context to pass to the hook handlersmodule: The name of the module associated with the event (if any)phase: The module phase associated with the event (if any)
§Returns
A RiResult<()> indicating success or failure
Sourcepub fn emit_simple(
&self,
kind: &RiHookKind,
module: Option<&str>,
phase: Option<RiModulePhase>,
) -> RiResult<()>
pub fn emit_simple( &self, kind: &RiHookKind, module: Option<&str>, phase: Option<RiModulePhase>, ) -> RiResult<()>
Emits a hook event without a service context.
This is a simplified version of emit that creates a default context.
§Parameters
kind: The hook kind to emitmodule: The name of the module associated with the event (if any)phase: The module phase associated with the event (if any)
§Returns
A RiResult<()> indicating success or failure
Sourcepub fn has_handlers(&self, kind: &RiHookKind) -> bool
pub fn has_handlers(&self, kind: &RiHookKind) -> bool
Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for RiHookBus
impl<'py> IntoPyObject<'py> for RiHookBus
Source§impl PyClassImpl for RiHookBus
impl PyClassImpl for RiHookBus
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = c"Hook bus for registering and emitting hooks.\n\nThis struct manages the registration of hook handlers and the emission of hook events.\nIt allows multiple handlers to be registered for the same hook kind.\x00"
const RAW_DOC: &'static CStr = c"Hook bus for registering and emitting hooks.\n\nThis struct manages the registration of hook handlers and the emission of hook events.\nIt allows multiple handlers to be registered for the same hook kind.\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<RiHookBus>
type ThreadChecker = SendablePyClass<RiHookBus>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyMethods<RiHookBus> for PyClassImplCollector<RiHookBus>
impl PyMethods<RiHookBus> for PyClassImplCollector<RiHookBus>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for RiHookBus
impl PyTypeInfo for RiHookBus
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for RiHookBus
impl ExtractPyClassWithClone for RiHookBus
Auto Trait Implementations§
impl Freeze for RiHookBus
impl !RefUnwindSafe for RiHookBus
impl Send for RiHookBus
impl Sync for RiHookBus
impl Unpin for RiHookBus
impl UnsafeUnpin for RiHookBus
impl !UnwindSafe for RiHookBus
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> FitForCBox for T
impl<T> FitForCBox for T
type CBoxWrapped = Box_<T>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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>
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§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> ManuallyDropMut for T
impl<T> ManuallyDropMut for T
type Ret = ManuallyDrop<T>
fn manually_drop_mut<'__>(&'__ mut self) -> &'__ mut ManuallyDrop<T>
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
Use ::classinfo_object() instead and format the type name at runtime. Note that using built-in cast features is often better than manual PyTypeCheck usage.
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more