Skip to main content

RiAppBuilder

Struct RiAppBuilder 

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

Public-facing application builder for Ri.

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

§Usage

use ri::prelude::*;
 
#[tokio::main]
async fn main() -> RiResult<()> {
    let app = RiAppBuilder::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", "Ri service started")?;
        Ok(())
    }).await
}

Implementations§

Source§

impl RiAppBuilder

Source

pub fn new() -> Self

Create a new empty application builder.

§Returns

A new RiAppBuilder 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 RiAppBuilder instance for method chaining.

Source

pub fn with_python_module(self, module: RiPythonModuleAdapter) -> 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 Ri module.

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

The updated RiAppBuilder 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 RiAppBuilder instance for method chaining.

Source

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

Add a Ri module to the application.

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

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

The updated RiAppBuilder 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 RiAppBuilder 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 RiAppBuilder instance for method chaining.

Source

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

Add multiple Ri modules to the application.

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

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

The updated RiAppBuilder instance for method chaining.

Source

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

Add a configuration file to the application.

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

A RiResult containing the updated RiAppBuilder instance for method chaining.

§Errors

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

Source

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

Set custom logging configuration for the application.

§Parameters
  • logging_config: Custom logging configuration
§Returns

The updated RiAppBuilder instance for method chaining.

Source

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

Set custom observability configuration for the application.

§Parameters
  • observability_config: Custom observability configuration
§Returns

The updated RiAppBuilder instance for method chaining.

Source

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

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 RiAppBuilder instance for method chaining.

Source

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

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 RiAppBuilder instance for method chaining.

Source

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

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 RiAppBuilder 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 RiAppBuilder instance for method chaining.

Source

pub fn build(self) -> RiResult<RiAppRuntime>

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 RiResult containing the built RiAppRuntime 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 RiAppBuilder

Source§

fn default() -> Self

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

impl<'py> IntoPyObject<'py> for RiAppBuilder

Source§

type Target = RiAppBuilder

The Python output type
Source§

type Output = Bound<'py, <RiAppBuilder 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 RiAppBuilder

Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for RiAppBuilder

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

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 RiAppBuilder

Source§

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

Source§

impl PyMethods<RiAppBuilder> for PyClassImplCollector<RiAppBuilder>

Source§

fn py_methods(self) -> &'static PyClassItems

Source§

impl PyTypeInfo for RiAppBuilder

Source§

const NAME: &'static str = "RiAppBuilder"

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 RiAppBuilder

Source§

impl ExtractPyClassWithClone for RiAppBuilder

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,