【问题标题】:Cannot create an Iron handler because the trait bound std::ops::Fn<(&mut iron::Request)> is not satisfied无法创建 Iron 处理程序,因为不满足特征绑定 std::ops::Fn<(&mut iron::Request)>
【发布时间】:2016-12-01 23:53:32
【问题描述】:

我正在尝试为 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 对我说什么。

【问题讨论】:

标签: rust iron


【解决方案1】:

这是您的问题的复制品;你能发现问题吗?

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() {}

放弃?

你已经为你的结构实现了 trait:

impl Handler for Server

然后尝试使用对结构的引用的引用,这实现了特征:

pub fn start(&self) {
    // ...
    mount.mount("/", &self);
    // ...
}

所以这行不通。您需要重构代码或实现 trait 以引用您的结构。

【讨论】:

  • 感谢@Shepmaster
猜你喜欢
  • 1970-01-01
  • 2016-12-04
  • 2017-12-05
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
相关资源
最近更新 更多