O valor emprestado não dura tempo suficiente ao criar um Vec

Nota do editor: Esta pergunta foi feita antes do Rust 1.0. Desde então, muitas funções e tipos foram alterados, assim como certas semânticas de idiomas. O código na pergunta não é mais válido, mas as idéias expressas nas respostas podem ser.

Estou tentando listar os arquivos em um diretório e copiar o nome do arquivo para o meu próprioVec. Eu tentei várias soluções, mas sempre acaba com o problema de não conseguir criar variáveis vivas por tempo suficiente. Eu não entendo meu erro.

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 que o compilador reclama de "x"? Eu não ligo para x, quero o&str dentro e pensei&str eram estáticos.

Tentei dessa maneira, mas obtive o mesmo resultado com o compilador queixando-se de que "caminhos" não são suficientes.

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;
}

Aqui estáO parquinho.

questionAnswers(2)

yourAnswerToTheQuestion