in cargo-guppy/src/mv.rs [407:449]
fn apply_edit(table: &mut Table, edit: &ManifestEdit<'_>) -> Result<()> {
static SECTION_NAMES: &[&str] = &["dependencies", "build-dependencies", "dev-dependencies"];
let dep_name = edit.link.dep_name();
for §ion_name in SECTION_NAMES {
let section = &mut table[section_name];
let section_table = match section {
Item::None => {
// This section is empty -- skip it.
continue;
}
Item::Table(table) => table,
Item::Value(_) | Item::ArrayOfTables(_) => {
bail!("section [{}] is not a table", section_name);
}
};
match section_table.get_mut(dep_name) {
Some(item) => {
let dep_table = item.as_table_like_mut().ok_or_else(|| {
eyre!("in section [{}], {} is not a table", section_name, dep_name)
})?;
// The dep table should have a path entry.
match dep_table.get_mut("path") {
Some(Item::Value(value)) => {
replace_decorated(value, edit.edit_path.as_str());
}
_ => {
bail!(
"in section [{}], {}.path is not a string",
section_name,
dep_name
);
}
}
}
None => continue,
}
}
Ok(())
}