mrjbom
@mrjbom

Элегантный способ парсинга и обработки ошибок?

В коде паршу SocketAddrV4 из String и хочу с случае ошибки парсинга вернуть ошибку из функции
pub fn build_server_config(&self) -> Result<Config, ConfigError> {
    let socket_addr_v4 = self.socket_addr.parse::<SocketAddrV4>();
    if let Err(error) = socket_addr_v4 {
        return Err(ConfigError::WrongSocketAddr(error));
    }
    let socket_addr_v4 = socket_addr_v4.unwrap();
}

pub enum ConfigError {
    WrongSocketAddr(AddrParseError)
}


Есть ли способ делать это более компактно? Вероятно я хочу видеть что-то в функциональном виде, например с помощью замыканий это делать, но я не нашёл подходящих методов у Result.
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
@0x0f80
Например метод map_err. Статейка
pub fn build_server_config(&self) -> Result<Config, ConfigError> {
    let socket_addr_v4 = self.socket_addr.parse::<SocketAddrV4>()
        .map_err(ConfigError::WrongSocketAddr)?;
    Ok(Config {
        // инициализация полей Config
    })
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы