@@ -43,7 +43,7 @@ use {Model, User, Keyword, Version, Category, Badge, Replica};
43
43
#[ derive( Insertable , Queryable , Identifiable , Associations , AsChangeset ) ]
44
44
#[ belongs_to( Crate ) ]
45
45
#[ primary_key( crate_id, date) ]
46
- #[ table_name= "crate_downloads" ]
46
+ #[ table_name = "crate_downloads" ]
47
47
pub struct CrateDownload {
48
48
pub crate_id : i32 ,
49
49
pub downloads : i32 ,
@@ -499,7 +499,15 @@ impl Crate {
499
499
exact_match : bool ,
500
500
recent_downloads : Option < i64 > ,
501
501
) -> EncodableCrate {
502
- self . encodable ( max_version, None , None , None , badges, exact_match, recent_downloads)
502
+ self . encodable (
503
+ max_version,
504
+ None ,
505
+ None ,
506
+ None ,
507
+ badges,
508
+ exact_match,
509
+ recent_downloads,
510
+ )
503
511
}
504
512
505
513
pub fn encodable (
@@ -805,20 +813,26 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
805
813
let conn = req. db_conn ( ) ?;
806
814
let ( offset, limit) = req. pagination ( 10 , 100 ) ?;
807
815
let params = req. query ( ) ;
808
- let sort = params. get ( "sort" ) . map ( |s| & * * s) . unwrap_or ( "recent-downloads" ) ;
816
+ let sort = params. get ( "sort" ) . map ( |s| & * * s) . unwrap_or (
817
+ "recent-downloads" ,
818
+ ) ;
809
819
810
820
let recent_downloads = sql :: < Nullable < BigInt > > ( "SUM(crate_downloads.downloads)" ) ;
811
821
812
822
let mut query = crates:: table
813
823
. join (
814
824
crate_downloads:: table,
815
825
LeftOuter ,
816
- crates:: id
817
- . eq ( crate_downloads:: crate_id )
818
- . and ( crate_downloads :: date . gt ( date ( now - 90 . days ( ) ) ) )
819
- )
826
+ crates:: id. eq ( crate_downloads :: crate_id ) . and (
827
+ crate_downloads:: date . gt ( date ( now - 90 . days ( ) ) ) ,
828
+ ) ,
829
+ )
820
830
. group_by ( crates:: id)
821
- . select ( ( ALL_COLUMNS , AsExpression :: < Bool > :: as_expression ( false ) , recent_downloads. clone ( ) ) )
831
+ . select ( (
832
+ ALL_COLUMNS ,
833
+ AsExpression :: < Bool > :: as_expression ( false ) ,
834
+ recent_downloads. clone ( ) ,
835
+ ) )
822
836
. into_boxed ( ) ;
823
837
824
838
if sort == "downloads" {
@@ -838,7 +852,11 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
838
852
) ,
839
853
) ) ;
840
854
841
- query = query. select ( ( ALL_COLUMNS , crates:: name. eq ( q_string) , recent_downloads. clone ( ) ) ) ;
855
+ query = query. select ( (
856
+ ALL_COLUMNS ,
857
+ crates:: name. eq ( q_string) ,
858
+ recent_downloads. clone ( ) ,
859
+ ) ) ;
842
860
let perfect_match = crates:: name. eq ( q_string) . desc ( ) ;
843
861
if sort == "downloads" {
844
862
query = query. order ( ( perfect_match, crates:: downloads. desc ( ) ) ) ;
@@ -910,15 +928,21 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
910
928
) ) ;
911
929
}
912
930
913
- let data = query. paginate ( limit , offset ) . load :: < ( ( Crate , bool , Option < i64 > ) , i64 ) > (
914
- & * conn ,
915
- ) ?;
931
+ let data = query
932
+ . paginate ( limit , offset )
933
+ . load :: < ( ( Crate , bool , Option < i64 > ) , i64 ) > ( & * conn ) ?;
916
934
let total = data. first ( ) . map ( |& ( _, t) | t) . unwrap_or ( 0 ) ;
917
935
let crates = data. iter ( )
918
936
. map ( |& ( ( ref c, _, _) , _) | c. clone ( ) )
919
937
. collect :: < Vec < _ > > ( ) ;
920
- let perfect_matches = data. clone ( ) . into_iter ( ) . map ( |( ( _, b, _) , _) | b) . collect :: < Vec < _ > > ( ) ;
921
- let recent_downloads = data. clone ( ) . into_iter ( ) . map ( |( ( _, _, s) , _) | s. unwrap_or ( 0 ) ) . collect :: < Vec < _ > > ( ) ;
938
+ let perfect_matches = data. clone ( )
939
+ . into_iter ( )
940
+ . map ( |( ( _, b, _) , _) | b)
941
+ . collect :: < Vec < _ > > ( ) ;
942
+ let recent_downloads = data. clone ( )
943
+ . into_iter ( )
944
+ . map ( |( ( _, _, s) , _) | s. unwrap_or ( 0 ) )
945
+ . collect :: < Vec < _ > > ( ) ;
922
946
923
947
let versions = Version :: belonging_to ( & crates)
924
948
. load :: < Version > ( & * conn) ?
@@ -930,7 +954,8 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
930
954
. zip ( crates)
931
955
. zip ( perfect_matches)
932
956
. zip ( recent_downloads)
933
- . map ( |( ( ( max_version, krate) , perfect_match) , recent_downloads) | {
957
+ . map ( |( ( ( max_version, krate) , perfect_match) ,
958
+ recent_downloads) | {
934
959
// FIXME: If we add crate_id to the Badge enum we can eliminate
935
960
// this N+1
936
961
let badges = badges:: table
0 commit comments