#object #lookup #provider #values #dynamic #request #requesting

object-provider

通过给定对象按类型请求值的特质

2 个不稳定版本

0.2.0 2020年8月6日
0.1.0 2020年3月29日

#60 in #lookup

MIT/Apache

14KB
166

object-provider

Latest Version Rust Documentation

此软件包提供了ObjectProvider特质和相关类型,以支持动态类型驱动的对象查找。有关详细信息,请参阅文档。


lib.rs:

从给定对象按类型请求值的特质。

示例

使用提供者

let provider: &dyn ObjectProvider;

// It's possible to request concrete types like `PathBuf`
let path_buf = provider.request_ref::<PathBuf>().unwrap();
assert_eq!(path_buf, my_path);

// Requesting `!Sized` types, like slices and trait objects, is also supported.
let path = provider.request_ref::<Path>().unwrap();
assert_eq!(path, my_path);

let debug = provider.request_ref::<dyn Debug>().unwrap();
assert_eq!(
    format!("{:?}", debug),
    format!("{:?}", my_path),
);

// Types or interfaces not explicitly provided return `None`.
assert!(provider.request_ref::<i32>().is_none());
assert!(provider.request_ref::<dyn AsRef<Path>>().is_none());

实现提供者

struct MyProvider {
    path: PathBuf,
}

impl ObjectProvider for MyProvider {
    fn provide<'a>(&'a self, request: Pin<&mut Request<'a>>) {
        request
            .provide_ref::<PathBuf>(&self.path)
            .provide_ref::<Path>(&self.path)
            .provide_ref::<dyn Debug>(&self.path);
    }
}

无运行时依赖