¿Cómo puedo actualizar una referencia mutable en un bucle?

¿Cómo puedo actualizar una referencia mutable en un bucle?

Estoy tratando de implementar un árbol Trie/Prefix en Rust y tengo problemas con el comprobador de préstamos. Aquí está mi implementación hasta ahora y recibo un error cuando llamo a children.insert.

no se puede tomar prestado *children como mutable porque también se toma prestado como inmutable

use std::collections::HashMap;

#[derive(Clone, Debug)]
struct PrefixTree {
    value: String,
    children: HashMap<char, PrefixTree>
}

fn insert(mut tree: &mut PrefixTree, key: &str, value: String) {

    let mut children = &mut tree.children;

    for c in key.chars() {    
        if !children.contains_key(&c) {
            children.insert(c, PrefixTree {
                value: String::from(&value),
                children: HashMap::new()
            });
        }
        
        let subtree = children.get(&c);

        match subtree {
            Some(s) => {
                children = &mut s.children;
            },
            _ => {}
        }
    }
    tree.value = value;

}

fn main() {

    let mut trie = PrefixTree {
        value: String::new(),
        children: HashMap::new()
    };

    let words = vec!["Abc", "Abca"];

    for word in words.iter() {
        insert(&mut trie, word, String::from("TEST"));        
    }

    println!("{:#?}", trie);
}

Creo que este problema está relacionado con Recuperar una referencia mutable a un valor del árbol pero en mi caso necesito actualizar la referencia mutable y continuar con el bucle. Entiendo por qué recibo el error, ya que tomo prestada una referencia mutable dos veces, pero no sé cómo reescribir esto, así que no lo haré de esa manera.

Mostrar la mejor respuesta

Cuando esté haciendo varias cosas con una sola clave (como buscar o insertar y obtener) y se encuentre con problemas de préstamo, intente usar Entry API (a través de .entry()):

fn insert(mut tree: &mut PrefixTree, key: &str, value: String) {
    let mut children = &mut tree.children;

    for c in key.chars() {
        let tree = children.entry(c).or_insert_with(|| PrefixTree {
            value: String::from(&value),
            children: HashMap::new(),
        });

        children = &mut tree.children;
    }
    
    tree.value = value;
}

No estaba al tanto de la API de entrada. ¡Gracias por tu ayuda!