DMSCAppBuilder

Struct DMSCAppBuilder 

Source
pub struct DMSCAppBuilder { /* private fields */ }
Expand description

Public-facing application builder for DMSC.

The DMSCAppBuilder provides a fluent API for configuring and building DMSC applications. It follows the builder pattern, allowing users to configure various aspects of the application before building the final runtime.

§Usage

use dmsc::prelude::*;
 
#[tokio::main]
async fn main() -> DMSCResult<()> {
    let app = DMSCAppBuilder::new()
        .with_config("config.yaml")?
        .with_module(Box::new(MySyncModule::new()))
        .with_async_module(Box::new(MyAsyncModule::new()))
        .build()?;
     
    app.run(|ctx| async move {
        ctx.logger().info("service", "DMSC service started")?;
        Ok(())
    }).await
}

Implementations§

Source§

impl DMSCAppBuilder

Source

pub fn new() -> Self

Create a new empty application builder.

§Returns

A new DMSCAppBuilder instance with default settings.

Source

pub fn with_module(self, module: Box<dyn ServiceModule>) -> Self

Add a synchronous module to the application.

§Parameters
  • module: A boxed synchronous module implementing ServiceModule
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_python_module(self, module: DMSCPythonModuleAdapter) -> Self

Add a Python module to the application.

This method adds a module created from Python code to the application. The module will be treated as an asynchronous DMSC module.

§Parameters
  • module: A Python module adapter implementing module configuration
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_async_module(self, module: Box<dyn AsyncServiceModule>) -> Self

Add an asynchronous module to the application.

§Parameters
  • module: A boxed asynchronous module implementing AsyncServiceModule
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_dms_module(self, module: Box<dyn DMSCModule>) -> Self

Add a DMSC module to the application.

This method adds a module implementing the public DMSCModule trait to the application. The module will be treated as an asynchronous module.

§Parameters
  • module: A boxed module implementing DMSCModule
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_modules(self, modules: Vec<Box<dyn ServiceModule>>) -> Self

Add multiple synchronous modules to the application.

§Parameters
  • modules: A vector of boxed synchronous modules implementing ServiceModule
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_async_modules( self, modules: Vec<Box<dyn AsyncServiceModule>>, ) -> Self

Add multiple asynchronous modules to the application.

§Parameters
  • modules: A vector of boxed asynchronous modules implementing AsyncServiceModule
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_dms_modules(self, modules: Vec<Box<dyn DMSCModule>>) -> Self

Add multiple DMSC modules to the application.

This method adds multiple modules implementing the public DMSCModule trait to the application. Each module will be treated as an asynchronous module.

§Parameters
  • modules: A vector of boxed modules implementing DMSCModule
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_config(self, config_path: impl Into<String>) -> DMSCResult<Self>

Add a configuration file to the application.

§Parameters
  • config_path: Path to the configuration file
§Returns

A DMSCResult containing the updated DMSCAppBuilder instance for method chaining.

§Errors

This method currently never returns an error, but returns DMSCResult for consistency with other builder methods and to allow for future error handling.

Source

pub fn with_logging(self, logging_config: DMSCLogConfig) -> Self

Set custom logging configuration for the application.

§Parameters
  • logging_config: Custom logging configuration
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_observability( self, observability_config: DMSCObservabilityConfig, ) -> Self

Set custom observability configuration for the application.

§Parameters
  • observability_config: Custom observability configuration
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_cache_module<F>(self, config_fn: F) -> Self
where F: FnOnce(&mut DMSCCacheConfig) -> &mut DMSCCacheConfig,

Add cache module with configuration.

This method adds a cache module to the application with custom configuration. The configuration is provided via a closure that receives a cache config builder.

§Parameters
  • config_fn: Closure for configuring the cache module
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_auth_module<F>(self, config_fn: F) -> Self
where F: FnOnce(&mut DMSCAuthConfig) -> &mut DMSCAuthConfig,

Add authentication module with configuration.

This method adds an authentication module to the application with custom configuration.

§Parameters
  • config_fn: Closure for configuring the auth module
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_queue_module<F>(self, config_fn: F) -> Self
where F: FnOnce(&mut DMSCQueueConfig) -> &mut DMSCQueueConfig,

Add queue module with configuration.

This method adds a message queue module to the application with custom configuration.

§Parameters
  • config_fn: Closure for configuring the queue module
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn with_device_module<F>(self, config_fn: F) -> Self

