Index: lib/src/result.dart |
diff --git a/lib/src/result.dart b/lib/src/result.dart |
index 482cf9baa435ae246f86713ceacf70223aaf9c87..393dcedd0da135ece88efda08c385eda9b82bdf7 100644 |
--- a/lib/src/result.dart |
+++ b/lib/src/result.dart |
@@ -72,20 +72,14 @@ abstract class Result<T> { |
factory Result.error(Object error, [StackTrace stackTrace]) => |
new ErrorResult(error, stackTrace); |
- // Helper functions. |
- static _captureValue(value) => new ValueResult(value); |
- static _captureError(error, stack) => new ErrorResult(error, stack); |
- static _release(Result v) { |
- if (v.isValue) return v.asValue.value; // Avoid wrapping in future. |
- return v.asFuture; |
- } |
- |
/// Capture the result of a future into a `Result` future. |
/// |
/// The resulting future will never have an error. |
/// Errors have been converted to an [ErrorResult] value. |
- static Future<Result> capture(Future future) { |
- return future.then(_captureValue, onError: _captureError); |
+ static Future<Result/*<T>*/> capture/*<T>*/(Future/*<T>*/ future) { |
+ return future.then((value) => new ValueResult(value), |
+ onError: (error, stackTrace) => |
+ new ErrorResult/*<T>*/(error, stackTrace)); |
} |
/// Release the result of a captured future. |
@@ -95,30 +89,23 @@ abstract class Result<T> { |
/// |
/// If [future] completes with an error, the returned future completes with |
/// the same error. |
- static Future release(Future<Result> future) { |
- return future.then(_release); |
- } |
+ static Future/*<T>*/ release/*<T>*/(Future<Result/*<T>*/> future) => |
+ future.then/*<Future<T>>*/((result) => result.asFuture); |
/// Capture the results of a stream into a stream of [Result] values. |
/// |
/// The returned stream will not have any error events. |
/// Errors from the source stream have been converted to [ErrorResult]s. |
- /// |
- /// Shorthand for transforming the stream using [captureStreamTransformer]. |
- static Stream<Result> captureStream(Stream source) { |
- return source.transform(captureStreamTransformer); |
- } |
+ static Stream<Result/*<T>*/> captureStream/*<T>*/(Stream/*<T>*/ source) => |
+ source.transform(new CaptureStreamTransformer/*<T>*/()); |
/// Release a stream of [result] values into a stream of the results. |
/// |
/// `Result` values of the source stream become value or error events in |
/// the returned stream as appropriate. |
/// Errors from the source stream become errors in the returned stream. |
- /// |
- /// Shorthand for transforming the stream using [releaseStreamTransformer]. |
- static Stream releaseStream(Stream<Result> source) { |
- return source.transform(releaseStreamTransformer); |
- } |
+ static Stream/*<T>*/ releaseStream/*<T>*/(Stream<Result/*<T>*/> source) => |
+ source.transform(new ReleaseStreamTransformer/*<T>*/()); |
/// Converts a result of a result to a single result. |
/// |
@@ -126,9 +113,10 @@ abstract class Result<T> { |
/// which is then an error, then a result with that error is returned. |
/// Otherwise both levels of results are value results, and a single |
/// result with the value is returned. |
- static Result flatten(Result<Result> result) { |
- if (result.isError) return result; |
- return result.asValue.value; |
+ static Result/*<T>*/ flatten/*<T>*/(Result<Result/*<T>*/> result) { |
+ if (result.isValue) return result.asValue.value; |
+ return new ErrorResult/*<T>*/( |
+ result.asError.error, result.asError.stackTrace); |
} |
/// Whether this result is a value result. |
@@ -149,7 +137,7 @@ abstract class Result<T> { |
/// If this is an error result, return itself. |
/// |
/// Otherwise return `null`. |
- ErrorResult get asError; |
+ ErrorResult<T> get asError; |
/// Complete a completer with this result. |
void complete(Completer<T> completer); |