Line data Source code
1 : // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 : // for details. All rights reserved. Use of this source code is governed by a
3 : // BSD-style license that can be found in the LICENSE file.
4 :
5 : import 'dart:async';
6 :
7 : import '../typed/future.dart';
8 :
9 : /// A wrapper that forwards calls to a [Future].
10 : class DelegatingFuture<T> implements Future<T> {
11 : /// The wrapped [Future].
12 : final Future<T> _future;
13 :
14 0 : DelegatingFuture(this._future);
15 :
16 : /// Creates a wrapper which throws if [future]'s value isn't an instance of
17 : /// `T`.
18 : ///
19 : /// This soundly converts a [Future] to a `Future<T>`, regardless of its
20 : /// original generic type, by asserting that its value is an instance of `T`
21 : /// whenever it's provided. If it's not, the future throws a [CastError].
22 : static Future<T> typed<T>(Future future) =>
23 0 : future is Future<T> ? future : new TypeSafeFuture<T>(future);
24 :
25 0 : Stream<T> asStream() => _future.asStream();
26 :
27 : Future<T> catchError(Function onError, {bool test(Object error)}) =>
28 0 : _future.catchError(onError, test: test);
29 :
30 : Future<S> then<S>(FutureOr<S> onValue(T value), {Function onError}) =>
31 0 : _future.then(onValue, onError: onError);
32 :
33 0 : Future<T> whenComplete(action()) => _future.whenComplete(action);
34 :
35 : Future<T> timeout(Duration timeLimit, {onTimeout()}) =>
36 0 : _future.timeout(timeLimit, onTimeout: onTimeout);
37 : }
|