use std::sync::Arc;
use jav::DynContext;
use crate::{DI, DIK};
#[async_trait::async_trait]
impl<T: ?Sized + Send + Sync + 'static, E: Send + Sync + 'static> jav::FromEvent<E> for DI<T> {
async fn from_event(_event: Arc<E>, _extensions: &DynContext) -> Option<Self> {
let Some(sp) = crate::spo() else {
return None;
};
let scope = crate::scope::get_default_scope_full();
let Ok(service) = sp.dis(scope) else {
return None;
};
Some(DI(service))
}
}
#[async_trait::async_trait]
impl<T: ?Sized + Send + Sync + 'static, E: Send + Sync + 'static, K: Send + Sync + 'static>
jav::FromEvent<E> for DIK<T, K>
{
async fn from_event(_event: Arc<E>, _extensions: &DynContext) -> Option<Self> {
let Some(sp) = crate::spo() else {
return None;
};
let scope = crate::scope::get_default_scope_full();
let Ok(service) = sp.disk::<T, K>(scope) else {
return None;
};
Some(DIK(service, std::marker::PhantomData))
}
}