in src/serialization.rs [227:263]
fn try_from(value: AllPolicies) -> Result<Self, Self::Error> {
let mut policy = Policy::default();
for (name, entry) in value.0 {
match name.split_once(VERSION_SEPARATOR) {
Some((crate_name, crate_version)) => {
match policy
.package
.entry(crate_name.to_owned())
.or_insert_with(|| PackagePolicyEntry::Versioned {
version: Default::default(),
}) {
PackagePolicyEntry::Versioned { version } => {
version.insert(crate_version.parse()?, entry);
}
PackagePolicyEntry::Unversioned(_) => {
return Err(FromAllPoliciesError::MixedVersioning {
name: crate_name.to_owned(),
});
}
}
}
None => {
if policy
.package
.insert(name.clone(), PackagePolicyEntry::Unversioned(entry))
.is_some()
{
// The entry _must_ have been `PackagePolicyEntry::Versioned`, because
// if it were unversioned there would be no way for more than one entry
// to exist in the AllPolicies map.
return Err(FromAllPoliciesError::MixedVersioning { name });
}
}
}
}
Ok(policy)
}