El valor prestado no dura lo suficiente al crear un Vec

Nota del editor: esta pregunta se hizo antes de Rust 1.0. Desde entonces, muchas funciones y tipos han cambiado, al igual que ciertas semánticas del lenguaje. El código en la pregunta ya no es válido, pero las ideas expresadas en las respuestas pueden serlo.

Estoy tratando de enumerar los archivos en un directorio y copiar el nombre del archivo a mi propioVec. He intentado varias soluciones, pero siempre termina con el problema de no poder crear variables vivas lo suficientemente largas. No entiendo mi error.

fn getList(action_dir_path : &str) -> Vec<&str> {
    let v = fs::readdir(&Path::new(action_dir_path))
            .unwrap()
            .iter()
            .map(|&x| x.filestem_str().unwrap())
            .collect();
    return v;
}

¿Por qué el compilador se queja de "x"? No me importa x, quiero el&str dentro y pensé&str fueron estáticos

Lo intenté de esta manera, pero obtuve el mismo resultado con el compilador quejándose de que los "caminos" no viven lo suficiente.

fn getList2(action_dir_path : &str) -> Vec<&str> {
    let paths = fs::readdir(&Path::new(action_dir_path)).unwrap();
    let mut v : Vec<&str> = Vec::new();

    for path in paths.iter(){
       let aSlice = path.filestem_str().unwrap();
       v.push(aSlice);
    }

    return v;
}

Aquí estáEl patio de la escuela.

Respuestas a la pregunta(2)

Su respuesta a la pregunta