结构特征错误:类型参数数量错误:预期为1,找到0

问题描述 投票:0回答:1

即使对Rust进行了几个月的试验,我对Rust的工作原理还是很陌生的。我正在使用R2D2(0.8.0)和Rocket(0.4.4)+ Rocket_cors(0.5.2)]写一个Web服务器

Rocket允许您将其结构馈入状态池,因此我不必每次有人发送请求时都初始化我的Postgres服务器。这是代码:

struct ConnectionPool<M: r2d2::ManageConnection> {
    val: r2d2::Pool<M>
}

#[post("/upload", format = "application/json", data = "<data>")]
fn upload(data: Data, state: rocket::State<ConnectionPool>) {
    if data.peek_complete() {
        println!("All of the data: {:?}", str::from_utf8(data.peek()).unwrap());
    }
    //data.stream_to_file(env::temp_dir().join("upload.txt"))
    //    .map(|n| n.to_string())
    //    .map_err(Debug)
}

显然,这只是代码的一部分,但是r2d2 :: ConnectionPool需要一个类型标识符:如果我忽略了此要求,就会给我这个错误(在上面的代码片断的第4行):

wrong number of type arguments: expected 1, found 0

expected 1 type argumentrustc(E0107)
main.rs(45, 44): expected 1 type argument

但是当我尝试通过更新代码来解决问题时:

fn upload(data: Data, state: rocket::State<ConnectionPool>) {

    |
    v

fn upload(data: Data, state: rocket::State<ConnectionPool<r2d2::ManageConnection>>) {

我收到此错误:

the size for values of type `(dyn r2d2::ManageConnection + 'static)` cannot be known at compilation time

doesn't have a size known at compile-time

help: the trait `std::marker::Sized` is not implemented for `(dyn r2d2::ManageConnection + 'static)`

即使对Rust进行了几个月的试验,我对Rust的工作原理还是很陌生的。我正在使用R2D2(0.8.0)和Rocket(0.4.4)+ Rocket_cors(0.5.2)写一个Web服务器,Rocket允许...

rust
1个回答
0
投票

r2d2::ManageConnection是特征。无需重复特征名称,您需要将其传递给实现该特征的具体类型。

© www.soinside.com 2019 - 2024. All rights reserved.