pub trait Module: Sized {
type Config;
type Requirements;
type Capability;
type Error: Error + Send + Sync + 'static;
type Builder: ModuleBuilder<Self>;
const NAME: &'static str;
}Expand description
The standard interface that all modules must implement.
A module declares:
NAME: A diagnostic name for the module.Config: The configuration type required for initialization.Requirements: The dependencies required for initialization.Capability: The capability facade exposed to consumers.Error: The initialization error type.Builder: The standard builder type that implementsModuleBuilder<Self>.
§Associated Types
Config: UseNoConfigif the module requires no configuration.Requirements: UseNoRequirementsif the module has no dependencies.Capability: TypicallyArc<dyn SomeTrait + Send + Sync>.Error: Must satisfystd::error::Error + Send + Sync + 'static.Builder: Must implementModuleBuilder<Self>.
§Example
use trait_kit::prelude::*;
use std::sync::Arc;
struct MyModule;
impl Module for MyModule {
const NAME: &'static str = "my_module";
type Config = NoConfig;
type Requirements = NoRequirements;
type Capability = Arc<i32>;
type Error = std::convert::Infallible;
type Builder = MyBuilder;
}
struct MyBuilder;
impl ModuleBuilder<MyModule> for MyBuilder {
fn build(self) -> Result<Arc<i32>, std::convert::Infallible> {
Ok(Arc::new(42))
}
}Required Associated Constants§
Required Associated Types§
Sourcetype Config
type Config
The configuration type required for initialization.
Use NoConfig if no configuration is needed.
Sourcetype Requirements
type Requirements
The dependencies required for initialization.
Use NoRequirements if no dependencies are needed.
Sourcetype Capability
type Capability
The capability facade exposed to consumers.
Typically Arc<dyn SomeTrait + Send + Sync>.
Sourcetype Error: Error + Send + Sync + 'static
type Error: Error + Send + Sync + 'static
The initialization error type.
Must satisfy std::error::Error + Send + Sync + 'static.
Sourcetype Builder: ModuleBuilder<Self>
type Builder: ModuleBuilder<Self>
The standard builder for this module.
Must implement ModuleBuilder<Self> (enforced at usage points).
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.