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 : /// Simple delegating wrapper around a [Sink].
6 : ///
7 : /// Subclasses can override individual methods, or use this to expose only the
8 : /// [Sink] methods of a subclass.
9 : class DelegatingSink<T> implements Sink<T> {
10 : final Sink _sink;
11 :
12 : /// Create a delegating sink forwarding calls to [sink].
13 5 : DelegatingSink(Sink<T> sink) : _sink = sink;
14 :
15 0 : DelegatingSink._(this._sink);
16 :
17 : /// Creates a wrapper that coerces the type of [sink].
18 : ///
19 : /// Unlike [new DelegatingSink], this only requires its argument to be an
20 : /// instance of `Sink`, not `Sink<T>`. This means that calls to [add] may
21 : /// throw a [CastError] if the argument type doesn't match the reified type of
22 : /// [sink].
23 : static Sink<T> typed<T>(Sink sink) =>
24 0 : sink is Sink<T> ? sink : new DelegatingSink._(sink);
25 :
26 : void add(T data) {
27 10 : _sink.add(data);
28 : }
29 :
30 : void close() {
31 10 : _sink.close();
32 : }
33 : }
|