From 7577e62c1ac5d218004624144274d1086f8f62a6 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar <etryzelaar@google.com> Date: Wed, 17 Apr 2019 00:47:58 +0000 Subject: [PATCH] [fuchsia-uri] Make PkgUri,RepoUri hashable This allows PkgUri and RepoUri to be used as keys in HashMaps and HashSets. Change-Id: I30f7fb1a893ec84ce83bb2bff6c9ede4fd39bf1a --- garnet/bin/pkg_resolver/src/resolver_service.rs | 4 ++-- garnet/lib/rust/fuchsia_uri/src/pkg_uri.rs | 14 +++++++------- garnet/lib/rust/fuchsia_uri_rewrite/src/rule.rs | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/garnet/bin/pkg_resolver/src/resolver_service.rs b/garnet/bin/pkg_resolver/src/resolver_service.rs index 4501a50f1d7..4c00dfa9436 100644 --- a/garnet/bin/pkg_resolver/src/resolver_service.rs +++ b/garnet/bin/pkg_resolver/src/resolver_service.rs @@ -134,8 +134,8 @@ async fn resolve<'a>( // FIXME: use the package cache to fetch the package instead of amber. // Ask amber to cache the package. - let chan = - await!(amber.get_update_complete(&name, uri.variant(), uri.hash())).map_err(|err| { + let chan = await!(amber.get_update_complete(&name, uri.variant(), uri.package_hash())) + .map_err(|err| { fx_log_err!("error communicating with amber: {:?}", err); Status::INTERNAL })?; diff --git a/garnet/lib/rust/fuchsia_uri/src/pkg_uri.rs b/garnet/lib/rust/fuchsia_uri/src/pkg_uri.rs index 3b44984c47b..e98bcf00fe3 100644 --- a/garnet/lib/rust/fuchsia_uri/src/pkg_uri.rs +++ b/garnet/lib/rust/fuchsia_uri/src/pkg_uri.rs @@ -32,7 +32,7 @@ use url::Url; /// - fuchsia-pkg://example.com/some-package/some-variant#path/to/resource /// - fuchsia-pkg://example.com/some-package/some-variant?hash=<some-hash>#path/to/resource /// - fuchsia-pkg://example.com/some-package/some-variant/<some-hash>#path/to/resource (obsolete) -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct PkgUri { host: String, path: String, @@ -116,7 +116,7 @@ impl PkgUri { &self.path } - pub fn hash(&self) -> Option<&str> { + pub fn package_hash(&self) -> Option<&str> { self.hash.as_ref().map(|s| &**s) } @@ -246,7 +246,7 @@ impl<'de> Deserialize<'de> for PkgUri { } } -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize)] +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] #[serde(transparent)] pub struct RepoUri { uri: PkgUri, @@ -410,7 +410,7 @@ mod tests { assert_eq!(uri.path(), $pkg_path); assert_eq!(uri.name(), $pkg_name); assert_eq!(uri.variant(), $pkg_variant); - assert_eq!(uri.hash(), $pkg_hash); + assert_eq!(uri.package_hash(), $pkg_hash); assert_eq!(uri.resource(), $pkg_resource); } @@ -753,7 +753,7 @@ mod tests { assert_eq!("/", uri.path()); assert_eq!(None, uri.name()); assert_eq!(None, uri.variant()); - assert_eq!(None, uri.hash()); + assert_eq!(None, uri.package_hash()); assert_eq!(None, uri.resource()); assert_eq!(PkgUri::new_repository("".to_string()), Err(ParseError::InvalidHost)); @@ -773,7 +773,7 @@ mod tests { assert_eq!(Some("stable"), uri.variant()); assert_eq!( Some("80e8721f4eba5437c8b6e1604f6ee384f42aed2b6dfbfd0b616a864839cd7b4a"), - uri.hash() + uri.package_hash() ); assert_eq!(None, uri.resource()); assert_eq!(uri, uri.root_uri()); @@ -829,7 +829,7 @@ mod tests { assert_eq!(Some("stable"), uri.variant()); assert_eq!( Some("80e8721f4eba5437c8b6e1604f6ee384f42aed2b6dfbfd0b616a864839cd7b4a"), - uri.hash() + uri.package_hash() ); assert_eq!(Some("foo/bar"), uri.resource()); let mut uri_no_resource = uri.clone(); diff --git a/garnet/lib/rust/fuchsia_uri_rewrite/src/rule.rs b/garnet/lib/rust/fuchsia_uri_rewrite/src/rule.rs index 60835d7c5c0..3a17a326196 100644 --- a/garnet/lib/rust/fuchsia_uri_rewrite/src/rule.rs +++ b/garnet/lib/rust/fuchsia_uri_rewrite/src/rule.rs @@ -96,13 +96,13 @@ impl Rule { (_, None) => PkgUri::new_package( self.host_replacement.clone(), new_path, - uri.hash().map(|s| s.to_owned()), + uri.package_hash().map(|s| s.to_owned()), ), (_, Some(resource)) => PkgUri::new_resource( self.host_replacement.clone(), new_path, - uri.hash().map(|s| s.to_owned()), + uri.package_hash().map(|s| s.to_owned()), resource.to_owned(), ), }) -- GitLab