| // 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 '../typed/stream.dart'; |
| |
| /// Simple delegating wrapper around a [Stream]. |
| /// |
| /// Subclasses can override individual methods, or use this to expose only the |
| /// [Stream] methods of a subclass. |
| /// |
| /// Note that this is identical to [StreamView] in `dart:async`. It's provided |
| /// under this name for consistency with other `Delegating*` classes. |
| class DelegatingStream<T> extends StreamView<T> { |
| DelegatingStream(Stream<T> stream) : super(stream); |
| |
| /// Creates a wrapper which throws if [stream]'s events aren't instances of |
| /// `T`. |
| /// |
| /// This soundly converts a [Stream] to a `Stream<T>`, regardless of its |
| /// original generic type, by asserting that its events are instances of `T` |
| /// whenever they're provided. If they're not, the stream throws a |
| /// [CastError]. |
| static Stream<T> typed<T>(Stream stream) => |
| stream is Stream<T> ? stream : new TypeSafeStream<T>(stream); |
| } |