gpt4 book ai didi

rust - 什么单一类型可以指超 HttpConnector 和 HttpsConnector?

转载 作者:行者123 更新时间:2023-12-03 11:47:56 26 4
gpt4 key购买 nike

Hyper的HttpConnector和 hyper_tls 的 HttpsConnector清楚地实现一个共同的特征(或特征)。我研究了它们的实现,但我无法想出正确的类型(或别名)来允许我将任一结构的实例传递给如下程序中的函数。看起来像 Tower::Service<Url>是正确的特质,但我没有想出正确的答案,真的可以使用帮助。

use hyper::{client::connect::HttpConnector, service::Service, Uri};
use hyper_tls::HttpsConnector;

// What type should param c have here for this program to compile?
fn with_connector(c: ????) {}

fn main() {
with_connector(HttpConnector::new());
with_connector(HttpsConnector::new());
}
相关实现:
HttpConnector
HttpsConnector
[dependencies]
hyper = "0.13"
hyper-tls = "0.4.3"
用例是我正在编写自己的连接器,它将包含其中任何一个的实例作为委托(delegate)。提前致谢。

最佳答案

我能够通过复制两个连接器共有的通用类型定义来解决这个问题。结果在我看来仍然是疯狂的丑陋:很难相信任何人都可以在没有像我一样复制/粘贴的情况下想出这个。但也许对所涉及的各种特征非常熟悉的人不会有问题?

use hyper::{client::connect::HttpConnector, service::Service, Uri};
use hyper_tls::HttpsConnector;
use tokio::io::{AsyncRead, AsyncWrite};

type BoxError = Box<dyn std::error::Error + Send + Sync>;

fn with_connector<T>(conn: T)
where
T: Service<Uri>,
T::Response: AsyncRead + AsyncWrite + Send + Unpin,
T::Future: Send + 'static,
T::Error: Into<BoxError>,
{
// do something with conn
}

fn main() {
let http = HttpConnector::new();
with_connector(http);

let https = HttpsConnector::new();
with_connector(https);
}
[dependencies]
hyper = "0.13"
hyper-tls = "0.4.3"
tokio = { version = "0.2", features = ["full"] }

关于rust - 什么单一类型可以指超 HttpConnector 和 HttpsConnector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63497769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com