toResult method
Transforms a Record of Result functions into a single Result. The Ok value is a Record of all Result's Ok values. The Err value is first function that evaluates to an Err.
Instead of writing code like this
final a, b, c;
final boolResult = boolOk();
switch(boolResult){
case Ok(:final ok):
a = ok;
case Err():
return boolResult;
}
final intResult = intOk();
switch(intResult){
case Ok(:final ok):
b = ok;
case Err():
return intResult;
}
final doubleResult = doubleOk();
switch(doubleResult){
case Ok(:final ok):
c = ok;
case Err():
return doubleResult;
}
You can now write it like this
final a, b, c;
switch((boolOk, intOk, doubleOk).toResult()){
case Ok(:final ok):
(a, b, c) = ok;
case Err():
throw Exception();
}
Implementation
Result<(A, B), Z> toResult() {
A a;
final aResult = $1();
if (aResult.isOk()) {
a = aResult.unwrap();
} else {
return aResult.intoUnchecked();
}
B b;
final bResult = $2();
if (bResult.isOk()) {
b = bResult.unwrap();
} else {
return bResult.intoUnchecked();
}
return Ok((a, b));
}