无法创建 Iron 处理程序,因为不满足特征绑定 std::ops::Fn<(&mut iron::Request)>
Cannot create an Iron handler because the trait bound std::ops::Fn<(&mut iron::Request)> is not satisfied
我正在尝试为 Iron 请求创建处理程序:
extern crate iron;
extern crate mount;
use iron::{Iron, Request, Response, IronResult, status};
use mount::Mount;
use iron::middleware::Handler;
struct Server {
message: String
}
impl Server {
pub fn start(&self){
let mut mount = Mount::new();
mount.mount("/", &self);
Iron::new(mount).http("0.0.0.0:3000").unwrap();
}
}
impl Handler for Server {
fn handle(&self, _req: &mut Request) -> IronResult<Response>{
Ok(Response::with((status::Ok, self.message)))
}
}
fn main() {
Server{message: "test".to_string()}.start();
}
但编译器响应是:
error[E0277]: the trait bound `for<'r, 'r, 'r> Server: std::ops::Fn<(&'r mut iron::Request<'r, 'r>,)>` is not satisfied
--> src/main.rs:15:15
|
15 | mount.mount("/", &self);
| ^^^^^ trait `for<'r, 'r, 'r> Server: std::ops::Fn<(&'r mut iron::Request<'r, 'r>,)>` not satisfied
|
= note: required because of the requirements on the impl of `std::ops::FnOnce<(&mut iron::Request<'_, '_>,)>` for `&Server`
= note: required because of the requirements on the impl of `iron::Handler` for `&&Server`
我无法理解 Rust 对我说的话。
这是您问题的重现;你能发现问题吗?
trait Foo {}
struct Bar;
impl Foo for Bar {}
impl Bar {
fn thing(&self) {
requires_bar(self);
}
}
fn requires_bar<F>(foo: F) where F: Foo {}
fn main() {}
放弃?
您已经为您的结构实现了特征:
impl Handler for Server
但是然后尝试使用对结构的引用,不实现特征:
pub fn start(&self) {
// ...
mount.mount("/", &self);
// ...
}
所以那是行不通的。您需要重构您的代码或实现对您的结构的引用的特征。
我正在尝试为 Iron 请求创建处理程序:
extern crate iron;
extern crate mount;
use iron::{Iron, Request, Response, IronResult, status};
use mount::Mount;
use iron::middleware::Handler;
struct Server {
message: String
}
impl Server {
pub fn start(&self){
let mut mount = Mount::new();
mount.mount("/", &self);
Iron::new(mount).http("0.0.0.0:3000").unwrap();
}
}
impl Handler for Server {
fn handle(&self, _req: &mut Request) -> IronResult<Response>{
Ok(Response::with((status::Ok, self.message)))
}
}
fn main() {
Server{message: "test".to_string()}.start();
}
但编译器响应是:
error[E0277]: the trait bound `for<'r, 'r, 'r> Server: std::ops::Fn<(&'r mut iron::Request<'r, 'r>,)>` is not satisfied
--> src/main.rs:15:15
|
15 | mount.mount("/", &self);
| ^^^^^ trait `for<'r, 'r, 'r> Server: std::ops::Fn<(&'r mut iron::Request<'r, 'r>,)>` not satisfied
|
= note: required because of the requirements on the impl of `std::ops::FnOnce<(&mut iron::Request<'_, '_>,)>` for `&Server`
= note: required because of the requirements on the impl of `iron::Handler` for `&&Server`
我无法理解 Rust 对我说的话。
这是您问题的重现;你能发现问题吗?
trait Foo {}
struct Bar;
impl Foo for Bar {}
impl Bar {
fn thing(&self) {
requires_bar(self);
}
}
fn requires_bar<F>(foo: F) where F: Foo {}
fn main() {}
放弃?
您已经为您的结构实现了特征:
impl Handler for Server
但是然后尝试使用对结构的引用,不实现特征:
pub fn start(&self) {
// ...
mount.mount("/", &self);
// ...
}
所以那是行不通的。您需要重构您的代码或实现对您的结构的引用的特征。