Skip to content
This repository was archived by the owner on Oct 17, 2024. It is now read-only.

Commit b2118ce

Browse files
committed
Add methods to Result. Bump version to 2.0 and remove deprecated features.
[email protected] Review-Url: https://codereview.chromium.org//2996143002 .
1 parent 643ef1a commit b2118ce

20 files changed

+522
-222
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## 2.0.0
2+
* Remove deprecated public `result.dart` and `stream_zip.dart` libraries and
3+
deprecated classes `ReleaseStreamTransformer` and `CaptureStreamTransformer`.
4+
5+
* Add `captureAll` and `flattenList` static methods to `Result`.
6+
7+
* Change `ErrorResult` to not be generic and always be a `Result<Null>`.
8+
That makes an error independent of the type of result it occurs instead of.
9+
110
## 1.13.3
211

312
* Make `TypeSafeStream` extend `Stream` instead of implementing it. This ensures

lib/async.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ export "src/future_group.dart";
1717
export "src/lazy_stream.dart";
1818
export "src/null_stream_sink.dart";
1919
export "src/restartable_timer.dart";
20-
export "src/result.dart";
21-
export "src/result/capture_transformer.dart";
20+
export "src/result/result.dart";
2221
export "src/result/error.dart";
2322
export "src/result/future.dart";
24-
export "src/result/release_transformer.dart";
2523
export "src/result/value.dart";
2624
export "src/single_subscription_transformer.dart";
2725
export "src/stream_completer.dart";

lib/result.dart

Lines changed: 0 additions & 13 deletions
This file was deleted.

lib/src/result.dart

Lines changed: 0 additions & 150 deletions
This file was deleted.

lib/src/result/capture_sink.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44

55
import 'dart:async';
66

7-
import '../result.dart';
7+
import 'result.dart';
88

