@@ -59,6 +59,7 @@ pub struct EncodableCrate {
59
59
pub name : String ,
60
60
pub updated_at : String ,
61
61
pub versions : Option < Vec < i32 > > ,
62
+ pub keywords : Option < Vec < String > > ,
62
63
pub created_at : String ,
63
64
pub downloads : i32 ,
64
65
pub max_version : String ,
@@ -231,7 +232,11 @@ impl Crate {
231
232
parts. next ( ) . is_none ( )
232
233
}
233
234
234
- pub fn encodable ( self , versions : Option < Vec < i32 > > ) -> EncodableCrate {
235
+ pub fn encodable (
236
+ self ,
237
+ versions : Option < Vec < i32 > > ,
238
+ keywords : Option < & [ Keyword ] > ,
239
+ ) -> EncodableCrate {
235
240
let Crate {
236
241
name, created_at, updated_at, downloads, max_version, description,
237
242
homepage, documentation, license, repository,
@@ -241,13 +246,15 @@ impl Crate {
241
246
Some ( ..) => None ,
242
247
None => Some ( format ! ( "/api/v1/crates/{}/versions" , name) ) ,
243
248
} ;
249
+ let keyword_ids = keywords. map ( |kws| kws. iter ( ) . map ( |kw| kw. keyword . clone ( ) ) . collect ( ) ) ;
244
250
EncodableCrate {
245
251
id : name. clone ( ) ,
246
252
name : name. clone ( ) ,
247
253
updated_at : :: encode_time ( updated_at) ,
248
254
created_at : :: encode_time ( created_at) ,
249
255
downloads : downloads,
250
256
versions : versions,
257
+ keywords : keyword_ids,
251
258
max_version : max_version. to_string ( ) ,
252
259
documentation : documentation,
253
260
homepage : homepage,
@@ -548,7 +555,7 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
548
555
let mut crates = Vec :: new ( ) ;
549
556
for row in try!( stmt. query ( & args) ) . iter ( ) {
550
557
let krate: Crate = Model :: from_row ( & row) ;
551
- crates. push ( krate. encodable ( None ) ) ;
558
+ crates. push ( krate. encodable ( None , None ) ) ;
552
559
}
553
560
554
561
// Query for the total count of crates
@@ -583,7 +590,7 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
583
590
let rows = try!( stmt. query ( & [ ] ) ) ;
584
591
Ok ( rows. iter ( ) . map ( |r| {
585
592
let krate: Crate = Model :: from_row ( & r) ;
586
- krate. encodable ( None )
593
+ krate. encodable ( None , None )
587
594
} ) . collect :: < Vec < EncodableCrate > > ( ) )
588
595
} ;
589
596
let new_crates = try!( tx. prepare ( "SELECT * FROM crates \
@@ -628,7 +635,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
628
635
keywords : Vec < EncodableKeyword > ,
629
636
}
630
637
Ok ( req. json ( & R {
631
- krate : krate. clone ( ) . encodable ( Some ( ids) ) ,
638
+ krate : krate. clone ( ) . encodable ( Some ( ids) , Some ( & kws ) ) ,
632
639
versions : versions. into_iter ( ) . map ( |v| {
633
640
v. encodable ( & krate. name )
634
641
} ) . collect ( ) ,
@@ -750,7 +757,7 @@ pub fn new(req: &mut Request) -> CargoResult<Response> {
750
757
751
758
#[ derive( RustcEncodable ) ]
752
759
struct R { krate : EncodableCrate }
753
- Ok ( req. json ( & R { krate : krate. encodable ( None ) } ) )
760
+ Ok ( req. json ( & R { krate : krate. encodable ( None , None ) } ) )
754
761
}
755
762
756
763
fn parse_new_headers ( req : & mut Request ) -> CargoResult < ( upload:: NewCrate , User ) > {
0 commit comments