Skip to content

Commit c4d209a

Browse files
authored
feat!: ues u32 insted of NumberVersion (pubgrub-rs#180)
* feat: ues u32 insted of NumberVersion * clean up
1 parent 0d80e9d commit c4d209a

File tree

9 files changed

+69
-154
lines changed

9 files changed

+69
-154
lines changed

benches/large_case.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use self::criterion::*;
77
use pubgrub::package::Package;
88
use pubgrub::range::Range;
99
use pubgrub::solver::{resolve, OfflineDependencyProvider};
10-
use pubgrub::version::{NumberVersion, SemanticVersion};
10+
use pubgrub::version::SemanticVersion;
1111
use pubgrub::version_set::VersionSet;
1212
use serde::de::Deserialize;
1313

@@ -36,9 +36,9 @@ fn bench_nested(c: &mut Criterion) {
3636
let case = case.unwrap().path();
3737
let name = case.file_name().unwrap().to_string_lossy();
3838
let data = std::fs::read_to_string(&case).unwrap();
39-
if name.ends_with("u16_NumberVersion.ron") {
39+
if name.ends_with("u16_NumberVersion.ron") || name.ends_with("u16_u32.ron") {
4040
group.bench_function(name, |b| {
41-
bench::<u16, Range<NumberVersion>>(b, &data);
41+
bench::<u16, Range<u32>>(b, &data);
4242
});
4343
} else if name.ends_with("str_SemanticVersion.ron") {
4444
group.bench_function(name, |b| {

examples/caching_dependency_provider.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ use std::cell::RefCell;
55
use pubgrub::package::Package;
66
use pubgrub::range::Range;
77
use pubgrub::solver::{resolve, Dependencies, DependencyProvider, OfflineDependencyProvider};
8-
use pubgrub::version::NumberVersion;
98
use pubgrub::version_set::VersionSet;
109

11-
type NumVS = Range<NumberVersion>;
10+
type NumVS = Range<u32>;
1211

1312
// An example implementing caching dependency provider that will
1413
// store queried dependencies in memory and check them before querying more from remote.
@@ -77,11 +76,11 @@ fn main() {
7776
let mut remote_dependencies_provider = OfflineDependencyProvider::<&str, NumVS>::new();
7877

7978
// Add dependencies as needed. Here only root package is added.
80-
remote_dependencies_provider.add_dependencies("root", 1, Vec::new());
79+
remote_dependencies_provider.add_dependencies("root", 1u32, Vec::new());
8180

8281
let caching_dependencies_provider =
8382
CachingDependencyProvider::new(remote_dependencies_provider);
8483

85-
let solution = resolve(&caching_dependencies_provider, "root", 1);
84+
let solution = resolve(&caching_dependencies_provider, "root", 1u32);
8685
println!("Solution: {:?}", solution);
8786
}

examples/doc_interface.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
use pubgrub::range::Range;
44
use pubgrub::solver::{resolve, OfflineDependencyProvider};
5-
use pubgrub::version::NumberVersion;
65

7-
type NumVS = Range<NumberVersion>;
6+
type NumVS = Range<u32>;
87

98
// `root` depends on `menu` and `icons`
109
// `menu` depends on `dropdown`
@@ -14,13 +13,13 @@ type NumVS = Range<NumberVersion>;
1413
fn main() {
1514
let mut dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
1615
dependency_provider.add_dependencies(
17-
"root", 1, [("menu", Range::full()), ("icons", Range::full())],
16+
"root", 1u32, [("menu", Range::full()), ("icons", Range::full())],
1817
);
19-
dependency_provider.add_dependencies("menu", 1, [("dropdown", Range::full())]);
20-
dependency_provider.add_dependencies("dropdown", 1, [("icons", Range::full())]);
21-
dependency_provider.add_dependencies("icons", 1, []);
18+
dependency_provider.add_dependencies("menu", 1u32, [("dropdown", Range::full())]);
19+
dependency_provider.add_dependencies("dropdown", 1u32, [("icons", Range::full())]);
20+
dependency_provider.add_dependencies("icons", 1u32, []);
2221

2322
// Run the algorithm.
24-
let solution = resolve(&dependency_provider, "root", 1);
23+
let solution = resolve(&dependency_provider, "root", 1u32);
2524
println!("Solution: {:?}", solution);
2625
}

src/lib.rs

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,18 @@
1111
//! # Package and Version traits
1212
//!
1313
//! All the code in this crate is manipulating packages and versions, and for this to work
14-
//! we defined a [Package](package::Package) and [Version](version::Version) traits
15-
//! that are used as bounds on most of the exposed types and functions.
14+
//! we defined a [Package](package::Package) trait
15+
//! that is used as bounds on most of the exposed types and functions.
1616
//!
1717
//! Package identifiers needs to implement our [Package](package::Package) trait,
1818
//! which is automatic if the type already implements
1919
//! [Clone] + [Eq] + [Hash] + [Debug] + [Display](std::fmt::Display).
2020
//! So things like [String] will work out of the box.
2121
//!
22-
//! Our [Version](version::Version) trait requires
23-
//! [Clone] + [Ord] + [Debug] + [Display](std::fmt::Display)
24-
//! and also the definition of two methods,
25-
//! [lowest() -> Self](version::Version::lowest) which returns the lowest version existing,
26-
//! and [bump(&self) -> Self](version::Version::bump) which returns the next smallest version
27-
//! strictly higher than the current one.
28-
//! For convenience, this library already provides
29-
//! two implementations of [Version](version::Version).
30-
//! The first one is [NumberVersion](version::NumberVersion), basically a newtype for [u32].
31-
//! The second one is [SemanticVersion](version::NumberVersion)
22+
//! TODO! This is all wrong. Need to talk about VS, not Version.
23+
//! Our Version trait requires
24+
//! [Clone] + [Ord] + [Debug] + [Display](std::fmt::Display).
25+
//! For convenience, this library provides [SemanticVersion](version::SemanticVersion)
3226
//! that implements semantic versioning rules.
3327
//!
3428
//! # Basic example
@@ -47,22 +41,21 @@
4741
//! We can model that scenario with this library as follows
4842
//! ```
4943
//! # use pubgrub::solver::{OfflineDependencyProvider, resolve};
50-
//! # use pubgrub::version::NumberVersion;
5144
//! # use pubgrub::range::Range;
5245
//!
53-
//! type NumVS = Range<NumberVersion>;
46+
//! type NumVS = Range<u32>;
5447
//!
5548
//! let mut dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
5649
//!
5750
//! dependency_provider.add_dependencies(
58-
//! "root", 1, [("menu", Range::full()), ("icons", Range::full())],
51+
//! "root", 1u32, [("menu", Range::full()), ("icons", Range::full())],
5952
//! );
60-
//! dependency_provider.add_dependencies("menu", 1, [("dropdown", Range::full())]);
61-
//! dependency_provider.add_dependencies("dropdown", 1, [("icons", Range::full())]);
62-
//! dependency_provider.add_dependencies("icons", 1, []);
53+
//! dependency_provider.add_dependencies("menu", 1u32, [("dropdown", Range::full())]);
54+
//! dependency_provider.add_dependencies("dropdown", 1u32, [("icons", Range::full())]);
55+
//! dependency_provider.add_dependencies("icons", 1u32, []);
6356
//!
6457
//! // Run the algorithm.
65-
//! let solution = resolve(&dependency_provider, "root", 1).unwrap();
58+
//! let solution = resolve(&dependency_provider, "root", 1u32).unwrap();
6659
//! ```
6760
//!
6861
//! # DependencyProvider trait
@@ -183,14 +176,13 @@
183176
//! # use pubgrub::solver::{resolve, OfflineDependencyProvider};
184177
//! # use pubgrub::report::{DefaultStringReporter, Reporter};
185178
//! # use pubgrub::error::PubGrubError;
186-
//! # use pubgrub::version::NumberVersion;
187179
//! # use pubgrub::range::Range;
188180
//! #
189-
//! # type NumVS = Range<NumberVersion>;
181+
//! # type NumVS = Range<u32>;
190182
//! #
191183
//! # let dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
192184
//! # let root_package = "root";
193-
//! # let root_version = 1;
185+
//! # let root_version = 1u32;
194186
//! #
195187
//! match resolve(&dependency_provider, root_package, root_version) {
196188
//! Ok(solution) => println!("{:?}", solution),

src/solver.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,15 @@
4343
//! ```
4444
//! # use std::convert::Infallible;
4545
//! # use pubgrub::solver::{resolve, OfflineDependencyProvider};
46-
//! # use pubgrub::version::NumberVersion;
4746
//! # use pubgrub::error::PubGrubError;
4847
//! # use pubgrub::range::Range;
4948
//! #
50-
//! # type NumVS = Range<NumberVersion>;
49+
//! # type NumVS = Range<u32>;
5150
//! #
5251
//! # fn try_main() -> Result<(), PubGrubError<&'static str, NumVS, Infallible>> {
5352
//! # let dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
5453
//! # let package = "root";
55-
//! # let version = 1;
54+
//! # let version = 1u32;
5655
//! let solution = resolve(&dependency_provider, package, version)?;
5756
//! # Ok(())
5857
//! # }

src/version.rs

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,6 @@ use std::fmt::{self, Debug, Display};
66
use std::str::FromStr;
77
use thiserror::Error;
88

9-
/// Versions have a minimal version (a "0" version)
10-
/// and are ordered such that every version has a next one.
11-
pub trait Version: Clone + Ord + Debug + Display {
12-
/// Returns the lowest version.
13-
fn lowest() -> Self;
14-
/// Returns the next version, the smallest strictly higher version.
15-
fn bump(&self) -> Self;
16-
}
17-
189
/// Type for semantic versions: major.minor.patch.
1910
#[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
2011
pub struct SemanticVersion {
@@ -228,62 +219,3 @@ impl Display for SemanticVersion {
228219
write!(f, "{}.{}.{}", self.major, self.minor, self.patch)
229220
}
230221
}
231-
232-
// Implement Version for SemanticVersion.
233-
impl Version for SemanticVersion {
234-
fn lowest() -> Self {
235-
Self::zero()
236-
}
237-
fn bump(&self) -> Self {
238-
self.bump_patch()
239-
}
240-
}
241-
242-
/// Simplest versions possible, just a positive number.
243-
#[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
244-
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize,))]
245-
#[cfg_attr(feature = "serde", serde(transparent))]
246-
pub struct NumberVersion(pub u32);
247-
248-
// Convert an usize into a version.
249-
impl From<u32> for NumberVersion {
250-
fn from(v: u32) -> Self {
251-
Self(v)
252-
}
253-
}
254-
255-
// Convert an &usize into a version.
256-
impl From<&u32> for NumberVersion {
257-
fn from(v: &u32) -> Self {
258-
Self(*v)
259-
}
260-
}
261-
262-
// Convert an &version into a version.
263-
impl From<&NumberVersion> for NumberVersion {
264-
fn from(v: &NumberVersion) -> Self {
265-
*v
266-
}
267-
}
268-
269-
// Convert a version into an usize.
270-
impl From<NumberVersion> for u32 {
271-
fn from(version: NumberVersion) -> Self {
272-
version.0
273-
}
274-
}
275-
276-
impl Display for NumberVersion {
277-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
278-
write!(f, "{}", self.0)
279-
}
280-
}
281-
282-
impl Version for NumberVersion {
283-
fn lowest() -> Self {
284-
Self(0)
285-
}
286-
fn bump(&self) -> Self {
287-
Self(self.0 + 1)
288-
}
289-
}

tests/examples.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ use pubgrub::range::Range;
55
use pubgrub::report::{DefaultStringReporter, Reporter as _};
66
use pubgrub::solver::{resolve, OfflineDependencyProvider};
77
use pubgrub::type_aliases::Map;
8-
use pubgrub::version::{NumberVersion, SemanticVersion};
8+
use pubgrub::version::SemanticVersion;
99

10-
type NumVS = Range<NumberVersion>;
10+
type NumVS = Range<u32>;
1111
type SemVS = Range<SemanticVersion>;
1212

1313
use log::LevelFilter;
@@ -193,22 +193,22 @@ fn conflict_with_partial_satisfier() {
193193
fn double_choices() {
194194
init_log();
195195
let mut dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
196-
dependency_provider.add_dependencies("a", 0, [("b", Range::full()), ("c", Range::full())]);
197-
dependency_provider.add_dependencies("b", 0, [("d", Range::singleton(0))]);
198-
dependency_provider.add_dependencies("b", 1, [("d", Range::singleton(1))]);
199-
dependency_provider.add_dependencies("c", 0, []);
200-
dependency_provider.add_dependencies("c", 1, [("d", Range::singleton(2))]);
201-
dependency_provider.add_dependencies("d", 0, []);
196+
dependency_provider.add_dependencies("a", 0u32, [("b", Range::full()), ("c", Range::full())]);
197+
dependency_provider.add_dependencies("b", 0u32, [("d", Range::singleton(0u32))]);
198+
dependency_provider.add_dependencies("b", 1u32, [("d", Range::singleton(1u32))]);
199+
dependency_provider.add_dependencies("c", 0u32, []);
200+
dependency_provider.add_dependencies("c", 1u32, [("d", Range::singleton(2u32))]);
201+
dependency_provider.add_dependencies("d", 0u32, []);
202202

203203
// Solution.
204204
let mut expected_solution = Map::default();
205-
expected_solution.insert("a", 0.into());
206-
expected_solution.insert("b", 0.into());
207-
expected_solution.insert("c", 0.into());
208-
expected_solution.insert("d", 0.into());
205+
expected_solution.insert("a", 0u32);
206+
expected_solution.insert("b", 0u32);
207+
expected_solution.insert("c", 0u32);
208+
expected_solution.insert("d", 0u32);
209209

210210
// Run the algorithm.
211-
let computed_solution = resolve(&dependency_provider, "a", 0).unwrap();
211+
let computed_solution = resolve(&dependency_provider, "a", 0u32).unwrap();
212212
assert_eq!(expected_solution, computed_solution);
213213
}
214214

@@ -217,15 +217,15 @@ fn confusing_with_lots_of_holes() {
217217
let mut dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
218218

219219
// root depends on foo...
220-
dependency_provider.add_dependencies("root", 1, vec![("foo", Range::full())]);
220+
dependency_provider.add_dependencies("root", 1u32, vec![("foo", Range::full())]);
221221

222222
for i in 1..6 {
223223
// foo depends on bar...
224224
dependency_provider.add_dependencies("foo", i as u32, vec![("bar", Range::full())]);
225225
}
226226

227227
let Err(PubGrubError::NoSolution(mut derivation_tree)) =
228-
resolve(&dependency_provider, "root", 1)
228+
resolve(&dependency_provider, "root", 1u32)
229229
else {
230230
unreachable!()
231231
};

0 commit comments

Comments
 (0)