soph_core/traits/
instance.rsuse crate::{
error::ContainerError,
support::{app, type_name, Container},
traits::ErrorTrait,
Result,
};
use async_trait::async_trait;
#[async_trait]
pub trait InstanceTrait: std::any::Any + Send + Sync {
type Error: ErrorTrait;
fn name() -> String {
type_name::<Self>()
}
async fn register(_: &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}"))
}
}