1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
mod provider; pub use provider::{Provider, ProvideResult, Resolvable, StaticProvider}; mod error; pub use error::Error; mod resolver; pub use resolver::{Resolver, ResolverBuilder, ResolverRef, Deferred}; mod helpers; pub use async_trait::async_trait; pub type Ref<T> = std::sync::Arc<T>; #[derive(Debug)] pub struct Container { registry: Resolver, } impl Container { pub fn new<F>(config: F) -> Self where F: FnOnce(&mut ResolverBuilder) { let mut builder = ResolverBuilder::new(); config(&mut builder); Self { registry: builder.finalize() } } pub async fn resolve<S>(&self) -> Result<S, Error> where S: Resolvable { self.registry.resolve().await } }