| Index: packages/async/lib/src/delegate/stream_subscription.dart
|
| diff --git a/packages/async/lib/src/delegate/stream_subscription.dart b/packages/async/lib/src/delegate/stream_subscription.dart
|
| index ff9b66584b119a2373792e19450360d3fc962f4d..e7575d8215cb0dcf6a582321f51e99447aec23d0 100644
|
| --- a/packages/async/lib/src/delegate/stream_subscription.dart
|
| +++ b/packages/async/lib/src/delegate/stream_subscription.dart
|
| @@ -2,10 +2,10 @@
|
| // 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.
|
|
|
| -library async.delegate.stream_subscription;
|
| -
|
| import 'dart:async';
|
|
|
| +import '../typed/stream_subscription.dart';
|
| +
|
| /// Simple delegating wrapper around a [StreamSubscription].
|
| ///
|
| /// Subclasses can override individual methods.
|
| @@ -13,9 +13,21 @@ class DelegatingStreamSubscription<T> implements StreamSubscription<T> {
|
| final StreamSubscription _source;
|
|
|
| /// Create delegating subscription forwarding calls to [sourceSubscription].
|
| - DelegatingStreamSubscription(StreamSubscription sourceSubscription)
|
| + DelegatingStreamSubscription(StreamSubscription<T> sourceSubscription)
|
| : _source = sourceSubscription;
|
|
|
| + /// Creates a wrapper which throws if [subscription]'s events aren't instances
|
| + /// of `T`.
|
| + ///
|
| + /// This soundly converts a [StreamSubscription] to a `StreamSubscription<T>`,
|
| + /// regardless of its original generic type, by asserting that its events are
|
| + /// instances of `T` whenever they're provided. If they're not, the
|
| + /// subscription throws a [CastError].
|
| + static StreamSubscription<T> typed<T>(StreamSubscription subscription) =>
|
| + subscription is StreamSubscription<T>
|
| + ? subscription
|
| + : new TypeSafeStreamSubscription<T>(subscription);
|
| +
|
| void onData(void handleData(T data)) {
|
| _source.onData(handleData);
|
| }
|
| @@ -38,7 +50,7 @@ class DelegatingStreamSubscription<T> implements StreamSubscription<T> {
|
|
|
| Future cancel() => _source.cancel();
|
|
|
| - Future asFuture([futureValue]) => _source.asFuture(futureValue);
|
| + Future<E> asFuture<E>([E futureValue]) => _source.asFuture(futureValue);
|
|
|
| bool get isPaused => _source.isPaused;
|
| }
|
|
|