| Index: lib/src/stream_channel_transformer.dart
|
| diff --git a/lib/src/stream_channel_transformer.dart b/lib/src/stream_channel_transformer.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..be032c60dcc40d507fe982d7fe384d381df378af
|
| --- /dev/null
|
| +++ b/lib/src/stream_channel_transformer.dart
|
| @@ -0,0 +1,52 @@
|
| +// 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';
|
| +import 'dart:convert';
|
| +
|
| +import 'package:async/async.dart';
|
| +
|
| +import '../stream_channel.dart';
|
| +
|
| +/// A [StreamChannelTransformer] transforms the events being passed to and
|
| +/// emitted by a [StreamChannel].
|
| +///
|
| +/// This works on the same principle as [StreamTransformer] and
|
| +/// [StreamSinkTransformer]. Each transformer defines a [bind] method that takes
|
| +/// in the original [StreamChannel] and returns the transformed version.
|
| +///
|
| +/// Transformers must be able to have `bind` called multiple times.
|
| +class StreamChannelTransformer<S, T> {
|
| + /// The transformer to use on the channel's stream.
|
| + final StreamTransformer _streamTransformer;
|
| +
|
| + /// The transformer to use on the channel's sink.
|
| + final StreamSinkTransformer _sinkTransformer;
|
| +
|
| + /// Creates a [StreamChannelTransformer] from existing stream and sink
|
| + /// transformers.
|
| + const StreamChannelTransformer(
|
| + this._streamTransformer, this._sinkTransformer);
|
| +
|
| + /// Creates a [StreamChannelTransformer] from a codec's encoder and decoder.
|
| + ///
|
| + /// All input to the inner channel's sink is encoded using [Codec.encoder],
|
| + /// and all output from its stream is decoded using [Codec.decoder].
|
| + StreamChannelTransformer.fromCodec(Codec<S, T> codec)
|
| + : this(
|
| + codec.decoder,
|
| + new StreamSinkTransformer.fromStreamTransformer(codec.encoder));
|
| +
|
| + /// Transforms the events sent to and emitted by [channel].
|
| + ///
|
| + /// Creates a new channel. When events are passed to the returned channel's
|
| + /// sink, the transformer will transform them and pass the transformed
|
| + /// versions to `channel.sink`. When events are emitted from the
|
| + /// `channel.straem`, the transformer will transform them and pass the
|
| + /// transformed versions to the returned channel's stream.
|
| + StreamChannel<S> bind(StreamChannel<T> channel) =>
|
| + new StreamChannel<S>(
|
| + channel.stream.transform(_streamTransformer),
|
| + _sinkTransformer.bind(channel.sink));
|
| +}
|
|
|