blob: 977ee643e8c91b7ce2a4b4d26381af65174a033e [file] [log] [blame]
// 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.
import 'dart:async';
/// Simple delegating wrapper around an [EventSink].
///
/// Subclasses can override individual methods, or use this to expose only the
/// [EventSink] methods of a subclass.
class DelegatingEventSink<T> implements EventSink<T> {
final EventSink _sink;
/// Create a delegating sink forwarding calls to [sink].
DelegatingEventSink(EventSink<T> sink) : _sink = sink;
DelegatingEventSink._(this._sink);
/// Creates a wrapper that coerces the type of [sink].
///
/// Unlike [new DelegatingEventSink], this only requires its argument to be an
/// instance of `EventSink`, not `EventSink<T>`. This means that calls to
/// [add] may throw a [CastError] if the argument type doesn't match the
/// reified type of [sink].
static EventSink<T> typed<T>(EventSink sink) =>
sink is EventSink<T> ? sink : DelegatingEventSink._(sink);
@override
void add(T data) {
_sink.add(data);
}
@override
void addError(error, [StackTrace stackTrace]) {
_sink.addError(error, stackTrace);
}
@override
void close() {
_sink.close();
}
}