error: Typparameter `D` muss als Typparameter für einen lokalen Typ verwendet werden
Ich verwende Nickel.rs mit MongoDB, um eine RESTful-API zu erstellen. Ich möchte ein generisches @ implementierResponder
für den Typmongodb::error::Result<Option<bson::Document>>
.
Dies ist die Implementierung, die ich basierend auf den Beispielen geschrieben habe, die ich für @ gefunden habResponder
:
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()
}
}
}
}
und ich erhalte den folgenden Fehler:
error: Typ ParameterD
muss als Typparameter für einen lokalen Typ verwendet werden (z. B.MyStruct<T>
); Für einen Typparameter [E0210] können nur Merkmale implementiert werden, die in der aktuellen Kiste definiert sind.
Ich rannterustc --explain E0210
für eine Erklärung und wenn mein Verständnis stimmt, muss ich ein Merkmal angebenD
als Typargument fürimpl<D>
, aber ich verstehe nicht, welche Eigenschaft ich bereitstellen soll.
Ich habe es versuchtimpl<D: =()>
aber das erzeugte den gleichen Fehler.