in guppy/src/graph/build.rs [681:724]
fn new<'a>(
from_id: &PackageId,
name: &str,
resolved_name: &str,
deps: impl IntoIterator<Item = &'a Dependency>,
) -> Result<Self, Error> {
let mut version_req = None;
let mut normal = DependencyReqImpl::default();
let mut build = DependencyReqImpl::default();
let mut dev = DependencyReqImpl::default();
for dep in deps {
// Dev dependencies cannot be optional.
if dep.kind == DependencyKind::Development && dep.optional {
return Err(Error::PackageGraphConstructError(format!(
"for package '{}': dev-dependency '{}' marked optional",
from_id, name,
)));
}
// Pick the first version req that this come across.
if version_req.is_none() {
version_req = Some(dep.req.clone());
}
match dep.kind {
DependencyKind::Normal => normal.add_instance(from_id, dep)?,
DependencyKind::Build => build.add_instance(from_id, dep)?,
DependencyKind::Development => dev.add_instance(from_id, dep)?,
_ => {
// unknown dependency kind -- can't do much with this!
continue;
}
};
}
Ok(Self {
dep_name: name.into(),
resolved_name: resolved_name.into(),
version_req: version_req.expect("at least one dependency instance"),
normal,
build,
dev,
})
}