Skip to content

Commit a024691

Browse files
authored
Merge pull request #40 from jhheider/issue-37
add more constructors for Range
2 parents 823bd01 + 1feda75 commit a024691

File tree

5 files changed

+80
-5
lines changed

5 files changed

+80
-5
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "semverator"
3-
version = "0.9.1"
3+
version = "0.10.0"
44
edition = "2021"
55
license = "Apache-2.0"
66
readme = "../README.md"
@@ -13,7 +13,7 @@ categories = ["command-line-utilities"]
1313
[dependencies]
1414
anyhow = "1.0.97"
1515
clap = { version = '4.5.34', features = ['cargo'] }
16-
libsemverator = { path = "../lib", version = "0.9.1" }
16+
libsemverator = { path = "../lib", version = "0.10.0" }
1717

1818
[lints.rust]
1919
unexpected_cfgs = { level = "allow", check-cfg = ['cfg(tarpaulin_include)'] }

lib/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "libsemverator"
3-
version = "0.9.1"
3+
version = "0.10.0"
44
edition = "2021"
55
license = "Apache-2.0"
66
readme = "../README.md"

lib/src/range/parse.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,46 @@ impl Range {
3939
}
4040
Ok(Self { raw, set })
4141
}
42+
43+
pub fn any() -> Self {
44+
Self {
45+
raw: "*".to_string(),
46+
set: vec![Constraint::Any],
47+
}
48+
}
49+
50+
pub fn single(v: &str) -> Result<Self> {
51+
let raw = format!("={}", v);
52+
let set = vec![Constraint::Single(
53+
Semver::parse(v).context("invalid version")?,
54+
)];
55+
Ok(Self { raw, set })
56+
}
57+
58+
pub fn contiguous(v1: &str, v2: &str) -> Result<Self> {
59+
let raw = format!(">={}<{}", v1, v2);
60+
let set = vec![Constraint::Contiguous(
61+
Semver::parse(v1).context("invalid version")?,
62+
Semver::parse(v2).context("invalid version")?,
63+
)];
64+
Ok(Self { raw, set })
65+
}
66+
67+
pub fn caret(v: &str) -> Result<Self> {
68+
let raw = format!("^{}", v);
69+
let set = vec![Constraint::parse(&raw)?];
70+
Ok(Self { raw, set })
71+
}
72+
73+
pub fn tilde(v: &str) -> Result<Self> {
74+
let raw = format!("~{}", v);
75+
let set = vec![Constraint::parse(&raw)?];
76+
Ok(Self { raw, set })
77+
}
78+
79+
pub fn from_semver(v: &Semver) -> Result<Self> {
80+
Self::single(&v.raw)
81+
}
4282
}
4383

4484
impl Constraint {

lib/src/tests/range.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,41 @@ fn test_display() -> Result<()> {
281281
Ok(())
282282
}
283283

284+
#[test]
285+
fn test_constructors() -> Result<()> {
286+
let ra = Range::parse("*")?;
287+
let rb = Range::any();
288+
289+
assert_eq!(ra.raw, rb.raw);
290+
291+
let rc = Range::parse("=1.2.3")?;
292+
let rd = Range::single("1.2.3")?;
293+
294+
assert_eq!(rc.raw, rd.raw);
295+
296+
let re = Range::parse(">=1.2.3<2.0.0")?;
297+
let rf = Range::contiguous("1.2.3", "2.0.0")?;
298+
299+
assert_eq!(re.raw, rf.raw);
300+
301+
let rg = Range::parse("^1.2.3")?;
302+
let rh = Range::caret("1.2.3")?;
303+
304+
assert_eq!(rg.raw, rh.raw);
305+
306+
let ri = Range::parse("~1.2.3")?;
307+
let rj = Range::tilde("1.2.3")?;
308+
309+
assert_eq!(ri.raw, rj.raw);
310+
311+
let sa = Semver::parse("1.2.3")?;
312+
let rk = Range::from_semver(&sa)?;
313+
314+
assert_eq!(rd.raw, rk.raw);
315+
316+
Ok(())
317+
}
318+
284319
#[cfg(feature = "serde")]
285320
#[test]
286321
fn test_serde() -> Result<()> {

0 commit comments

Comments
 (0)