pub trait Resolve<S>: Send + Sync + 'static {
fn resolve(state: &S) -> Self;
}
#[cfg(feature = "database")]
impl<S> Resolve<S> for crate::database::Db
where
crate::database::Db: crate::dx::db_from_state::DbFromState<S>,
S: Send + Sync,
{
fn resolve(state: &S) -> Self {
use crate::dx::db_from_state::DbFromState;
crate::database::Db::db_from_state(state)
}
}
#[cfg(feature = "cache")]
impl<S> Resolve<S> for crate::cache::Cache
where
crate::cache::Cache: crate::dx::from_state::CacheFromState<S>,
S: Send + Sync,
{
fn resolve(state: &S) -> Self {
use crate::dx::from_state::CacheFromState;
crate::cache::Cache::cache_from_state(state)
}
}
#[cfg(feature = "storage-fs")]
impl<S> Resolve<S> for crate::storage::Storage
where
crate::storage::Storage: crate::dx::from_state::StorageFromState<S>,
S: Send + Sync,
{
fn resolve(state: &S) -> Self {
use crate::dx::from_state::StorageFromState;
crate::storage::Storage::storage_from_state(state)
}
}
#[cfg(feature = "mail")]
impl<S> Resolve<S> for crate::mail::Mail
where
crate::mail::Mail: crate::dx::from_state::MailFromState<S>,
S: Send + Sync,
{
fn resolve(state: &S) -> Self {
use crate::dx::from_state::MailFromState;
crate::mail::Mail::mail_from_state(state)
}
}
#[cfg(feature = "jobs")]
impl<S> Resolve<S> for crate::jobs::Jobs
where
crate::jobs::Jobs: crate::dx::from_state::JobsFromState<S>,
S: Send + Sync,
{
fn resolve(state: &S) -> Self {
use crate::dx::from_state::JobsFromState;
crate::jobs::Jobs::jobs_from_state(state)
}
}
#[cfg(feature = "events")]
impl<S> Resolve<S> for crate::events::Dispatcher
where
crate::events::Dispatcher: crate::dx::from_state::EventsFromState<S>,
S: Send + Sync,
{
fn resolve(state: &S) -> Self {
use crate::dx::from_state::EventsFromState;
crate::events::Dispatcher::events_from_state(state)
}
}
#[cfg(test)]
mod tests {
use super::Resolve;
#[cfg(feature = "cache")]
#[test]
fn cache_resolves_from_itself() {
fn assert_resolves<T: Resolve<T>>() {}
assert_resolves::<crate::cache::Cache>();
}
#[cfg(feature = "storage-fs")]
#[test]
fn storage_resolves_from_itself() {
fn assert_resolves<T: Resolve<T>>() {}
assert_resolves::<crate::storage::Storage>();
}
#[cfg(feature = "mail")]
#[test]
fn mail_resolves_from_itself() {
fn assert_resolves<T: Resolve<T>>() {}
assert_resolves::<crate::mail::Mail>();
}
#[cfg(feature = "jobs")]
#[test]
fn jobs_resolves_from_itself() {
fn assert_resolves<T: Resolve<T>>() {}
assert_resolves::<crate::jobs::Jobs>();
}
#[cfg(feature = "events")]
#[test]
fn events_resolve_from_themselves() {
fn assert_resolves<T: Resolve<T>>() {}
assert_resolves::<crate::events::Dispatcher>();
}
#[cfg(feature = "database")]
#[test]
fn db_resolves_from_itself() {
fn assert_resolves<T: Resolve<T>>() {}
assert_resolves::<crate::database::Db>();
}
}