gpt4 book ai didi

mongodb - 错误 : type parameter `D` must be used as the type parameter for some local type

转载 作者:可可西里 更新时间:2023-11-01 09:12:15 25 4
gpt4 key购买 nike

我将 Nickel.rs 与 MongoDB 结合使用来构建 RESTful api。我想实现一个通用的 Responder对于类型 mongodb::error::Result<Option<bson::Document>> .

这是我根据为 Responder 找到的示例编写的实现:

impl<D> Responder<D> for Result<Option<Document>> {

fn respond<'a>(self, mut response: Response<'a, D>) -> MiddlewareResult<'a, D> {
response.set(MediaType::Json);

match self {
Ok(Some(doc))=>{
ApiResponse{data: Bson::Document(doc).to_json()}.to_json()
},
Ok(None)=>{
response.set(StatusCode::NotFound);
ApiError{error: "Not found".to_string()}.to_json()
},
Err(e)=>{
response.set(StatusCode::InternalServerError);
ApiError{error: format!("{}",e)}.to_json()
}

}
}
}

我收到以下错误:

error: type parameter D must be used as the type parameter for some local type (e.g. MyStruct<T>); only traits defined in the current crate can be implemented for a type parameter [E0210]

我跑了 rustc --explain E0210为了解释,如果我的理解是正确的,我需要提供一个特征 D作为 impl<D> 的类型参数,但我不明白要提供哪个特征。

我试过了 impl<D: =()>但这产生了同样的错误。

最佳答案

当你实现一个特征时 either the trait or the type you are implementing it for must be defined in the same crate .在您的示例中情况并非如此:特征 Respondernickel 定义,而 Resultmongodb 定义>.

解决此问题的常用方法是通过将所需类型包装到 tuple struct 中来定义您自己的类型使用单个组件(所谓的新类型模式):

struct Result(mongodb::error::Result<Option<Document>>);

impl Responder for Result {
...

关于mongodb - 错误 : type parameter `D` must be used as the type parameter for some local type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35363810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com