我正在使用Nickel.rs與MongoDB構建RESTful api。 我想爲類型mongodb::error::Result<Option<bson::Document>>
實施通用Responder
。錯誤:類型參數`D`必須用作某些本地類型的類型參數
這是我根據我發現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
一個解釋,如果我的理解是正確的,我需要爲impl<D>
提供一個特徵D
作爲類型參數,但我不明白提供哪種特徵。
我試過impl<D: =()>
但這樣做產生了同樣的錯誤。
哪裏了'Responder'特質從何而來? –
「或者您正在實施它的特性或類型必須在與impl相同的包中定義」https://doc.rust-lang.org/book/traits.html#rules-爲實現特質 – starblue
響應者特質來自鎳:http://docs.nickel.rs/nickel/trait.Responder.html – menawi