diff --git a/src/jsr.rs b/src/jsr.rs index df91fe0..7508171 100644 --- a/src/jsr.rs +++ b/src/jsr.rs @@ -17,7 +17,7 @@ use crate::package::PackageReqReferenceParseError; /// /// This wraps PackageReqReference in order to prevent accidentally /// mixing this with other schemes. -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct JsrPackageReqReference(PackageReqReference); impl std::fmt::Display for JsrPackageReqReference { diff --git a/src/lib.rs b/src/lib.rs index b1464ba..fb792b3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ use std::cmp::Ordering; use std::fmt; +use std::hash::Hash; use once_cell::sync::Lazy; use serde::Deserialize; @@ -200,12 +201,26 @@ impl RangeSetOrTag { } /// A version constraint. -#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct VersionReq { raw_text: String, inner: RangeSetOrTag, } +impl PartialEq for VersionReq { + fn eq(&self, other: &Self) -> bool { + self.inner == other.inner + } +} + +impl Eq for VersionReq {} + +impl Hash for VersionReq { + fn hash(&self, state: &mut H) { + self.inner.hash(state); + } +} + impl VersionReq { /// Creates a version requirement without examining the raw text. pub fn from_raw_text_and_inner( @@ -333,4 +348,11 @@ mod test { assert!(req_star.intersects(&req_gte_1)); // again, '*' allows any version. } } + + #[test] + fn version_req_eq() { + let p1 = VersionReq::parse_from_specifier("1").unwrap(); + let p2 = VersionReq::parse_from_specifier("1.x").unwrap(); + assert_eq!(p1, p2); + } } diff --git a/src/npm.rs b/src/npm.rs index 7782ed7..836a9ad 100644 --- a/src/npm.rs +++ b/src/npm.rs @@ -438,7 +438,7 @@ fn part(input: &str) -> ParseResult<&str> { /// /// This wraps PackageReqReference in order to prevent accidentally /// mixing this with other schemes. -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct NpmPackageReqReference(PackageReqReference); impl std::fmt::Display for NpmPackageReqReference { diff --git a/src/package.rs b/src/package.rs index 8f94ede..6a84a2c 100644 --- a/src/package.rs +++ b/src/package.rs @@ -58,7 +58,7 @@ pub struct PackageReqReferenceInvalidWithVersionParseError { /// /// This contains all the information found in a package specifier other than /// what kind of package specifier it was. -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct PackageReqReference { pub req: PackageReq, pub sub_path: Option,