summaryrefslogtreecommitdiffstats
path: root/src/package
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-03-18 12:23:17 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-03-18 12:23:17 +0100
commita8fba4d14f2a1743e393dde1bc03c1af2ee119df (patch)
tree37dd782923a08865d33c47c64e1ccbb73b27807f /src/package
parentbccbb50ff3b377a1c76e571446ee44902ace2cce (diff)
parent586bca9267adf754042a9f4fc772d57da4d9ef6d (diff)
Merge branch 'nice-error-for-package_version_contraint'
Diffstat (limited to 'src/package')
-rw-r--r--src/package/dependency/mod.rs9
-rw-r--r--src/package/version.rs28
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,