@@ -272,7 +272,7 @@ fn get_search_results(conn: &Connection,
272
272
273
273
274
274
pub fn home_page ( req : & mut Request ) -> IronResult < Response > {
275
- let conn = req. extensions . get :: < Pool > ( ) . unwrap ( ) ;
275
+ let conn = extension ! ( req, Pool ) ;
276
276
let packages = get_releases ( conn, 1 , RELEASES_IN_HOME , Order :: ReleaseTime ) ;
277
277
Page :: new ( packages)
278
278
. set_true ( "show_search_form" )
@@ -283,15 +283,9 @@ pub fn home_page(req: &mut Request) -> IronResult<Response> {
283
283
284
284
pub fn releases_handler ( req : & mut Request ) -> IronResult < Response > {
285
285
// page number of releases
286
- let page_number: i64 = req. extensions
287
- . get :: < Router > ( )
288
- . unwrap ( )
289
- . find ( "page" )
290
- . unwrap_or ( "1" )
291
- . parse ( )
292
- . unwrap_or ( 1 ) ;
293
-
294
- let conn = req. extensions . get :: < Pool > ( ) . unwrap ( ) ;
286
+ let page_number: i64 = extension ! ( req, Router ) . find ( "page" ) . unwrap_or ( "1" ) . parse ( ) . unwrap_or ( 1 ) ;
287
+
288
+ let conn = extension ! ( req, Pool ) ;
295
289
let packages = get_releases ( conn, page_number, RELEASES_IN_RELEASES , Order :: ReleaseTime ) ;
296
290
297
291
if packages. is_empty ( ) {
@@ -320,15 +314,9 @@ pub fn releases_handler(req: &mut Request) -> IronResult<Response> {
320
314
// TODO: This function is almost identical to previous one
321
315
pub fn stars_handler ( req : & mut Request ) -> IronResult < Response > {
322
316
// page number of releases
323
- let page_number: i64 = req. extensions
324
- . get :: < Router > ( )
325
- . unwrap ( )
326
- . find ( "page" )
327
- . unwrap_or ( "1" )
328
- . parse ( )
329
- . unwrap_or ( 1 ) ;
330
-
331
- let conn = req. extensions . get :: < Pool > ( ) . unwrap ( ) ;
317
+ let page_number: i64 = extension ! ( req, Router ) . find ( "page" ) . unwrap_or ( "1" ) . parse ( ) . unwrap_or ( 1 ) ;
318
+
319
+ let conn = extension ! ( req, Pool ) ;
332
320
let packages = get_releases ( conn, page_number, RELEASES_IN_RELEASES , Order :: GithubStars ) ;
333
321
334
322
if packages. is_empty ( ) {
@@ -356,25 +344,20 @@ pub fn stars_handler(req: &mut Request) -> IronResult<Response> {
356
344
357
345
358
346
pub fn author_handler ( req : & mut Request ) -> IronResult < Response > {
347
+ let router = extension ! ( req, Router ) ;
359
348
// page number of releases
360
- let page_number: i64 = req. extensions
361
- . get :: < Router > ( )
362
- . unwrap ( )
363
- . find ( "page" )
364
- . unwrap_or ( "1" )
365
- . parse ( )
366
- . unwrap_or ( 1 ) ;
367
-
368
- let conn = req. extensions . get :: < Pool > ( ) . unwrap ( ) ;
369
- let author = try!( req. extensions
370
- . get :: < Router > ( )
371
- . unwrap ( )
372
- . find ( "author" )
349
+ let page_number: i64 = router. find ( "page" ) . unwrap_or ( "1" ) . parse ( ) . unwrap_or ( 1 ) ;
350
+
351
+ let conn = extension ! ( req, Pool ) ;
352
+ let author = ctry ! ( router. find( "author" )
373
353
. ok_or( IronError :: new( Nope :: CrateNotFound , status:: NotFound ) ) ) ;
374
354
375
355
let ( author_name, packages) = if author. starts_with ( "@" ) {
376
356
let mut author = author. clone ( ) . split ( "@" ) ;
377
- get_releases_by_owner ( conn, page_number, RELEASES_IN_RELEASES , author. nth ( 1 ) . unwrap ( ) )
357
+ get_releases_by_owner ( conn,
358
+ page_number,
359
+ RELEASES_IN_RELEASES ,
360
+ cexpect ! ( author. nth( 1 ) ) )
378
361
} else {
379
362
get_releases_by_author ( conn, page_number, RELEASES_IN_RELEASES , author)
380
363
} ;
@@ -405,10 +388,10 @@ pub fn author_handler(req: &mut Request) -> IronResult<Response> {
405
388
pub fn search_handler ( req : & mut Request ) -> IronResult < Response > {
406
389
use params:: { Params , Value } ;
407
390
408
- let params = req. get :: < Params > ( ) . unwrap ( ) ;
391
+ let params = ctry ! ( req. get:: <Params >( ) ) ;
409
392
let query = params. find ( & [ "query" ] ) ;
410
393
411
- let conn = req. extensions . get :: < Pool > ( ) . unwrap ( ) ;
394
+ let conn = extension ! ( req, Pool ) ;
412
395
if let Some ( & Value :: String ( ref query) ) = query {
413
396
414
397
// check if I am feeling lucky button pressed and redirect user to crate page
@@ -421,29 +404,29 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
421
404
422
405
// redirect to a random crate if query is empty
423
406
if query. is_empty ( ) {
424
- let rows = conn. query ( "SELECT crates.name, \
407
+ let rows = ctry ! ( conn. query( "SELECT crates.name, \
425
408
releases.version, \
426
409
releases.target_name \
427
410
FROM crates \
428
411
INNER JOIN releases
429
412
ON crates.latest_version_id = releases.id \
430
413
WHERE github_stars >= 100 AND rustdoc_status = true \
431
- OFFSET FLOOR(RANDOM() * 280) LIMIT 1", & [ ] ) . unwrap ( ) ;
432
- // ~~~~~~^
433
- // FIXME: This is a fast query but using a constant
434
- // There are currently 280 crates with docs and 100+
435
- // starts. This should be fine for a while.
414
+ OFFSET FLOOR(RANDOM() * 280) LIMIT 1",
415
+ & [ ] ) ) ;
416
+ // ~~~~~~^
417
+ // FIXME: This is a fast query but using a constant
418
+ // There are currently 280 crates with docs and 100+
419
+ // starts. This should be fine for a while.
436
420
let name: String = rows. get ( 0 ) . get ( 0 ) ;
437
421
let version: String = rows. get ( 0 ) . get ( 1 ) ;
438
422
let target_name: String = rows. get ( 0 ) . get ( 2 ) ;
439
- let url = Url :: parse ( & format ! ( "{}://{}:{}/{}/{}/{}" ,
440
- req. url. scheme,
441
- req. url. host,
442
- req. url. port,
443
- name,
444
- version,
445
- target_name) )
446
- . unwrap ( ) ;
423
+ let url = ctry ! ( Url :: parse( & format!( "{}://{}:{}/{}/{}/{}" ,
424
+ req. url. scheme,
425
+ req. url. host,
426
+ req. url. port,
427
+ name,
428
+ version,
429
+ target_name) ) ) ;
447
430
448
431
let mut resp = Response :: with ( ( status:: Found , Redirect ( url) ) ) ;
449
432
use iron:: headers:: { Expires , HttpDate } ;
@@ -454,13 +437,12 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
454
437
455
438
456
439
if let Some ( version) = match_version ( & conn, & query, None ) {
457
- let url = Url :: parse ( & format ! ( "{}://{}:{}/crate/{}/{}" ,
440
+ let url = ctry ! ( Url :: parse( & format!( "{}://{}:{}/crate/{}/{}" ,
458
441
req. url. scheme,
459
442
req. url. host,
460
443
req. url. port,
461
444
query,
462
- version) [ ..] )
463
- . unwrap ( ) ;
445
+ version) [ ..] ) ) ;
464
446
let mut resp = Response :: with ( ( status:: Found , Redirect ( url) ) ) ;
465
447
466
448
use iron:: headers:: { Expires , HttpDate } ;
@@ -488,11 +470,10 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
488
470
489
471
490
472
pub fn activity_handler ( req : & mut Request ) -> IronResult < Response > {
491
- let conn = req. extensions . get :: < Pool > ( ) . unwrap ( ) ;
473
+ let conn = extension ! ( req, Pool ) ;
492
474
let release_activity_data: Json =
493
- conn. query ( "SELECT value FROM config WHERE name = 'release_activity'" ,
494
- & [ ] )
495
- . unwrap ( )
475
+ ctry ! ( conn. query( "SELECT value FROM config WHERE name = 'release_activity'" ,
476
+ & [ ] ) )
496
477
. get ( 0 )
497
478
. get ( 0 ) ;
498
479
Page :: new ( release_activity_data)
0 commit comments