Skip to content

Commit 0565844

Browse files
committed
Parse range on creation.
1 parent f3a24b9 commit 0565844

File tree

4 files changed

+18
-13
lines changed

4 files changed

+18
-13
lines changed

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,8 @@ fn proto_to_retirement_reason(reason: proto::package::RetirementReason) -> Retir
790790
fn proto_to_dep(dep: proto::package::Dependency) -> Result<(String, Dependency), ApiError> {
791791
let app = dep.app;
792792
let repository = dep.repository;
793-
let requirement = Range::new(dep.requirement);
793+
let requirement = Range::new(dep.requirement.clone())
794+
.map_err(|_| ApiError::InvalidVersionFormat(dep.requirement))?;
794795
Ok((
795796
dep.package,
796797
Dependency {

src/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,7 +1221,7 @@ async fn get_package_release_ok() {
12211221
(
12221222
"plug".into(),
12231223
Dependency {
1224-
requirement: Range::new("~>0.11.0".into()),
1224+
requirement: Range::new("~>0.11.0".into()).unwrap(),
12251225
optional: false,
12261226
app: Some("plug".into()),
12271227
repository: None
@@ -1230,7 +1230,7 @@ async fn get_package_release_ok() {
12301230
(
12311231
"cowboy".into(),
12321232
Dependency {
1233-
requirement: Range::new("~>1.0.0".into()),
1233+
requirement: Range::new("~>1.0.0".into()).unwrap(),
12341234
optional: false,
12351235
app: Some("cowboy".into()),
12361236
repository: None

src/version.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -315,27 +315,31 @@ impl Identifier {
315315
}
316316

317317
#[derive(Clone, PartialEq, Eq)]
318-
pub struct Range(String);
318+
pub struct Range {
319+
spec: String,
320+
range: pubgrub::range::Range<Version>,
321+
}
319322

320323
impl Range {
321-
pub fn new(spec: String) -> Self {
322-
Self(spec)
324+
pub fn new(spec: String) -> Result<Self, parser::Error> {
325+
let range = Version::parse_range(spec.as_str())?;
326+
Ok(Self { spec, range })
323327
}
324328
}
325329

326330
impl Range {
327-
pub fn to_pubgrub(&self) -> Result<pubgrub::range::Range<Version>, parser::Error> {
328-
Version::parse_range(&self.0)
331+
pub fn to_pubgrub(&self) -> &pubgrub::range::Range<Version> {
332+
&self.range
329333
}
330334

331335
pub fn as_str(&self) -> &str {
332-
&self.0
336+
&self.spec
333337
}
334338
}
335339

336340
impl fmt::Debug for Range {
337341
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
338-
f.debug_tuple("Range").field(&self.0.to_string()).finish()
342+
f.debug_tuple("Range").field(&self.spec).finish()
339343
}
340344
}
341345

@@ -345,7 +349,7 @@ impl<'de> Deserialize<'de> for Range {
345349
D: Deserializer<'de>,
346350
{
347351
let s: &str = Deserialize::deserialize(deserializer)?;
348-
Ok(Range::new(s.to_string()))
352+
Range::new(s.to_string()).map_err(serde::de::Error::custom)
349353
}
350354
}
351355

@@ -360,8 +364,7 @@ impl Serialize for Range {
360364

361365
impl fmt::Display for Range {
362366
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
363-
write!(f, "{}", self.0)?;
364-
Ok(())
367+
f.write_str(&self.spec)
365368
}
366369
}
367370

src/version/tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::cmp::Ordering::{Equal, Greater, Less};
2+
use std::collections::HashMap;
23

34
use parser::Error;
45
use pubgrub::version::Version as _;

0 commit comments

Comments
 (0)