Por que a variável não vive por tempo suficiente?

Considere esta função que deve retornar a extensão do arquivo de um determinadoPath.

pub fn get_extension<'a>(path: &'a Path) -> Option<&'a str> {
    let path_str = path.as_str().unwrap();
    let ext_pos = regex!(".[a-z0-9]+$").find(path_str);

    match ext_pos {
        Some((start, _)) => {
            return Some(path_str.as_slice().slice_from(start))
        },
        None => return None
    }
}

A mensagem de erro é a seguinte:

`path_str` does not live long enough

A mensagem de erro é bastante clara e é uma pena que eu não possa resolver sozinha. Eu entendo isso em teoria, mas ainda existem algumas coisas borradas para mim.

Eu entendo que o compilador quer me dizer quepath_str não vive o suficiente para ser válido, pois o valor de retorno com é marcado com a vida útil'a.

Mas é aqui que para para mim:

Eu entendo que a referência apath (o parâmetro de entrada) deve durar exatamente enquanto a referência aostr embrulhado noOption (o parâmetro de saída)

desde que voltamosSome(path_str.as_slice().slice_from(start)) Presumo que, na prática, isso significa quepath_str precisa viver o tempo quepath.

O que eu não entendo éporque exatamente fazpath_str não viver o suficiente e como eu poderia consertar isso? O que faz morrer logo?

ATUALIZAR

Conforme apontado nos comentários e também no IRC, removendo os resíduos supérfluosas_slice() faz o código compilar. Alguém sabe por que isso é? Também foi apontado que existe umamétodo para obter a extensão diretamente. Mas sim, na verdade, estou mais interessado em aprender a história por trás do problema.

questionAnswers(1)

yourAnswerToTheQuestion