Определить время жизни для ассоциативного типа без ограничения времени жизни

Я реализую FromStr для типа и для ошибки, которую хочу вернуть переданное &str внутри структуры-обертки. Однако для этого требуется, чтобы структура имела ограниченное время жизни для &str, но это приведет к ошибкам внутри FromStr, поскольку ее ассоциативный тип Err не имеет никаких ограничений времени жизни и не может быть изменен. Наконец, невозможно добавить время жизни, привязанное к impl, поскольку время жизни ничем не ограничено, по крайней мере, теми способами, которые я пробовал. Итак, как мне втиснуть свою обертку в ассоциативный тип?

Для большего контекста вот определения:

pub enum RarityTag {
    // ...
}

pub struct ParseRarityTagError<'a>(&'a str);

impl FromStr for RarityTag {
    type Err = ParseRarityTagError<'a>;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            // ...
            rest => Err(ParseRarityTagError(rest)),
        }
    }
}
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
3
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете вернуть ошибку со временем жизни, привязанным к строке, которую вам дает FromStr::from_str. Эта черта не была предназначена для этого. Для поддержки этого пришлось бы определить общий связанный тип с параметром времени жизни, но этого не происходит.

Вам нужна либо другая схема ошибок, которая не зависит от времени жизни, либо использовать встроенный метод/свободную функцию, а не черту Err.

Выделение строки при ошибке, вероятно, совершенно нормально. Это не идеально, но если вы не ожидаете, что вам придется идти по этому пути слишком часто, вам следует пойти по этому пути. Вы всегда можете изменить его позже.

kalkronline 12.07.2024 01:27

@kalkronline Да, мне пока придется это сделать. К сожалению, он будет использоваться для анализа компонентов довольно большого файла, но, думаю, мне придется поискать что-то более специализированное при дальнейшей оптимизации производительности. Спасибо за быстрый ответ @kmdreko!

Tobiky 12.07.2024 10:55

Другие вопросы по теме