diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-03-18 12:23:17 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-03-18 12:23:17 +0100 |
commit | a8fba4d14f2a1743e393dde1bc03c1af2ee119df (patch) | |
tree | 37dd782923a08865d33c47c64e1ccbb73b27807f /src/package | |
parent | bccbb50ff3b377a1c76e571446ee44902ace2cce (diff) | |
parent | 586bca9267adf754042a9f4fc772d57da4d9ef6d (diff) |
Merge branch 'nice-error-for-package_version_contraint'
Diffstat (limited to 'src/package')
-rw-r--r-- | src/package/dependency/mod.rs | 9 | ||||
-rw-r--r-- | src/package/version.rs | 28 |
2 files changed, 29 insertions, 8 deletions
diff --git a/src/package/dependency/mod.rs b/src/package/dependency/mod.rs index a4f6367..e58d0a0 100644 --- a/src/package/dependency/mod.rs +++ b/src/package/dependency/mod.rs @@ -8,6 +8,8 @@ // SPDX-License-Identifier: EPL-2.0 // +use std::convert::TryFrom; + use anyhow::anyhow; use anyhow::Result; use lazy_static::lazy_static; @@ -52,15 +54,16 @@ pub(in crate::package::dependency) fn parse_package_dependency_string_into_name_ let name = caps .name("name") + .map(|m| String::from(m.as_str())) .ok_or_else(|| anyhow!("Could not parse name: '{}'", s))?; let vers = caps .name("version") + .map(|m| String::from(m.as_str())) .ok_or_else(|| anyhow!("Could not parse version: '{}'", s))?; - let v = PackageVersionConstraint::parser().parse(vers.as_str().as_bytes())?; - - Ok((PackageName::from(String::from(name.as_str())), v)) + let v = PackageVersionConstraint::try_from(vers)?; + Ok((PackageName::from(name), v)) } #[cfg(test)] diff --git a/src/package/version.rs b/src/package/version.rs index c27bf92..359c80f 100644 --- a/src/package/version.rs +++ b/src/package/version.rs @@ -10,6 +10,7 @@ use std::ops::Deref; +use anyhow::Context; use anyhow::Error; use anyhow::Result; use pom::parser::Parser as PomParser; @@ -25,11 +26,7 @@ pub struct PackageVersionConstraint { } impl PackageVersionConstraint { - pub fn new(s: String) -> Result<Self> { - Self::parser().parse(s.as_bytes()).map_err(Error::from) - } - - pub fn parser<'a>() -> PomParser<'a, u8, Self> { + fn parser<'a>() -> PomParser<'a, u8, Self> { (pom::parser::sym(b'=') + PackageVersion::parser()) .convert(|(constraint, version)| { String::from_utf8(vec![constraint]).map(|c| (c, version)) @@ -53,6 +50,27 @@ impl PackageVersionConstraint { } } +impl std::convert::TryFrom<String> for PackageVersionConstraint { + type Error = anyhow::Error; + + fn try_from(s: String) -> Result<Self> { + Self::try_from(&s as &str) + } +} + +impl std::convert::TryFrom<&str> for PackageVersionConstraint { + type Error = anyhow::Error; + + fn try_from(s: &str) -> Result<Self> { + PackageVersionConstraint::parser() + .parse(s.as_bytes()) + .context("Failed to parse package version constraint") + .context("A package version constraint must have a comparator and a version string, like so: =0.1.0") + .map_err(Error::from) + + } +} + #[derive( parse_display::Display, Serialize, |