Add device control module with configuration.

This method adds a device control module to the application with custom configuration.

§Parameters
  • config_fn: Closure for configuring the device module
§Returns

The updated DMSCAppBuilder instance for method chaining.

Source

pub fn build(self) -> DMSCResult<DMSCAppRuntime>

Build the application runtime.

This method performs the following steps:

  1. Creates and configures the configuration manager
  2. Loads configuration from specified files and environment variables
  3. Creates the service context with core functionalities
  4. Adds core modules (analytics and lifecycle observer)
  5. Sorts modules based on dependencies and priority
  6. Creates and returns the application runtime
§Returns

A DMSCResult containing the built DMSCAppRuntime instance, or an error if building fails.

§Errors
  • If configuration loading fails
  • If service context creation fails
  • If module sorting fails due to circular dependencies

Trait Implementations§

Source§

impl Default for DMSCAppBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'py> IntoPyObject<'py> for DMSCAppBuilder

Source§

type Target = DMSCAppBuilder

The Python output type
Source§

type Output = Bound<'py, <DMSCAppBuilder as IntoPyObject<'py>>::Target>

The smart pointer type to use. Read more
Source§

type Error = PyErr

The type returned in the event of a conversion error.
Source§

fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>

Performs the conversion.
Source§

impl PyClass for DMSCAppBuilder

Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for DMSCAppBuilder

Source§

const IS_BASETYPE: bool = false

#[pyclass(subclass)]
Source§

const IS_SUBCLASS: bool = false

#[pyclass(extends=…)]
Source§

const IS_MAPPING: bool = false

#[pyclass(mapping)]
Source§

const IS_SEQUENCE: bool = false

#[pyclass(sequence)]
Source§

const IS_IMMUTABLE_TYPE: bool = false

#[pyclass(immutable_type)]
Source§

const RAW_DOC: &'static CStr = /// ```

Docstring for the class provided on the struct or enum. Read more
Source§

const DOC: &'static CStr

Fully rendered class doc, including the text_signature if a constructor is defined. Read more
Source§

type BaseType = PyAny

Base class
Source§

type ThreadChecker = SendablePyClass<DMSCAppBuilder>

This handles following two situations: Read more
Source§

type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild

Immutable or mutable
Source§

type Dict = PyClassDummySlot

Specify this class has #[pyclass(dict)] or not.
Source§

type WeakRef = PyClassDummySlot

Specify this class has #[pyclass(weakref)] or not.
Source§

type BaseNativeType = PyAny

The closest native ancestor. This is PyAny by default, and when you declare #[pyclass(extends=PyDict)], it’s PyDict.
Source§

fn items_iter() -> PyClassItemsIter

Source§

fn lazy_type_object() -> &'static LazyTypeObject<Self>

§

fn dict_offset() -> Option<isize>

§

fn weaklist_offset() -> Option<isize>

Source§

impl PyClassNewTextSignature for DMSCAppBuilder

Source§

const TEXT_SIGNATURE: &'static str = "()"

Source§

impl PyMethods<DMSCAppBuilder> for PyClassImplCollector<DMSCAppBuilder>

Source§

fn py_methods(self) -> &'static PyClassItems

Source§

impl PyTypeInfo for DMSCAppBuilder

Source§

const NAME: &'static str = "DMSCAppBuilder"

Class name.
Source§

const MODULE: Option<&'static str> = ::core::option::Option::None

Module name, if any.
Source§

fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
§

fn type_object(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
§

fn is_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
§

fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
Source§

impl DerefToPyAny for DMSCAppBuilder

Source§

impl ExtractPyClassWithClone for DMSCAppBuilder

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<'py, T> IntoPyObjectExt<'py> for T
where T: IntoPyObject<'py>,

§

fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>

Converts self into an owned Python object, dropping type information.
§

fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>

Converts 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>

Converts self into a Python object. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PyErrArguments for T
where T: for<'py> IntoPyObject<'py> + Send + Sync,

§

fn arguments(self, py: Python<'_>) -> Py<PyAny>

Arguments for exception
§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

§

const NAME: &'static str = T::NAME

👎Deprecated since 0.27.0: 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.
Name of self. This is used in error messages, for example.
§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
§

fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>

Returns the expected type as a possible argument for the isinstance and issubclass function. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> Ungil for T
where T: Send,