nidula 0.5.0 nidula: ^0.5.0 copied to clipboard
A lightweight Dart library for Rust-like Option/Result types. Supports exhaustive pattern matching and compile-time safe, chainable None/Err propagation.
import 'dart:math';
import 'package:nidula/nidula.dart';
/// The following is a simple Err propagation example.
Result<double, String> divideBy2WithErrPropagation(Result<double, String> r) {
return Result.syncTryScope<double, String>((et) {
return Ok(r.try_(et) / 2);
});
}
void main() {
print('#1: ${divideBy2WithErrPropagation(Err('s'))}'); // #1: Err(s)
print('#2: ${divideBy2WithErrPropagation(Ok(14))}'); // #2: Ok(7.0)
// the next example uses error propagation: there is a 50% chance `make`
// propagates an Err, and 50% that it returns an Ok.
print(Result.syncTryScope<I, String>((et) {
return Ok(
Ok<I, String>(I()).try_(et).make().try_(et).make().try_(et),
);
})); // either `Err(unfortunate)` or `Ok(Instance of 'I')`
}
class I {
Result<I, String> make() {
if (Random().nextBool()) {
return Ok(I());
}
return Err('unfortunate');
}
}