pub struct RiCacheModule { /* private fields */ }Expand description
Main cache module for Ri.
This module provides a unified caching abstraction with support for multiple backend implementations.
It implements both the AsyncServiceModule and ServiceModule traits for seamless integration
into the Ri application lifecycle.
Implementations§
Source§impl RiCacheModule
impl RiCacheModule
Sourcepub async fn new(config: RiCacheConfig) -> Self
pub async fn new(config: RiCacheConfig) -> Self
Creates a new cache module with the given configuration.
This method initializes the cache manager with the appropriate backend based on the provided configuration. The backend is created immediately, not as a placeholder.
§Parameters
config: The cache configuration to use
§Returns
A new RiCacheModule instance
Sourcepub fn with_config(config: RiCacheConfig) -> Self
pub fn with_config(config: RiCacheConfig) -> Self
Creates a new cache module with the given configuration (synchronous version).
This is a synchronous wrapper around the async new method for use in the builder pattern.
For Redis and Hybrid backends, it will block on the current thread to create the backend.
§Parameters
config: The cache configuration to use
§Returns
A new RiCacheModule instance
Sourcepub fn cache_manager(&self) -> Arc<RwLock<RiCacheManager>>
pub fn cache_manager(&self) -> Arc<RwLock<RiCacheManager>>
Returns a reference to the cache manager.
The cache manager is wrapped in an Arc<RwLock<>> to allow thread-safe access from multiple async tasks.
§Returns
An Arc<RwLock
Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for RiCacheModule
impl<'py> IntoPyObject<'py> for RiCacheModule
Source§type Target = RiCacheModule
type Target = RiCacheModule
Source§type Output = Bound<'py, <RiCacheModule as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <RiCacheModule as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for RiCacheModule
impl PyClass for RiCacheModule
Source§impl PyClassImpl for RiCacheModule
impl PyClassImpl for RiCacheModule
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 = /// into the Ri application lifecycle.
const RAW_DOC: &'static CStr = /// into the Ri application lifecycle.
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<RiCacheModule>
type ThreadChecker = SendablePyClass<RiCacheModule>
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 PyClassNewTextSignature for RiCacheModule
impl PyClassNewTextSignature for RiCacheModule
const TEXT_SIGNATURE: &'static str = "(config)"
Source§impl PyMethods<RiCacheModule> for PyClassImplCollector<RiCacheModule>
impl PyMethods<RiCacheModule> for PyClassImplCollector<RiCacheModule>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for RiCacheModule
impl PyTypeInfo for RiCacheModule
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.Source§impl RiModule for RiCacheModule
impl RiModule for RiCacheModule
Source§fn is_critical(&self) -> bool
fn is_critical(&self) -> bool
Indicates whether the cache module is critical.
The cache module is non-critical, meaning that if it fails to initialize or operate, it should not break the entire application. This allows the core functionality to continue even if caching features are unavailable.
§Returns
false since cache is non-critical
Source§fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Initializes the cache module asynchronously.
This method performs the following steps:
- Loads configuration from the service context
- Updates the module configuration if provided
- Initializes the appropriate cache backend based on configuration
- Creates and sets the cache manager with the initialized backend
§Parameters
ctx: The service context containing configuration and other services
§Returns
A RiResult<()> indicating success or failure
Source§fn after_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn after_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Performs asynchronous cleanup after the application has shut down.
This method performs the following steps:
- Prints cache statistics
- Cleans up expired cache entries
- Prints cleanup results
§Parameters
_ctx: The service context (not used in this implementation)
§Returns
A RiResult<()> indicating success or failure
Source§fn before_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn before_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn after_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn after_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl ServiceModule for RiCacheModule
impl ServiceModule for RiCacheModule
Source§fn is_critical(&self) -> bool
fn is_critical(&self) -> bool
Source§fn init(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn init(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
Source§fn start(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn start(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
Source§fn shutdown(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn shutdown(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
Source§fn before_start(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn before_start(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
Source§fn after_start(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn after_start(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
Source§fn before_shutdown(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn before_shutdown(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
Source§fn after_shutdown(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
fn after_shutdown(&mut self, _ctx: &mut RiServiceContext) -> RiResult<()>
impl DerefToPyAny for RiCacheModule
impl ExtractPyClassWithClone for RiCacheModule
Auto Trait Implementations§
impl Freeze for RiCacheModule
impl !RefUnwindSafe for RiCacheModule
impl Send for RiCacheModule
impl Sync for RiCacheModule
impl Unpin for RiCacheModule
impl UnsafeUnpin for RiCacheModule
impl !UnwindSafe for RiCacheModule
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> 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> 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
§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