result_type 0.2.0 result_type: ^0.2.0 copied to clipboard
Result Type for Dart.
Result Type for Dart
Content #
Features #
Result is a type that represents either Success or Failure.
Inspired by functional programming, Rust and Swift.
Requirements #
- Dart: 2.17.3+
Install #
dependencies:
result_type: ^0.2.0
Example #
The detailed example can be found at result_type/example/example.dart.
import 'dart:async';
import 'dart:convert';
import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:result_type/result_type.dart';
void main() async {
final random = Random();
final client = http.Client();
final result = await getPhotos(client);
/// Do something with successful operation results or handle an error.
if (result.isSuccess) {
print('Photos Items: ${result.success}');
} else {
print('Error: ${result.failure}');
}
/// Apply transformation to successful operation results or handle an error.
if (result.isSuccess) {
final items = result.map((i) => i.where((j) => j.title.length > 60)).success;
print('Number of Long Titles: ${items.length}');
} else {
print('Error: ${result.failure}');
}
/// In this example, note the difference in the result of using `map` and
/// `flatMap` with a transformation that returns an result type.
Result<int, Error> getNextInteger() => Success(random.nextInt(4));
Result<int, Error> getNextAfterInteger(int n) => Success(random.nextInt(n + 1));
final nextIntegerNestedResults = getNextInteger().map(getNextAfterInteger);
print(nextIntegerNestedResults.runtimeType);
/// `Prints`: Success<Result<int, Error>, dynamic>
final nextIntegerUnboxedResults = getNextInteger().flatMap(getNextAfterInteger);
print(nextIntegerUnboxedResults.runtimeType);
/// `Prints`: Success<int, Error>
/// Use completion handler / callback style API if you want to.
await getPhotos(client)
..result((photos) {
print('Photos: $photos');
}, (error) {
print('Error: $error');
});
}
To see examples of the following package in action:
cd example && dart run
Support #
Post issues and feature requests on the GitHub issue tracker.
License #
The source code is distributed under the MIT license. See the LICENSE file for more info.