Index: packages/async/lib/src/delegate/stream_consumer.dart |
diff --git a/packages/async/lib/src/delegate/stream_consumer.dart b/packages/async/lib/src/delegate/stream_consumer.dart |
index 8162db6d8ec7886befc3902e664de3d2170453d4..ba8304085095019e0d4de2cccbfd7badc9949a33 100644 |
--- a/packages/async/lib/src/delegate/stream_consumer.dart |
+++ b/packages/async/lib/src/delegate/stream_consumer.dart |
@@ -2,8 +2,6 @@ |
// 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_consumer; |
- |
import 'dart:async'; |
/// Simple delegating wrapper around a [StreamConsumer]. |
@@ -14,8 +12,20 @@ class DelegatingStreamConsumer<T> implements StreamConsumer<T> { |
final StreamConsumer _consumer; |
/// Create a delegating consumer forwarding calls to [consumer]. |
- DelegatingStreamConsumer(StreamConsumer consumer) |
- : _consumer = consumer; |
+ DelegatingStreamConsumer(StreamConsumer<T> consumer) : _consumer = consumer; |
+ |
+ DelegatingStreamConsumer._(this._consumer); |
+ |
+ /// Creates a wrapper that coerces the type of [consumer]. |
+ /// |
+ /// Unlike [new StreamConsumer], this only requires its argument to be an |
+ /// instance of `StreamConsumer`, not `StreamConsumer<T>`. This means that |
+ /// calls to [addStream] may throw a [CastError] if the argument type doesn't |
+ /// match the reified type of [consumer]. |
+ static StreamConsumer<T> typed<T>(StreamConsumer consumer) => |
+ consumer is StreamConsumer<T> |
+ ? consumer |
+ : new DelegatingStreamConsumer._(consumer); |
Future addStream(Stream<T> stream) => _consumer.addStream(stream); |