我有一个这样的提供程序设置:
#[async_trait]
pub trait AsyncKeyProvider {
async fn get_key_async(&mut self, key_id: &str) -> Result<Option<Jwk>, ()>;
}
#[derive(Clone)]
pub struct GoogleKeyProvider {
cached: Option<JwkSet>,
expiration_time: Instant,
}
impl AsyncKeyProvider for GoogleKeyProvider {
async fn get_key_async(&mut self, key_id: &str) -> Result<Option<Jwk>, ()> {
{...}
}
}
我正在尝试使用actix web中的内置app_data()
方法,将GoogleKeyProvider的一个实例传递给我的
验证
处理程序,如下所示:
let key_provider: web::Data<dyn AsyncKeyProvider> = web::Data::from(Arc::new(GoogleKeyProvider));
let server = HttpServer::new(move || {
App::new()
.app_data(key_provider.clone())
.wrap(Logger::default())
.route("/ping", web::get().to(health_check))
.route("/validate", web::post().to(validate))
})
.listen(listener)?
.run();
Ok(server)
使用
验证
具有以下签名:
pub async fn validate(jwt_body: web::Json<JwtBody>, provider: web::Data<dyn AsyncKeyProvider>) -> impl Responder {
{...}
}
根据我对这个答案的理解:https://stackoverflow.com/a/65646165,这应该可以让我使用< code > let provider _ object = provider . into _ inner()来访问provider对象;
或类似的东西。
但是,我反而收到以下错误:
error[E0599]: the method `into_inner` exists for struct `actix_web::web::Data<dyn key_providers::key_providers::AsyncKeyProvider>`, but its trait bounds were not satisfied
--> src\routes\validate.rs:26:36
|
26 | let provider_object = provider.into_inner()
| ^^^^^^^^^^ method cannot be called on `actix_web::web::Data<dyn key_providers::key_providers::AsyncKeyProvider>` due to unsatisfied trait bounds
|
::: src\key_providers\key_providers.rs:53:1
|
53 | pub trait AsyncKeyProvider {
| -------------------------- doesn't satisfy `_: std::marker::Sized`
|
= note: the following trait bounds were not satisfied:
`dyn key_providers::key_providers::AsyncKeyProvider: std::marker::Sized`
error[E0277]: the size for values of type `dyn key_providers::key_providers::AsyncKeyProvider` cannot be known at compilation time
--> src\startup.rs:9:73
|
9 | let key_provider: web::Data<dyn AsyncKeyProvider> = web::Data::from(Arc::new(GoogleKeyProvider));
| ^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `dyn key_providers::key_providers::AsyncKeyProvider`
note: required by `Arc::<T>::new`
--> C:\Users\dantd\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\alloc\src\sync.rs:342:5
|
342 | pub fn new(data: T) -> Arc<T> {
| ^^^^^^^^^^^^^^^^^^^
有人能帮我弄清楚怎么解决这个问题吗?我对std::marker::size做了一些研究,但我不知道如何使用它来解决这个问题。
参数提供者:web::Data
在Prestashop 1.7中,“自定义”特征值和非自定义特征值之间的技术区别是什么(我说的是布尔字段)? 因为为了在DB中保存特征值,我想在初始化我的对象的属性之后使用。其中包括布尔值
将跟踪和跨度添加到Slf4J MDC,以便您可以从日志聚合器中的给定跟踪或跨度中提取所有日志。示例日志: 2016-02-02 15:30:57.902 INFO [bar,6bfd228dc00d216b,6bfd228dc00d216b,false] 23030 --- [nio-8081-exec-3] ... 2016-02-02 15:30:58.372 ERROR [bar,6bfd
反缓存 anticache设置该选项后,它将删除可能引起服务器响应的Header(if-none-match和if-modified-since)304 not modified。当您要确保完全捕获HTTP交换时,这很有用。当您要确保服务器以完整的数据响应时,也经常在客户端重播期间使用它。 客户端重播 客户端重播可以做到:您提供了一个以前保存的HTTP对话,而mitmproxy则一个接一个地重播了
我有一个设计问题,当使用类似的东西时: 我认为应该有一些更好的方法来实现这种参数化的特性。 我在std中没有找到好的示例(例如,在具有类似的关联类型的traits中没有实现)?
特征值
特征缩放是用来统一资料中的自变项或特征范围的方法,在资料处理中,通常会被使用在资料前处理这个步骤。 1 动机 因为在原始的资料中,各变数的范围大不相同。对于某些机器学习的算法,若没有做过标准化,目标函数会无法适当的运作。举例来说,多数的分类器利用两点间的距离计算两点的差异, 若其中一个特征具有非常广的范围,那两点间的差异就会被该特征左右,因此,所有的特征都该被标准化,这样才能大略的使各特征