Ошибка no method named 'into_make_service' в Axum 0.7
Всем привет! Я пытаюсь создать небольшой сервер с использованием Axum.
Но при компиляции получаю такую ошибку:
error[E0599]: no method named `into_make_service` found for struct `Router<Pool<Postgres>>` in the current scope
Ошибка возникает на этой строке:
axum::serve(listener, app.into_make_service())
Компилятор предлагает использовать into_service(), но в большинстве примеров в интернете используется into_make_service().
Чего мне не хватает? Нужно ли что-то импортировать или включить какие-то фичи?
Вот зависимости из Cargo.toml:
axum = { version = "0.7", features = ["multipart", "http1"] }
tokio = { version = "1", features = ["full"] }
sqlx = { version = "0.7", features = ["postgres", "uuid", "runtime-tokio-native-tls", "chrono", "time"] }
Буду очень благодарен за помощь!
use axum::{
routing::get,
routing::post,
Router,
Extension,
};
use std::net::SocketAddr;
use tokio::net::TcpListener;
use sqlx::postgres::PgPoolOptions;
mod handlers;
mod models;
#[derive(Clone)]
struct AppState {
db_pool: sqlx::PgPool,
grpc_endpoint: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let database_url: &str = "postgres://storage_service:password@localhost:5432/storage";
let db_pool = PgPoolOptions::new()
.max_connections(5)
.connect(database_url)
.await?;
let state = AppState {
db_pool,
grpc_endpoint: "http://192.168.1.82:3001".to_string(),
};
let app = Router::new()
.route("/upload", post(handlers::upload))
.route("/files/:id", get(handlers::get_info))
.route("/download/:id", get(handlers::download))
.layer(Extension(state));
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
let listener = TcpListener::bind(addr).await?;
println!("Server running on http://{}", addr);
axum::serve(listener, app.into_make_service())
.await
.unwrap();
Ok(())
}