@@ -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 ,
@@ -498,7 +498,15 @@ impl Crate {
498
498
exact_match : bool ,
499
499
recent_downloads : Option < i64 > ,
500
500
) -> EncodableCrate {
501
- self . encodable ( max_version, None , None , None , badges, exact_match, recent_downloads)
501
+ self . encodable (
502
+ max_version,
503
+ None ,
504
+ None ,
505
+ None ,
506
+ badges,
507
+ exact_match,
508
+ recent_downloads,
509
+ )
502
510
}
503
511
504
512
pub fn encodable (
@@ -752,20 +760,26 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
752
760
let conn = req. db_conn ( ) ?;
753
761
let ( offset, limit) = req. pagination ( 10 , 100 ) ?;
754
762
let params = req. query ( ) ;
755
- let sort = params. get ( "sort" ) . map ( |s| & * * s) . unwrap_or ( "recent-downloads" ) ;
763
+ let sort = params. get ( "sort" ) . map ( |s| & * * s) . unwrap_or (
764
+ "recent-downloads" ,
765
+ ) ;
756
766
757
767
let recent_downloads = sql :: < Nullable < BigInt > > ( "SUM(crate_downloads.downloads)" ) ;
758
768
759
769
let mut query = crates:: table
760
770
. join (
761
771
crate_downloads:: table,
762
772
LeftOuter ,
763
- crates:: id
764
- . eq ( crate_downloads:: crate_id )
765
- . and ( crate_downloads :: date . gt ( date ( now - 90 . days ( ) ) ) )
766
- )
773
+ crates:: id. eq ( crate_downloads :: crate_id ) . and (
774
+ crate_downloads:: date . gt ( date ( now - 90 . days ( ) ) ) ,
775
+ ) ,
776
+ )
767
777
. group_by ( crates:: id)
768
- . select ( ( ALL_COLUMNS , AsExpression :: < Bool > :: as_expression ( false ) , recent_downloads. clone ( ) ) )
778
+ . select ( (
779
+ ALL_COLUMNS ,
780
+ AsExpression :: < Bool > :: as_expression ( false ) ,
781
+ recent_downloads. clone ( ) ,
782
+ ) )
769
783
. into_boxed ( ) ;
770
784
771
785
if sort == "downloads" {
@@ -785,7 +799,11 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
785
799
) ,
786
800
) ) ;
787
801
788
- query = query. select ( ( ALL_COLUMNS , crates:: name. eq ( q_string) , recent_downloads. clone ( ) ) ) ;
802
+ query = query. select ( (
803
+ ALL_COLUMNS ,
804
+ crates:: name. eq ( q_string) ,
805
+ recent_downloads. clone ( ) ,
806
+ ) ) ;
789
807
let perfect_match = crates:: name. eq ( q_string) . desc ( ) ;
790
808
if sort == "downloads" {
791
809
query = query. order ( ( perfect_match, crates:: downloads. desc ( ) ) ) ;
@@ -857,15 +875,21 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
857
875
) ) ;
858
876
}
859
877
860
- let data = query. paginate ( limit , offset ) . load :: < ( ( Crate , bool , Option < i64 > ) , i64 ) > (
861
- & * conn ,
862
- ) ?;
878
+ let data = query
879
+ . paginate ( limit , offset )
880
+ . load :: < ( ( Crate , bool , Option < i64 > ) , i64 ) > ( & * conn ) ?;
863
881
let total = data. first ( ) . map ( |& ( _, t) | t) . unwrap_or ( 0 ) ;
864
882
let crates = data. iter ( )
865
883
. map ( |& ( ( ref c, _, _) , _) | c. clone ( ) )
866
884
. collect :: < Vec < _ > > ( ) ;
867
- let perfect_matches = data. clone ( ) . into_iter ( ) . map ( |( ( _, b, _) , _) | b) . collect :: < Vec < _ > > ( ) ;
868
- let recent_downloads = data. clone ( ) . into_iter ( ) . map ( |( ( _, _, s) , _) | s. unwrap_or ( 0 ) ) . collect :: < Vec < _ > > ( ) ;
885
+ let perfect_matches = data. clone ( )
886
+ . into_iter ( )
887
+ . map ( |( ( _, b, _) , _) | b)
888
+ . collect :: < Vec < _ > > ( ) ;
889
+ let recent_downloads = data. clone ( )
890
+ . into_iter ( )
891
+ . map ( |( ( _, _, s) , _) | s. unwrap_or ( 0 ) )
892
+ . collect :: < Vec < _ > > ( ) ;
869
893
870
894
let versions = Version :: belonging_to ( & crates)
871
895
. load :: < Version > ( & * conn) ?
@@ -877,7 +901,8 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
877
901
. zip ( crates)
878
902
. zip ( perfect_matches)
879
903
. zip ( recent_downloads)
880
- . map ( |( ( ( max_version, krate) , perfect_match) , recent_downloads) | {
904
+ . map ( |( ( ( max_version, krate) , perfect_match) ,
905
+ recent_downloads) | {
881
906
// FIXME: If we add crate_id to the Badge enum we can eliminate
882
907
// this N+1
883
908
let badges = badges:: table
0 commit comments