fn apply_edit()

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 &section_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(())
}