Recorte eficiente de una cadena

Tengo un archivo en formato csv con una primera columna de datos que representa el código del artículo opcionalmente terminado con"UNIUNI" o caso mixto de estos caracteres, cargados por medio de un lector de código de barras. Necesito recortar el último"UNI"s.

En Rust intenté escribir con éxito parcial una función esencialmente como esta:

fn main() {
    // Ok: from "9846UNIUNI" to "9846"
    println!("{}", read_csv_rilev("9846UNIUNI".to_string()));

    // Wrong: from "9846uniuni" to "9846"
    println!("{}", read_csv_rilev("9846uniuni".to_string()));
}

fn read_csv_rilev(code: String) -> String {
    code
        //.to_uppercase() /*Unstable feature in Rust 1.1*/
        .trim_right_matches("UNI")
        .to_string()
}

La firma de la función ideal se ve así:

fn read_csv_rilev(mut s: &String) {/**/}

pero probablemente una acción en el lugar en una cadena no es una buena idea. De hecho, en la biblioteca estándar de Rust no hay nada que hacer, exceptoString::pop().

¿Hay alguna manera de aplicar el recorte en una Cadena sin asignar otra?

Respuestas a la pregunta(3)

Su respuesta a la pregunta