typed_container/lib.rs
1//! A simple container for IoC
2//! Example:
3//! ```
4//! let config = /* ... */;
5//! let container = Container::new();
6//! container.register_constructor(|_| Arc::new(Client::new()));
7//!
8//! let config_cloned = config.clone();
9//! container.register_constructor(move |x| {
10//! Arc::new(Downloader::new(
11//! x.get(),
12//! config_cloned.download_threads.unwrap_or(1), // default single thread
13//! ))
14//! });
15//!
16//! let config_cloned = config.clone();
17//! container.register_constructor(move |x| {
18//! CachePool::new(
19//! config_cloned.size_limit.unwrap_or(512 * 1024 * 1024), // 512MB
20//! config_cloned.cache_expire.unwrap_or(30), // 30s
21//! x.get(),
22//! )
23//! });
24//!
25//! let config_cloned = config.clone();
26//! container.register_constructor(move |x| {
27//! StreamTrackingPool::new(
28//! config_cloned.track_expire.unwrap_or(60), // 60s
29//! config_cloned.track_interval.unwrap_or(8), // 8s
30//! x.get(),
31//! x.get(),
32//! )
33//! });
34//!
35//! let _cache_pool = container::get::<Arc<CachePool>>();
36//! // ...
37//! ```
38
39mod container;
40mod errors;
41pub use container::*;
42pub use errors::*;