@@ -8,8 +8,9 @@ use crate::util::diesel::Conn;
88use crate :: util:: errors:: AppResult ;
99use crate :: views:: { EncodableCategory , EncodableCrate , EncodableKeyword } ;
1010use axum:: Json ;
11- use diesel:: prelude :: * ;
11+ use diesel:: QueryResult ;
1212use diesel_async:: async_connection_wrapper:: AsyncConnectionWrapper ;
13+ use diesel_async:: AsyncPgConnection ;
1314use serde_json:: Value ;
1415
1516/// Handles the `GET /summary` route.
@@ -22,16 +23,27 @@ pub async fn summary(state: AppState) -> AppResult<Json<Value>> {
2223 . map ( Category :: into)
2324 . collect :: < Vec < EncodableCategory > > ( ) ;
2425
26+ async fn inner ( conn : & mut AsyncPgConnection ) -> QueryResult < ( i64 , i64 ) > {
27+ use diesel:: QueryDsl ;
28+ use diesel_async:: RunQueryDsl ;
29+
30+ let num_crates: i64 = crates:: table. count ( ) . get_result ( conn) . await ?;
31+ let num_downloads: i64 = metadata:: table
32+ . select ( metadata:: total_downloads)
33+ . get_result ( conn)
34+ . await ?;
35+
36+ Ok ( ( num_crates, num_downloads) )
37+ }
38+
39+ let ( num_crates, num_downloads) = inner ( & mut conn) . await ?;
40+
2541 spawn_blocking ( move || {
42+ use diesel:: prelude:: * ;
2643 let conn: & mut AsyncConnectionWrapper < _ > = & mut conn. into ( ) ;
2744
2845 let config = & state. config ;
2946
30- let num_crates: i64 = crates:: table. count ( ) . get_result ( conn) ?;
31- let num_downloads: i64 = metadata:: table
32- . select ( metadata:: total_downloads)
33- . get_result ( conn) ?;
34-
3547 fn encode_crates (
3648 conn : & mut impl Conn ,
3749 data : Vec < Record > ,
0 commit comments