如何修复actix_web中的“未为{function}实现特征工厂<_,_,_>”错误?

时间:2021-01-23 05:55:06

标签: rust serde actix-web rust-actix

我有这个简单的代码:

use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
use serde::{Deserialize, Serialize};
use serde_json::{json};
use validator::{Validate, ValidationError};

#[derive(Deserialize, Serialize, Validate)]
struct Auth {
    #[validate(length(min = 4))]
    username: String,
    password: String,
}

#[post("/auth")]
async fn auth(form: web::Json<Auth>) -> Result<serde_json::Value, ValidationError> {
    Ok(json!{ "success" })
}

这一直给我这个错误:

error[E0277]: the trait bound `fn(Json<Auth>) -> impl std::future::Future {auth}: Factory<_, _, _>` is not satisfied
  --> src/main.rs:77:10
   |
77 | async fn auth(form: web::Json<Auth>) -> Result<serde_json::Value, ValidationError> {
   |          ^^^^ the trait `Factory<_, _, _>` is not implemented for `fn(Json<Auth>) -> impl std::future::Future {auth}`

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我想通了。将 Result<serde_json::Value, ValidationError> 更改为 HttpResponse 并返回 HttpResponse 中的 json 有效。

#[post("/auth")]
async fn auth(form: web::Json<Auth>) -> HttpResponse {
    match form.validate() {
        Ok(_) => HttpResponse::Ok().json(json!{ {"success":true}}),
        Err(e) => HttpResponse::NotAcceptable().body(format!("{}", e))
    }
}