Using the pubgrub crate
The PubGrub algorithm works for any package type
implementing Clone + Eq + Hash + Debug + Display
,
and any version type implementing our Version
trait, defined as follows.
#![allow(unused)] fn main() { pub trait Version: Clone + Ord + Debug + Display { fn lowest() -> Self; fn bump(&self) -> Self; } }
The lowest()
trait method should return the lowest version existing,
and bump(&self)
should return the smallest version stricly
higher than the current one.
For convenience, we already provide the SemanticVersion
type,
which implements Version
for versions expressed as Major.Minor.Patch
.
We also provide the NumberVersion
implementation of Version
,
which is basically just a newtype for non-negative integers, 0, 1, 2, etc.
Note that the complete semver specification also involves pre-release and metadata tags, not handled in our
SemanticVersion
simple type.
Now that we know the Package
and Version
trait requirements,
let's explain how to actually use pubgrub
with a simple example.