Line data Source code
1 : // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 : // for details. All rights reserved. Use of this source code is governed by a
3 : // BSD-style license that can be found in the LICENSE file.
4 :
5 : import 'dart:async';
6 :
7 : /// Simple delegating wrapper around a [StreamSink].
8 : ///
9 : /// Subclasses can override individual methods, or use this to expose only the
10 : /// [StreamSink] methods of a subclass.
11 : class DelegatingStreamSink<T> implements StreamSink<T> {
12 : final StreamSink _sink;
13 :
14 0 : Future get done => _sink.done;
15 :
16 : /// Create delegating sink forwarding calls to [sink].
17 0 : DelegatingStreamSink(StreamSink<T> sink) : _sink = sink;
18 :
19 0 : DelegatingStreamSink._(this._sink);
20 :
21 : /// Creates a wrapper that coerces the type of [sink].
22 : ///
23 : /// Unlike [new StreamSink], this only requires its argument to be an instance
24 : /// of `StreamSink`, not `StreamSink<T>`. This means that calls to [add] may
25 : /// throw a [CastError] if the argument type doesn't match the reified type of
26 : /// [sink].
27 : static StreamSink<T> typed<T>(StreamSink sink) =>
28 0 : sink is StreamSink<T> ? sink : new DelegatingStreamSink._(sink);
29 :
30 : void add(T data) {
31 0 : _sink.add(data);
32 : }
33 :
34 : void addError(error, [StackTrace stackTrace]) {
35 0 : _sink.addError(error, stackTrace);
36 : }
37 :
38 0 : Future addStream(Stream<T> stream) => _sink.addStream(stream);
39 :
40 0 : Future close() => _sink.close();
41 : }
|