Как идиоматически преобразовать bool в Option или Result in Rust? - PullRequest
0 голосов
/ 23 февраля 2019

Кажется, нет способа такого однострочного преобразования с использованием std.

Мне не нравится этот вид многословия:

match my_bool {
    true => Ok(()),
    false => Err(MyError::False),
}

Я хотел бы использовать некоторыевид одной строки, например:

let my_bool = true;
let my_option = my_bool.to_option(MyObject{}); // true => MyObject{}, false => None
let my_result = my_bool.to_result(MyObject{}, MyError{}); // true => MyObject{}, false => MyError{}

Какой самый короткий фрагмент кода делает это?

1 Ответ

0 голосов
/ 23 февраля 2019

Существует boolinator ящик .Он определяет признак расширения Boolinator для bool, который добавляет пару полезных методов.Пример:

use boolinator::Boolinator;

my_bool.as_some(MyObject {});                // Option<MyObject>
my_bool.as_result(MyObject {}, MyError {});  // Result<MyObject, MyError>

A true приводит к Some(_) или Ok(_), а значение false ведет к None или Err(_).

Существует проблема с добавлением подобной функциональности к std в хранилище RFC, но не похоже, что это произойдет в ближайшее время.

...