Есть ли макрос для преобразования ошибки в панику?

Есть ли макрос, который превратит ошибку в панику, как макрос try? Нужно ли мне определять свое собственное?

Например, я бы хотел паниковать, если модульный тест не может открыть файл. Мой текущий обходной путь таков:

macro_rules! tryfail {
    ($expr:expr) => (match $expr {
        result::Result::Ok(val) => val,
        result::Result::Err(_) => panic!(stringify!($expr))
    })
}

#[test]
fn foo() {
    let c = tryfail!(File::open(...));
}

person laktak    schedule 08.06.2016    source источник
comment
Я думаю, что функция expect - это то, что вы ищете, хотя это не макрос   -  person user25064    schedule 08.06.2016


Ответы (1)


Именно для этого используются методы Result::unwrap и Result::expect сделать.

Я знаю, что вы запрашиваете макрос, но я думаю, что ваш вариант использования может быть выполнен с помощью метода unwrap:

#[test]
fn foo() {
    let c = File::open(...).unwrap();
    // vs
    let c = tryfail!(File::open(...));
}

Обратите внимание, что в коде, который не является тестовым, он более идиоматичен, чтобы использовать expect.

Если вам действительно нужен макрос, вы можете написать его, используя unwrap.

person malbarbo    schedule 08.06.2016
comment
Обратите внимание, что Option::expect и _ 2_. - person Shepmaster; 08.06.2016