soph_core/traits/
instance.rsuse crate::{
error::ContainerError,
support::{app, type_name, Container},
Result,
};
use async_trait::async_trait;
#[async_trait]
pub trait InstanceTrait: std::any::Any + Send + Sync {
type Config: serde::de::DeserializeOwned;
fn name() -> String {
type_name::<Self>()
}
async fn register(container: &Container) -> Result<Self, ContainerError>
where
Self: Sized;
async fn boot() -> Result<(), ContainerError>
where
Self: Sized,
{
Ok(())
}
fn cleanup() -> Result<(), ContainerError> {
Ok(())
}
fn facade() -> &'static Self
where
Self: Sized,
{
app()
.resolve::<Self>()
.unwrap_or_else(|err| panic!("{err}"))
}
}