use semver::{Comparator, Op, Version, VersionReq};
pub(crate) struct VersionMatcher {
req: VersionReq,
}
impl VersionMatcher {
pub fn new(version: &Version) -> VersionMatcher {
let mut comparator = Comparator {
op: Op::Caret,
major: version.major,
minor: None,
patch: None,
pre: Default::default(),
};
if version.pre.is_empty() {
if version.major == 0 {
comparator.minor = Some(version.minor);
if version.minor == 0 {
comparator.patch = Some(version.patch);
}
}
} else {
comparator.minor = Some(version.minor);
comparator.patch = Some(version.patch);
comparator.pre = version.pre.clone();
}
let req = VersionReq {
comparators: vec![comparator],
};
VersionMatcher { req }
}
pub fn matches(&self, version: &Version) -> bool {
self.req.matches(version)
}
}