2016-07-14 2 views
1

Я изучаю возможности веб-инфраструктуры Iron. Насколько я понял, ядро ​​Iron не имеет API для обработки HTTP-параметров , поэтому я попытался использовать ящик params.Невозможно получить доступ к параметрам в железе, потому что привязанный к ним плагин: плагин <iron :: Request> не удовлетворен

error: the trait bound `params::Params: plugin::Plugin<iron::Request<'_, '_>>` is not satisfied [E0277] 
    let map = req.get_ref::<Params>().unwrap(); 
        ^~~~~~~ 
help: run `rustc --explain E0277` to see a detailed explanation 

Я не нашел след этой ошибки и не имею понятия, как ее исправить.

extern crate iron; 
extern crate params; 

use iron::prelude::*; 
use iron::status; 
use params::*; //{self, Params, Value}; 

fn handle_user(req: &mut Request) -> IronResult<Response> { 
    use params::{Params, Value}; 

    let map = req.get_ref::<Params>().unwrap(); 

    match map.find(&["user", "name"]) { 
     Some(&Value::String(ref name)) if name == "Marie" => { 
      Ok(Response::with((iron::status::Ok, "Welcome back, Marie!"))) 
     }, 
     _ => Ok(Response::with(iron::status::NotFound)), 
    } 
} 

fn main() { 
    Iron::new(handle_user).http("localhost:2330").unwrap(); 
} 

Версии библиотек

iron = "0.4.0" 
params = "0.2.2" 
+1

Это [известная проблема в Iron and Params] (https://github.com/iron/params/issues/23). – Shepmaster

ответ

3

params 0.2.2 обрешетка depends oniron ^0.3, так что вам нужно изменить версию железа зависимостей для 0.3.

При использовании такого ящика с плагинами вы должны убедиться, что версии соответствуют точно. Иногда может понадобиться также cargo update.


В Rust те же структуры или черты, взятые из нескольких версий одного и того же ящика, рассматриваются как совершенно разные. Обычно это приводит к ошибке, например, «Pixel ожидается, но найдено Pixel» или отсутствует реализация признаков, как в вашем случае.

Смежные вопросы