Aqui está o Router
interior principalasync fn main()
let pool = PgPoolOptions::new()
.max_connections(5)
.acquire_timeout(Duration::from_secs(3))
.connect(&db_connection_str)
.await
.expect("can't connect to database");
let app = Router::new().nest("/products", create_products_router()).with_state(&pool);
Obtendo esse erro em&pool
Incompatibilidade de tipo [E0308] esperada
()
, mas encontrada&sqlx_core::pool::Pool<sqlx_postgres::database::Postgres>
E aqui está o aninhadoRouter
pub fn create_products_router() -> Router {
Router::new()
.route("/products", get(get_products_list::get_products_list))
}
Estou recebendo este erro:
Incompatibilidade de tipo [E0308] esperada
axum::routing::method_routing::MethodRouter
, mas encontradaaxum::routing::method_routing::MethodRouter<sqlx_postgres::PgPool>
Finalmente a função em si
pub async fn get_products_list(State(pool): State<PgPool>,) -> Result<String, (StatusCode, String)> {
sqlx::query_scalar("select * from product")
.fetch(&pool)
.await
.map_err(internal_error)
}
Como faço para passar pool
do principal Router
para o aninhado Router
para get_products_list
a função?
No tipo
Router<S>
,S
é o tipo do estado ausente. Nesta função:Como você não especificou
S
, o padrão é()
. Especifique explicitamente o argumento genérico para ser o tipo de estado que o roteador precisa: