blob: 4deb4a9e5de8980ad2b0ab0f750a80bf62be073d [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
class TypeSafeFuture<T> implements Future<T> {
final Future _future;
TypeSafeFuture(this._future);
Stream<T> asStream() => _future.then((value) => value as T).asStream();
Future<T> catchError(Function onError, {bool test(Object error)}) async =>
new TypeSafeFuture<T>(_future.catchError(onError, test: test));
Future/*<S>*/ then/*<S>*/(onValue(T value), {Function onError}) =>
_future.then/*<S>*/((value) => onValue(value as T), onError: onError);
Future<T> whenComplete(action()) =>
new TypeSafeFuture<T>(_future.whenComplete(action));
Future<T> timeout(Duration timeLimit, {onTimeout()}) =>
new TypeSafeFuture<T>(_future.timeout(timeLimit, onTimeout: onTimeout));
}