Как я могу использовать Multipart :: from_request с tiny_http :: Request? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь использовать интеграцию tiny_http в ящике multipart:

extern crate multipart;
extern crate tiny_http;

use multipart::server::tiny_http as tiny_http_trait;
use multipart::server::Multipart;
use tiny_http::*;

fn main() {
    let server = Server::http("0.0.0.0:8080").unwrap();
    loop {
        match server.recv() {
            Ok(request) => {
                let mult = Multipart::from_request(request).unwrap();
            }
            Err(s) => eprintln!("{:#?}", s),
        };
    }
}

При попытке извлечь данные многочастной формы из запроса: * 1006 я получаю следующую ошибку:*

error[E0277]: the trait bound `tiny_http::Request: multipart::server::HttpRequest` is not satisfied
  --> src/main.rs:13:28
   |
13 |                 let mult = Multipart::from_request(request).unwrap();
   |                            ^^^^^^^^^^^^^^^^^^^^^^^ the trait `multipart::server::HttpRequest` is not implemented for `tiny_http::Request`
   |
   = help: the following implementations were found:
             <&'r mut tiny_http::Request as multipart::server::HttpRequest>
   = note: required by `multipart::server::Multipart::<()>::from_request`

Эта реализация черты существует, и я могу использовать ее напрямую с HttpRequest функциями:

let boundary = <&mut Request as HttpRequest>::multipart_boundary(&&mut request);

Кажется, я не могу использовать тот же синтаксис для использования tiny_http::Requestкак multipart::server::HttpRequest в multipart::server::Multipart::from_request(...)

Вот мой Cargo.toml:

[package]
name = "db_interface"
version = "0.1.0"
authors = [""]
edition = "2018"

[dependencies]
tiny_http = "0.6.2"

[dependencies.multipart]
version = "0.16.1"
features = ["tiny_http"]

1 Ответ

1 голос
/ 31 мая 2019

Как говорит компилятор, вам нужна изменяемая ссылка:

<&'r mut tiny_http::Request as multipart::server::HttpRequest>

Объявите запрос как изменяемый, а затем получите ссылку на него:

match server.recv() {
    Ok(mut request) => {
        let mult = Multipart::from_request(&mut request).unwrap();
    }
    Err(s) => eprintln!("{:#?}", s),
};
...