Line data Source code
1 : // Copyright (c) 2016, 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 : import '../typed/stream.dart';
8 :
9 : /// Simple delegating wrapper around a [Stream].
10 : ///
11 : /// Subclasses can override individual methods, or use this to expose only the
12 : /// [Stream] methods of a subclass.
13 : ///
14 : /// Note that this is identical to [StreamView] in `dart:async`. It's provided
15 : /// under this name for consistency with other `Delegating*` classes.
16 : class DelegatingStream<T> extends StreamView<T> {
17 0 : DelegatingStream(Stream<T> stream) : super(stream);
18 :
19 : /// Creates a wrapper which throws if [stream]'s events aren't instances of
20 : /// `T`.
21 : ///
22 : /// This soundly converts a [Stream] to a `Stream<T>`, regardless of its
23 : /// original generic type, by asserting that its events are instances of `T`
24 : /// whenever they're provided. If they're not, the stream throws a
25 : /// [CastError].
26 : static Stream<T> typed<T>(Stream stream) =>
27 0 : stream is Stream<T> ? stream : new TypeSafeStream<T>(stream);
28 : }
|