Index: lib/stream_channel.dart |
diff --git a/lib/stream_channel.dart b/lib/stream_channel.dart |
index f914188e6f9554bc499646a911e310caaa293b01..ff3104212f7077826b5c991530326288274528c7 100644 |
--- a/lib/stream_channel.dart |
+++ b/lib/stream_channel.dart |
@@ -4,6 +4,8 @@ |
import 'dart:async'; |
+import 'package:async/async.dart'; |
+ |
import 'src/stream_channel_transformer.dart'; |
export 'src/delegating_stream_channel.dart'; |
@@ -75,6 +77,20 @@ abstract class StreamChannel<T> { |
/// |
/// This is identical to calling `transformer.bind(channel)`. |
StreamChannel transform(StreamChannelTransformer<dynamic, T> transformer); |
+ |
+ /// Transforms only the [stream] component of [this] using [transformer]. |
+ StreamChannel<T> transformStream(StreamTransformer<T, T> transformer); |
+ |
+ /// Transforms only the [sink] component of [this] using [transformer]. |
+ StreamChannel<T> transformSink(StreamSinkTransformer<T, T> transformer); |
+ |
+ /// Returns a copy of [this] with [stream] replaced by [change]'s return |
+ /// value. |
+ StreamChannel<T> changeStream(Stream<T> change(Stream<T> stream)); |
+ |
+ /// Returns a copy of [this] with [sink] replaced by [change]'s return |
+ /// value. |
+ StreamChannel<T> changeSink(StreamSink<T> change(StreamSink<T> sink)); |
} |
/// An implementation of [StreamChannel] that simply takes a stream and a sink |
@@ -99,4 +115,16 @@ abstract class StreamChannelMixin<T> implements StreamChannel<T> { |
StreamChannel transform(StreamChannelTransformer<dynamic, T> transformer) => |
transformer.bind(this); |
+ |
+ StreamChannel<T> transformStream(StreamTransformer<T, T> transformer) => |
+ changeStream(transformer.bind); |
+ |
+ StreamChannel<T> transformSink(StreamSinkTransformer<T, T> transformer) => |
+ changeSink(transformer.bind); |
+ |
+ StreamChannel<T> changeStream(Stream<T> change(Stream<T> stream)) => |
+ new StreamChannel(change(stream), sink); |
+ |
+ StreamChannel<T> changeSink(StreamSink<T> change(StreamSink<T> sink)) => |
+ new StreamChannel(stream, change(sink)); |
} |