feature_set/
lib.rs

1//! Tracks features provided/required by a library.
2//!
3//! Example:
4//! ```
5//! # use feature_set::{Action, add_provide, del_provide, FeatureSet, Provide};
6//! const PROVIDED: &[Action<Provide>] = &[
7//!     add_provide(("foo", 0), "2012-02-21", (1, 2, 3)),
8//!     add_provide(("foo", 1), "2012-02-22", (1, 2, 3)),
9//!     add_provide(("bar", 1), "2012-03-21", (1, 2, 4)),
10//!     del_provide(("foo", 0), "2012-04-21", (1, 2, 5)),
11//! ];
12//!
13//! let fs = FeatureSet::from_provides(PROVIDED);
14//! assert_eq!("bar:v1, foo:v1", fs.to_string());
15//! ```
16
17mod action;
18mod feature;
19mod feature_set;
20mod provide;
21mod require;
22mod since;
23
24pub use crate::action::Action;
25pub use crate::feature::Feature;
26pub use crate::feature_set::FeatureSet;
27pub use crate::provide::Provide;
28pub use crate::require::Require;
29pub use crate::since::Since;
30
31#[cfg(test)]
32mod tests;
33
34/// Create an `Add a new provided feature` action.
35pub const fn add_provide(
36    name_ver: (&'static str, u64),
37    since_date: &'static str,
38    since_ver: (u64, u64, u64),
39) -> Action<Provide> {
40    Action::Add(Provide {
41        feature: Feature::new(name_ver, since_date, since_ver),
42    })
43}
44
45/// Create a `Remove a provided feature` action.
46pub const fn del_provide(
47    name_ver: (&'static str, u64),
48    date: &'static str,
49    ver: (u64, u64, u64),
50) -> Action<Provide> {
51    Action::Delete(Provide {
52        feature: Feature::new(name_ver, date, ver),
53    })
54}
55
56pub const fn add_require(
57    name: (&'static str, u64),
58    date: &'static str,
59    ver: (u64, u64, u64),
60) -> Action<Require> {
61    Action::Add(Require {
62        optional: false,
63        feature: Feature::new(name, date, ver),
64    })
65}
66
67pub const fn del_require(
68    name: (&'static str, u64),
69    date: &'static str,
70    ver: (u64, u64, u64),
71) -> Action<Require> {
72    Action::Delete(Require {
73        optional: false,
74        feature: Feature::new(name, date, ver),
75    })
76}
77
78pub const fn add_optional(
79    name: (&'static str, u64),
80    date: &'static str,
81    ver: (u64, u64, u64),
82) -> Action<Require> {
83    Action::Add(Require {
84        optional: true,
85        feature: Feature::new(name, date, ver),
86    })
87}