use pubgrub::{
DefaultStringReporter, OfflineDependencyProvider, PubGrubError, Ranges, Reporter,
SemanticVersion, resolve,
};
type SemVS = Ranges<SemanticVersion>;
#[rustfmt::skip]
fn main() {
let mut dependency_provider = OfflineDependencyProvider::<&str, SemVS>::new();
dependency_provider.add_dependencies("root", (1, 0, 0), [
("menu", Ranges::full()),
("icons", Ranges::singleton((1, 0, 0))),
("intl", Ranges::singleton((5, 0, 0))),
]);
dependency_provider.add_dependencies("menu", (1, 0, 0), [
("dropdown", Ranges::from_range_bounds(..(2, 0, 0))),
]);
dependency_provider.add_dependencies("menu", (1, 1, 0), [
("dropdown", Ranges::from_range_bounds((2, 0, 0)..)),
]);
dependency_provider.add_dependencies("menu", (1, 2, 0), [
("dropdown", Ranges::from_range_bounds((2, 0, 0)..)),
]);
dependency_provider.add_dependencies("menu", (1, 3, 0), [
("dropdown", Ranges::from_range_bounds((2, 0, 0)..)),
]);
dependency_provider.add_dependencies("menu", (1, 4, 0), [
("dropdown", Ranges::from_range_bounds((2, 0, 0)..)),
]);
dependency_provider.add_dependencies("menu", (1, 5, 0), [
("dropdown", Ranges::from_range_bounds((2, 0, 0)..)),
]);
dependency_provider.add_dependencies("dropdown", (1, 8, 0), [
("intl", Ranges::singleton((3, 0, 0))),
]);
dependency_provider.add_dependencies("dropdown", (2, 0, 0), [
("icons", Ranges::singleton((2, 0, 0))),
]);
dependency_provider.add_dependencies("dropdown", (2, 1, 0), [
("icons", Ranges::singleton((2, 0, 0))),
]);
dependency_provider.add_dependencies("dropdown", (2, 2, 0), [
("icons", Ranges::singleton((2, 0, 0))),
]);
dependency_provider.add_dependencies("dropdown", (2, 3, 0), [
("icons", Ranges::singleton((2, 0, 0))),
]);
dependency_provider.add_dependencies("icons", (1, 0, 0), []);
dependency_provider.add_dependencies("icons", (2, 0, 0), []);
dependency_provider.add_dependencies("intl", (3, 0, 0), []);
dependency_provider.add_dependencies("intl", (4, 0, 0), []);
dependency_provider.add_dependencies("intl", (5, 0, 0), []);
match resolve(&dependency_provider, "root", (1, 0, 0)) {
Ok(sol) => println!("{sol:?}"),
Err(PubGrubError::NoSolution(mut derivation_tree)) => {
derivation_tree.collapse_no_versions();
eprintln!("{}", DefaultStringReporter::report(&derivation_tree));
}
Err(err) => panic!("{err:?}"),
};
}