// Copyright (c) 2015, 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. /// Simple delegating wrapper around a [Sink]. /// /// Subclasses can override individual methods, or use this to expose only the /// [Sink] methods of a subclass. class DelegatingSink implements Sink { final Sink _sink; /// Create a delegating sink forwarding calls to [sink]. DelegatingSink(Sink sink) : _sink = sink; DelegatingSink._(this._sink); /// Creates a wrapper that coerces the type of [sink]. /// /// Unlike [DelegatingSink.new], this only requires its argument to be an /// instance of `Sink`, not `Sink`. This means that calls to [add] may /// throw a [TypeError] if the argument type doesn't match the reified type of /// [sink]. @Deprecated( 'Use StreamController(sync: true)..stream.cast().pipe(sink)') static Sink typed(Sink sink) => sink is Sink ? sink : DelegatingSink._(sink); @override void add(T data) { _sink.add(data); } @override void close() { _sink.close(); } }