pub struct DMSCPythonModuleAdapter {
pub name: String,
pub is_critical: bool,
pub priority: i32,
pub dependencies: Vec<String>,
}Expand description
Python module adapter that implements DMSCModule trait.
This structure enables Python modules to integrate with the DMSC module system
by implementing the AsyncServiceModule trait. Python code can create instances
of this adapter with custom configuration, and they will participate in the
module lifecycle just like Rust-native modules.
§Thread Safety
This structure is designed to be safely used across threads when combined with the appropriate Python GIL management. The underlying implementation ensures proper synchronization during lifecycle callbacks.
§Lifecycle Methods
All lifecycle methods (init, before_start, start, after_start,
before_shutdown, shutdown, after_shutdown) have default implementations
that return Ok(()), allowing Python modules to override only the methods
they need.
§Python Usage
class MyPythonModule:
def name(&self):
return "python_module"
async def start(&self, ctx):
print("Starting Python module")
return None
adapter = dms.DMSCPythonModuleAdapter(name="my_module")
adapter.name = "python_module"Fields§
§name: String§is_critical: bool§priority: i32§dependencies: Vec<String>Trait Implementations§
Source§impl AsyncServiceModule for DMSCPythonModuleAdapter
impl AsyncServiceModule for DMSCPythonModuleAdapter
Source§fn is_critical(&self) -> bool
fn is_critical(&self) -> bool
Source§fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn before_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn before_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn before_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn after_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + 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 DMSCServiceContext,
) -> Pin<Box<dyn Future<Output = DMSCResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl Clone for DMSCPythonModuleAdapter
impl Clone for DMSCPythonModuleAdapter
Source§fn clone(&self) -> DMSCPythonModuleAdapter
fn clone(&self) -> DMSCPythonModuleAdapter
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'py> IntoPyObject<'py> for DMSCPythonModuleAdapter
impl<'py> IntoPyObject<'py> for DMSCPythonModuleAdapter
Source§type Target = DMSCPythonModuleAdapter
type Target = DMSCPythonModuleAdapter
Source§type Output = Bound<'py, <DMSCPythonModuleAdapter as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DMSCPythonModuleAdapter 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 DMSCPythonModuleAdapter
impl PyClass for DMSCPythonModuleAdapter
Source§impl PyClassImpl for DMSCPythonModuleAdapter
impl PyClassImpl for DMSCPythonModuleAdapter
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"Python module adapter that implements DMSCModule trait.\n\nThis structure enables Python modules to integrate with the DMSC module system\nby implementing the `AsyncServiceModule` trait. Python code can create instances\nof this adapter with custom configuration, and they will participate in the\nmodule lifecycle just like Rust-native modules.\n\n## Thread Safety\n\nThis structure is designed to be safely used across threads when combined\nwith the appropriate Python GIL management. The underlying implementation\nensures proper synchronization during lifecycle callbacks.\n\n## Lifecycle Methods\n\nAll lifecycle methods (`init`, `before_start`, `start`, `after_start`,\n`before_shutdown`, `shutdown`, `after_shutdown`) have default implementations\nthat return `Ok(())`, allowing Python modules to override only the methods\nthey need.\n\n## Python Usage\n\n```python\n\n\nclass MyPythonModule:\n def name(&self):\n return \"python_module\"\n\n async def start(&self, ctx):\n print(\"Starting Python module\")\n return None\n\nadapter = dms.DMSCPythonModuleAdapter(name=\"my_module\")\nadapter.name = \"python_module\"\n```\x00"
const RAW_DOC: &'static CStr = c"Python module adapter that implements DMSCModule trait.\n\nThis structure enables Python modules to integrate with the DMSC module system\nby implementing the `AsyncServiceModule` trait. Python code can create instances\nof this adapter with custom configuration, and they will participate in the\nmodule lifecycle just like Rust-native modules.\n\n## Thread Safety\n\nThis structure is designed to be safely used across threads when combined\nwith the appropriate Python GIL management. The underlying implementation\nensures proper synchronization during lifecycle callbacks.\n\n## Lifecycle Methods\n\nAll lifecycle methods (`init`, `before_start`, `start`, `after_start`,\n`before_shutdown`, `shutdown`, `after_shutdown`) have default implementations\nthat return `Ok(())`, allowing Python modules to override only the methods\nthey need.\n\n## Python Usage\n\n```python\n\n\nclass MyPythonModule:\n def name(&self):\n return \"python_module\"\n\n async def start(&self, ctx):\n print(\"Starting Python module\")\n return None\n\nadapter = dms.DMSCPythonModuleAdapter(name=\"my_module\")\nadapter.name = \"python_module\"\n```\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DMSCPythonModuleAdapter>
type ThreadChecker = SendablePyClass<DMSCPythonModuleAdapter>
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 DMSCPythonModuleAdapter
impl PyClassNewTextSignature for DMSCPythonModuleAdapter
const TEXT_SIGNATURE: &'static str = "(name)"
Source§impl PyMethods<DMSCPythonModuleAdapter> for PyClassImplCollector<DMSCPythonModuleAdapter>
impl PyMethods<DMSCPythonModuleAdapter> for PyClassImplCollector<DMSCPythonModuleAdapter>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for DMSCPythonModuleAdapter
impl PyTypeInfo for DMSCPythonModuleAdapter
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 DMSCPythonModuleAdapter
impl ExtractPyClassWithClone for DMSCPythonModuleAdapter
Auto Trait Implementations§
impl Freeze for DMSCPythonModuleAdapter
impl RefUnwindSafe for DMSCPythonModuleAdapter
impl Send for DMSCPythonModuleAdapter
impl Sync for DMSCPythonModuleAdapter
impl Unpin for DMSCPythonModuleAdapter
impl UnwindSafe for DMSCPythonModuleAdapter
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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