¿Cómo actualizar-o-insertar en un Vec?

Estoy escribiendo una estructura de datos en Rust. Contiene unVec&nbsp;de pares clave-valor. Al insertar en la estructura, necesito encontrar una clave coincidente y actualizar tanto la clave como el valor (que en realidad es un puntero secundario). El código se parece un poco a esto, dondepivots&nbsp;es unref mut&nbsp;aVec<Pivot>&nbsp;yPivot&nbsp;es solo una estructura con dos campos:

match pivots.iter_mut().find(|ref p| key <= p.min_key) { // first mutable borrow
    Some(ref mut pivot) => {
        // If there is one, insert into it and update the pivot key
        pivot.min_key = key;
        pivot.child.insert(key, value) // recursive call
    },
    // o/w, insert a new leaf at the end
    None => pivots.push(Pivot /* ... */) // second mutable borrow
}

Pero hay un problema. Aunque no uso el iterador mutable en el segundo brazo delmatch, el verificador de préstamos se queja de que "no puedo pedir prestado*pivots&nbsp;como mutable más de una vez a la vez ".

Esto tiene mucho sentido para mí, porque el primer préstamo todavía está en el alcance, a pesar de que no se utiliza en ese casomatch. Es un poco incómodo: un corrector más inteligente ciertamente podría decir que los préstamos no se superponen. He visto a alguien en línea que aconseja utilizar el retorno temprano para evitar el problema, como este:

match pivots.iter_mut().find(|ref p| key <= p.min_key) {
    Some(ref mut pivot) => {
        pivot.min_key = key;
        pivot.child.insert(key, value);
        return
    },
    None => ()
};
pivots.push(Pivot /* ... */)

pero esto parece difícil de entender, especialmente cuando significa dividir este código en su propia función para permitirreturn. ¿Hay alguna forma más idiomática de realizar la operación de actualización o inserción?