Почему переменная не живет достаточно долго?

Рассмотрим эту функцию, которая должна возвращать расширение файла данногоPath.

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

Сообщение об ошибке выглядит следующим образом:

`path_str` does not live long enough

Сообщение об ошибке довольно ясно, и это позор, я не могу решить это самостоятельно. Я понимаю это в теории, но есть еще несколько размытых вещей для меня.

Я понимаю, что компилятор хочет сказать мне, чтоpath_str не живет достаточно долго, чтобы быть действительным, так как возвращаемое значение с помечается как время жизни'a.

Но это то, где это останавливается для меня:

Я понимаю, что ссылка наpath (входной параметр) должен жить ровно столько, сколько ссылка наstr это завернуто вOption (выходной параметр)

так как мы вернемсяSome(path_str.as_slice().slice_from(start)) Я предполагаю, что на практике это означает, чтоpath_str нужно жить так долго, какpath.

Что я не понимаю, так этопочему именно делаетpath_str не прожить достаточно долго и как я могу это исправить? Что заставляет его скоро умереть?

ОБНОВИТЬ

Как указано в комментариях, а также на IRC, удалив лишнееas_slice() делает код компилируемым Кто-нибудь знает, почему это так? Было также отмечено, что существуетметод чтобы получить расширение напрямую. Но да, я на самом деле больше интересуюсь изучением истории проблемы.

Ответы на вопрос(1)

Ваш ответ на вопрос