使用 Axum 和 AWS SDK 时 Rust 中的路由错误。 ' 特征绑定 `fn(axum::Json<EmailRequest>,'

问题描述 投票:0回答:1

我对 Rust 非常非常陌生。我正在尝试让这个 /send_email 端点正常工作。如果有人能指出我的错误方向,我将非常感激。

我在 send_email 处理程序中的发送电子邮件路由:

pub fn router(client: Arc<Client>) -> Router {
    Router::new()
        .route("/send-email", post(send_email_request))
}

错误:

the trait bound `fn(axum::Json<EmailRequest>, Extension<Arc<aws_sdk_sesv2::Client>>) -> impl std::future::Future<Output = impl IntoResponse> {send_email_request}: Handler<_, _, _>` is not satisfied

完整文档:

use axum::{
    extract::{Extension, Json},
    response::{IntoResponse, Response},
    http::StatusCode,
    routing::post,
    Router,
    Json as AxumJson,
};
use aws_sdk_sesv2::Client;
use std::sync::Arc;
use serde_json::json;
use crate::signage::email_service::{send_email, EmailRequest};
use crate::util::check_payload; // Assuming this function is correctly implemented
use tracing::instrument;

pub fn router(client: Arc<Client>) -> Router {
    Router::new()
        .route("/send-email", post(send_email_request))
}

#[instrument]
#[utoipa::path(
    post,
    path = "/api/v1/send_email",
    responses(
        (status = 200, description = "Email sent successfully", body = String),
        (status = 500, description = "Failed to send email")
    )
)]
pub async fn send_email_request(
    Json(payload): Json<EmailRequest>,
    Extension(client): Extension<Arc<Client>>
) -> impl IntoResponse {
    let payload = match check_payload(&payload) {
        Ok(valid_payload) => valid_payload,
        Err(error) => return (StatusCode::BAD_REQUEST, AxumJson(json!({"error": error.to_string()}))).into_response(),
    };

    match send_email(&client).await {
        Ok(_) => {
            (StatusCode::OK, AxumJson(json!({"message": "Email sent successfully."}))).into_response()
        },
        Err(e) => {
            (StatusCode::INTERNAL_SERVER_ERROR, AxumJson(json!({"error": format!("Failed to send email: {}", e)}))).into_response()
        }
    }
}
rust amazon-ses aws-sdk-rust
1个回答
0
投票

还有一些其他问题。主要的事情最终变得很简单。这是 send_email_request 中的顺序问题。扩展需要位于有效负载之前。所以现在,它

Extension(client): Extension<Arc<Client>>,
payload: Option<Json<EmailRequest>> 
© www.soinside.com 2019 - 2024. All rights reserved.