use std::{any::Any, sync::Arc};
use jav::DynContext;
use crate::{
DI, DIK,
scope::{Scope, ScopeProvider},
};
#[async_trait::async_trait]
impl<T: 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::sp() 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: 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::sp() else {
return None;
};
let scope = crate::scope::get_default_scope_full();
let Ok(service) = sp.dis(scope) else {
return None;
};
Some(DIK(service, std::marker::PhantomData))
}
}