[−][src]Crate object_provider
Trait for requesting values by type from a given object.
Examples
Using a Provider
let provider: &dyn ObjectProvider; // It's possible to request concrete types like `PathBuf` let path_buf = provider.request::<PathBuf>().unwrap(); assert_eq!(path_buf, my_path); // Requesting `!Sized` types, like slices and trait objects, is also supported. let path = provider.request::<Path>().unwrap(); assert_eq!(path, my_path); let debug = provider.request::<dyn Debug>().unwrap(); assert_eq!( format!("{:?}", debug), format!("{:?}", my_path), ); // Types or interfaces not explicitly provided return `None`. assert!(provider.request::<i32>().is_none()); assert!(provider.request::<dyn AsRef<Path>>().is_none());
Implementing a Provider
struct MyProvider { path: PathBuf, } impl ObjectProvider for MyProvider { fn provide<'r, 'a>(&'a self, request: Request<'r, 'a>) -> ProvideResult<'r, 'a> { request .provide::<PathBuf>(&self.path)? .provide::<Path>(&self.path)? .provide::<dyn Debug>(&self.path) } }
Structs
FulfilledRequest | Marker type indicating a request has been fulfilled. |
Request | A dynamic request for an object based on its type. |
Traits
ObjectProvider | Trait to provide other objects based on a requested type at runtime. |
ObjectProviderExt | Methods supported by all |
Type Definitions
ProvideResult | Provider method return type. |