9-
/// Use [Result.captureSinkTransformer].
10-
@Deprecated("Will be removed in async 2.0.0.")
9+
/// Used by [Result.captureSink].
1110
class CaptureSink<T> implements EventSink<T> {
12-
final EventSink _sink;
11+
final EventSink<Result<T>> _sink;
1312

1413
CaptureSink(EventSink<Result<T>> sink) : _sink = sink;
1514

lib/src/result/capture_transformer.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@
44

55
import 'dart:async';
66

7-
import '../result.dart';
7+
import 'result.dart';
88
import 'capture_sink.dart';
99

1010
/// A stream transformer that captures a stream of events into [Result]s.
1111
///
1212
/// The result of the transformation is a stream of [Result] values and no
13-
/// error events. This is the transformer used by [captureStream].
14-
@Deprecated("Will be removed in async 2.0.0.")
13+
/// error events. Exposed by [Result.captureStream].
1514
class CaptureStreamTransformer<T> implements StreamTransformer<T, Result<T>> {
1615
const CaptureStreamTransformer();
1716

1817
Stream<Result<T>> bind(Stream<T> source) {
1918
return new Stream<Result<T>>.eventTransformed(source, _createSink);
2019
}
2120

22-
static EventSink _createSink(EventSink<Result> sink) {
23-
return new CaptureSink(sink);
24-
}
21+
// Since Stream.eventTransformed is not generic, this method can be static.
22+
static EventSink _createSink(EventSink<Result> sink) => new CaptureSink(sink);
2523
}

lib/src/result/error.dart

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@
44

55
import 'dart:async';
66

7-
import '../result.dart';
7+
import 'result.dart';
88
import 'value.dart';
99

1010
/// A result representing a thrown error.
11-
class ErrorResult<T> implements Result<T> {
11+
class ErrorResult implements Result<Null> {
12+
/// The error object that was thrown.
1213
final error;
14+
15+
/// The stack trace corresponding to where [error] was thrown.
1316
final StackTrace stackTrace;
1417

1518
bool get isValue => false;
1619
bool get isError => true;
17-
ValueResult<T> get asValue => null;
18-
ErrorResult<T> get asError => this;
20+
ValueResult<Null> get asValue => null;
21+
ErrorResult get asError => this;
1922

2023
ErrorResult(this.error, this.stackTrace);
2124

@@ -27,7 +30,7 @@ class ErrorResult<T> implements Result<T> {
2730
sink.addError(error, stackTrace);
2831
}
2932

30-
Future<T> get asFuture => new Future.error(error, stackTrace);
33+
Future<Null> get asFuture => new Future<Null>.error(error, stackTrace);
3134

3235
/// Calls an error handler with the error and stacktrace.
3336
///
@@ -42,4 +45,12 @@ class ErrorResult<T> implements Result<T> {
4245
errorHandler(error);
4346
}
4447
}
48+
49+
int get hashCode => error.hashCode ^ stackTrace.hashCode ^ 0x1d61823f;
50+
51+
/// This is equal only to an error result with equal [error] and [stackTrace].
52+
bool operator ==(Object other) =>
53+
other is ErrorResult &&
54+
error == other.error &&
55+
stackTrace == other.stackTrace;
4556
}

lib/src/result/future.dart

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import 'dart:async';
66

77
import '../delegate/future.dart';
8-
import '../result.dart';
8+
import 'result.dart';
99

1010
/// A [Future] wrapper that provides synchronous access to the result of the
1111
/// wrapped [Future] once it's completed.
@@ -19,15 +19,9 @@ class ResultFuture<T> extends DelegatingFuture<T> {
1919
Result<T> get result => _result;
2020
Result<T> _result;
2121

22-
factory ResultFuture(Future<T> future) {
23-
ResultFuture<T> resultFuture;
24-
resultFuture = new ResultFuture._(() async {
25-
var result = await Result.capture(future);
26-
resultFuture._result = result;
27-
return await result.asFuture;
28-
}());
29-
return resultFuture;
22+
ResultFuture(Future<T> future) : super(future) {
23+
Result.capture(future).then((result) {
24+
_result = result;
25+
});
3026
}
31-
32-
ResultFuture._(Future<T> future) : super(future);
3327
}

lib/src/result/release_sink.dart

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,16 @@
44

55
import 'dart:async';
66

7-
import '../result.dart';
7+
import 'result.dart';
88

9-
/// Use [Result.captureSinkTransformer].
10-
@Deprecated("Will be removed in async 2.0.0.")
9+
/// Used by [Result.releaseSink].
1110
class ReleaseSink<T> implements EventSink<Result<T>> {
1211
final EventSink _sink;
1312

1413
ReleaseSink(EventSink<T> sink) : _sink = sink;
1514

1615
void add(Result<T> result) {
17-
if (result.isValue) {
18-
_sink.add(result.asValue.value);
19-
} else {
20-
var error = result.asError;
21-
_sink.addError(error.error, error.stackTrace);
22-
}
16+
result.addTo(_sink);
2317
}
2418

2519
void addError(Object error, [StackTrace stackTrace]) {

lib/src/result/release_transformer.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,17 @@
44

55
import 'dart:async';
66

7-
import '../result.dart';
7+
import 'result.dart';
88
import 'release_sink.dart';
99

10-
/// Use [Result.releaseTransformer] instead.
11-
@Deprecated("Will be removed in async 2.0.0.")
10+
/// A transformer that releases result events as data and error events.
1211
class ReleaseStreamTransformer<T> implements StreamTransformer<Result<T>, T> {
1312
const ReleaseStreamTransformer();
1413

1514
Stream<T> bind(Stream<Result<T>> source) {
1615
return new Stream<T>.eventTransformed(source, _createSink);
1716
}
1817

19-
static EventSink<Result> _createSink(EventSink sink) {
20-
return new ReleaseSink(sink);
21-
}
18+
// Since Stream.eventTransformed is not generic, this method can be static.
19+
static EventSink<Result> _createSink(EventSink sink) => new ReleaseSink(sink);
2220
}

0 commit comments

Comments
 (0)