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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage