Crates.io | dep-res |
lib.rs | dep-res |
version | 0.1.0 |
source | src |
created_at | 2023-05-19 15:54:08.030114 |
updated_at | 2023-05-19 15:54:08.030114 |
description | Simple dependency resolution |
homepage | |
repository | https://github.com/2A5F/dep-res |
max_upload_size | |
id | 868934 |
size | 11,467 |
Simple dependency resolution
#[derive(Debug)]
struct SimpleDep {
pub id: usize,
pub deps: Vec<usize>,
}
impl DepMeta for SimpleDep {
type Id = usize;
fn get_id(&self) -> Self::Id {
self.id
}
fn get_deps(&self) -> &[Self::Id] {
&*self.deps
}
}
let items = vec![
SimpleDep {
id: 0,
deps: vec![],
},
SimpleDep {
id: 1,
deps: vec![0],
},
SimpleDep {
id: 2,
deps: vec![],
},
SimpleDep {
id: 3,
deps: vec![],
},
SimpleDep {
id: 4,
deps: vec![3],
},
SimpleDep {
id: 5,
deps: vec![4],
},
];
let mut dr = DepRes::new();
dr.add(&items);
let r = dr.resolve().unwrap();
let items = r.sorted_by_level();
println!("{:?}", items);
// [0, 2, 3, 1, 4, 5]
let levels = r.iter_level().collect::<Vec<_>>();
println!("{:?}", levels);
// // example, actually unordered
//
// [
// DepLevel { level: 0, deps: {0: (), 2: (), 3: ()} },
// DepLevel { level: 1, deps: {1: (), 4: ()} },
// DepLevel { level: 2, deps: {5: ()} },
// ]