use thiserror::Error;
pub mod configuration;
pub mod id;
#[derive(Error, Debug)]
pub enum ComponentError {
#[error("configuration error {0}")]
ConfigError(String),
#[error("runtime error: {0}")]
RuntimeError(String),
#[error("unknown error")]
Unknown,
}
pub trait Component {
fn identifier(&self) -> &id::ID;
#[allow(async_fn_in_trait)]
async fn start(&mut self) -> Result<(), ComponentError>;
}
pub trait ComponentBuilder {
type Config;
type Component: Component;
fn kind(&self) -> id::Kind;
fn build(&self, name: String) -> Result<Self::Component, ComponentError>;
fn build_with_config(
&self,
name: &str,
config: &Self::Config,
) -> Result<Self::Component, ComponentError>;
}