Open1
Axum (Rust)でのコンパイルエラーとその解決法
コード
PersonのVecを得るようなGETエンドポイントを定義した。
pub async fn get_persons(
state: State<AppState>,
Query(query): Query<QueryData>,
) -> (StatusCode, Json<Vec<Person>>) {
// 略
}
let app = Router::new()
.route("/person", get(get_persons))
.with_state(state);
エラー
コンパイルで下記エラーが発生。
error[E0277]: the trait bound `fn(axum::extract::State<AppState>, axum::extract::Query<QueryData>) -> impl futures_util::Future<Output = (StatusCode, axum::Json<std::vec::Vec<Change>>)> {get_persons}: Handler<_, _, _>` is not satisfied
--> src/main.rs:50:32
|
50 | .route("/person", get(get_persons))
| --- ^^^^^^^^^^^ the trait `Handler<_, _, _>` is not implemented for fn item `fn(axum::extract::State<AppState>, axum::extract::Query<QueryData>) -> impl futures_util::Future<Output = (StatusCode, axum::Json<std::vec::Vec<Person>>)> {get_persons}`
解決法
PersonがSerializableじゃなかったのが原因 #[derive(Serialize)]
をつければコンパイル通るようになった。
#[derive(Serialize)]
pub struct Person {
// 略
}