@@ -28,21 +28,13 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
2828
2929 let config = & state. config ;
3030
31- let selection = (
32- Crate :: as_select ( ) ,
33- crate_downloads:: downloads,
34- recent_crate_downloads:: downloads. nullable ( ) ,
35- versions:: num. nullable ( ) ,
36- versions:: yanked. nullable ( ) ,
37- ) ;
38-
3931 let new_crates = crates:: table
4032 . inner_join ( crate_downloads:: table)
4133 . left_join ( recent_crate_downloads:: table)
4234 . left_join ( default_versions:: table)
4335 . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
4436 . order ( crates:: created_at. desc ( ) )
45- . select ( selection )
37+ . select ( Record :: as_select ( ) )
4638 . limit ( 10 )
4739 . load ( & mut conn)
4840 . await ?;
@@ -53,7 +45,7 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
5345 . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
5446 . filter ( crates:: updated_at. ne ( crates:: created_at) )
5547 . order ( crates:: updated_at. desc ( ) )
56- . select ( selection )
48+ . select ( Record :: as_select ( ) )
5749 . limit ( 10 )
5850 . load ( & mut conn)
5951 . await ?;
@@ -65,7 +57,7 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
6557 . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
6658 . filter ( crates:: name. ne_all ( & config. excluded_crate_names ) )
6759 . then_order_by ( crate_downloads:: downloads. desc ( ) )
68- . select ( selection )
60+ . select ( Record :: as_select ( ) )
6961 . limit ( 10 )
7062 . load ( & mut conn)
7163 . await ?;
@@ -77,7 +69,7 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
7769 . left_join ( versions:: table. on ( default_versions:: version_id. eq ( versions:: id) ) )
7870 . filter ( crates:: name. ne_all ( & config. excluded_crate_names ) )
7971 . then_order_by ( recent_crate_downloads:: downloads. desc ( ) )
80- . select ( selection )
72+ . select ( Record :: as_select ( ) )
8173 . limit ( 10 )
8274 . load ( & mut conn)
8375 . await ?;
@@ -108,13 +100,26 @@ pub async fn summary(state: AppState) -> AppResult<ErasedJson> {
108100 } ) )
109101}
110102
111- type Record = ( Crate , i64 , Option < i64 > , Option < String > , Option < bool > ) ;
103+ #[ derive( Debug , Queryable , Selectable ) ]
104+ #[ diesel( check_for_backend( diesel:: pg:: Pg ) ) ]
105+ struct Record {
106+ #[ diesel( embed) ]
107+ krate : Crate ,
108+ #[ diesel( select_expression = crate_downloads:: columns:: downloads) ]
109+ total_downloads : i64 ,
110+ #[ diesel( select_expression = recent_crate_downloads:: columns:: downloads. nullable( ) ) ]
111+ recent_downloads : Option < i64 > ,
112+ #[ diesel( select_expression = versions:: columns:: num. nullable( ) ) ]
113+ default_version : Option < String > ,
114+ #[ diesel( select_expression = versions:: columns:: yanked. nullable( ) ) ]
115+ yanked : Option < bool > ,
116+ }
112117
113118async fn encode_crates (
114119 conn : & mut AsyncPgConnection ,
115120 data : Vec < Record > ,
116121) -> AppResult < Vec < EncodableCrate > > {
117- let krates = data. iter ( ) . map ( |( c , .. ) | c ) . collect :: < Vec < _ > > ( ) ;
122+ let krates = data. iter ( ) . map ( |record| & record . krate ) . collect :: < Vec < _ > > ( ) ;
118123 let versions: Vec < Version > = Version :: belonging_to ( & krates)
119124 . filter ( versions:: yanked. eq ( false ) )
120125 . select ( Version :: as_select ( ) )
@@ -126,18 +131,16 @@ async fn encode_crates(
126131 . into_iter ( )
127132 . map ( TopVersions :: from_versions)
128133 . zip ( data)
129- . map (
130- |( top_versions, ( krate, total, recent, default_version, yanked) ) | {
131- Ok ( EncodableCrate :: from_minimal (
132- krate,
133- default_version. as_deref ( ) ,
134- yanked,
135- Some ( & top_versions) ,
136- false ,
137- total,
138- recent,
139- ) )
140- } ,
141- )
134+ . map ( |( top_versions, record) | {
135+ Ok ( EncodableCrate :: from_minimal (
136+ record. krate ,
137+ record. default_version . as_deref ( ) ,
138+ record. yanked ,
139+ Some ( & top_versions) ,
140+ false ,
141+ record. total_downloads ,
142+ record. recent_downloads ,
143+ ) )
144+ } )
142145 . collect ( )
143146}
0 commit comments