nidula 0.5.0 copy "nidula: ^0.5.0" to clipboard
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.

example/nidula_example.dart

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');
  }
}
6
likes
0
pub points
5%
popularity

Publisher

verified publishermanuelplavsic.ch

A lightweight Dart library for Rust-like Option/Result types. Supports exhaustive pattern matching and compile-time safe, chainable None/Err propagation.

Repository (GitLab)
View/report issues

Topics

#option #result #pattern-matching #rust-try-operator

License

unknown (license)

More

Packages that depend on nidula