simplify latest crate search

This commit is contained in:
Sam Rijs 2018-02-17 14:59:54 +11:00
parent 37a11c17b5
commit c7bc04efc1
2 changed files with 7 additions and 12 deletions

View file

@ -147,20 +147,14 @@ impl Engine {
}) })
} }
pub fn find_latest_crate_release(&self, name: CrateName, req: Option<VersionReq>) -> pub fn find_latest_crate_release(&self, name: CrateName, req: VersionReq) ->
impl Future<Item=Option<CrateRelease>, Error=Error> impl Future<Item=Option<CrateRelease>, Error=Error>
{ {
self.query_crate.call(name).from_err().map(move |query_response| { self.query_crate.call(name).from_err().map(move |query_response| {
if let Some(vreq) = req { query_response.releases.iter()
query_response.releases.iter() .filter(|release| req.matches(&release.version))
.filter(|release| vreq.matches(&release.version)) .max_by(|r1, r2| r1.version.cmp(&r2.version))
.max_by(|r1, r2| r1.version.cmp(&r2.version)) .cloned()
.cloned()
} else {
query_response.releases.iter()
.max_by(|r1, r2| r1.version.cmp(&r2.version))
.cloned()
}
}) })
} }

View file

@ -5,6 +5,7 @@ use futures::{Future, IntoFuture, future};
use hyper::{Error as HyperError, Method, Request, Response, StatusCode}; use hyper::{Error as HyperError, Method, Request, Response, StatusCode};
use hyper::header::{ContentType, Location}; use hyper::header::{ContentType, Location};
use route_recognizer::{Params, Router}; use route_recognizer::{Params, Router};
use semver::VersionReq;
use slog::Logger; use slog::Logger;
use tokio_service::Service; use tokio_service::Service;
@ -183,7 +184,7 @@ impl Server {
future::Either::A(future::ok(response)) future::Either::A(future::ok(response))
}, },
Ok(crate_name) => { Ok(crate_name) => {
future::Either::B(engine.find_latest_crate_release(crate_name, None).then(move |release_result| { future::Either::B(engine.find_latest_crate_release(crate_name, VersionReq::any()).then(move |release_result| {
match release_result { match release_result {
Err(err) => { Err(err) => {
error!(logger, "error: {}", err); error!(logger, "error: {}", err);