Http Hyper 0.12.x:为结构实现服务

Http Hyper 0.12.x:为结构实现服务,http,service,rust,future,hyper,Http,Service,Rust,Future,Hyper,在hyper 0.12.33中,如何为结构实现hyper::service::service 我尝试了以下方法,但这还不够,因为在0.12中,对于实现服务的结构,似乎不再自动提供未来特征: use futures::future::future; 使用hyper::{Body,Request,Response}; 结构MyStruct; impl MyStruct{ pub fn new()->Self{ 我的结构 } } impl hyper::service::MyStruct的服务{ 类型

在hyper 0.12.33中,如何为结构实现
hyper::service::service

我尝试了以下方法,但这还不够,因为在0.12中,对于实现
服务的结构,似乎不再自动提供
未来
特征:

use futures::future::future;
使用hyper::{Body,Request,Response};
结构MyStruct;
impl MyStruct{
pub fn new()->Self{
我的结构
}
}
impl hyper::service::MyStruct的服务{
类型ReqBody=主体;
类型ResBody=Body;
类型错误=hyper::Error;
输入Future=Box;
fn调用(&mut self,req:Request)->self::Future{
未执行!()
}
}
fn main(){
让addr=“0.0.0.0:8080”。parse().unwrap();
让服务器=hyper::服务器::绑定(&addr)
.serve(| | MyStruct::new())
.map_err(| e | eprintln!(“服务器错误:{},e));
hyper::rt::run(服务器);
}
提供生成错误消息:

标准错误
编译操场v0.0.1(/操场)
错误[E0277]:未满足特性绑定'MyStruct:futures::future::future'
-->src/main.rs:26:10
|
26.发球(| MyStruct::new())
|^^^^^特性“futures::future::future”未为“MyStruct”实现`
|
=注意:由于对“hyper::service::make_service::MakeServiceRef”的impl的要求,因此需要`[closure@src/main.rs:26:16:26:34]`
错误[E0599]:在当前作用域中找不到类型为“hyper::server::server”的名为“map_err”的方法
-->src/main.rs:27:10
|
27 |.map_err(| e | eprintln!(“服务器错误:{}”,e));
|          ^^^^^^^
|
=注意:方法'map_err'存在,但不满足以下特征界限:
`&mut hyper::服务器::服务器:未来::未来::未来`
`hyper::server::server:未来::未来::未来`

请尝试下次创建,例如,无需定义
调用
正文。只需使用未实现的
!()
。还要确保“它已编译”,例如,没有其他错误(在您的情况下,
Future
已导入两次)。另外,请使用
rustfmt
确保您的代码格式正确。最后但并非最不重要的一点是,包括完整的错误消息,而不仅仅是一个片段。除此之外,干得好;)下次我会更加注意的。我注意到双重导入,正在编辑,但你更快了。感谢您的编辑,您现在使用的似乎是
async fn
,而不是struct。还声明:“虽然可以手动实现类型的服务,但helpers服务和Service\u fn\u ok在大多数情况下应该足够了。”以及“需要由所有服务共享的资源可以放在MakeService中,然后在调用make\u服务时传递给各个服务。”