rust - 如何将 Multipart::from_request 与 tiny_http::Request 一起使用?

标签 rust traits

我正在尝试在 multipart 包中使用 tiny_http 集成:

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),
        };
    }
}

尝试从请求中提取多部分表单数据时出现以下错误:

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::中的 multipart::server::HttpRequest 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"]

最佳答案

正如编译器告诉您的,您需要一个可变引用:

<&'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),
};

关于rust - 如何将 Multipart::from_request 与 tiny_http::Request 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382038/

相关文章:

rust - 将相同变量绑定(bind)到共享特征的不同类型的模式

scala - 光滑的 scala : a TableQuery object without . ddl 字段

rust - 盒装特征创建背后的机制如何运作?

generics - Rust:实现通用特征时出现 E0562

rust - 使用装箱特征对象时,Rust 的生命周期规则是什么?

rust - 在结构中移动一个盒子

rust - 如何在文档测试中构建代码但不运行它?

scala - 使用多重继承从Scala中的不同特征调用不同的方法

debugging - 如何查看导致我的编译错误的扩展宏代码?

utf-8 - 作为 16 位切片的格式错误的 UTF-8 的 WTF-8 字符串集