aws_smithy_types_convert/stream.rs
1/*
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6//! Conversions from Stream-like structs to implementors of `futures::Stream`
7
8use futures_core::Stream;
9use std::pin::Pin;
10use std::task::{Context, Poll};
11
12use aws_smithy_async::future::pagination_stream::PaginationStream;
13
14/// Stream implementor wrapping `PaginationStream`
15pub struct PaginationStreamImplStream<Item> {
16 pagination_stream: PaginationStream<Item>,
17}
18
19impl<Item> PaginationStreamImplStream<Item> {
20 /// Create a new Stream object wrapping a `PaginationStream`
21 pub fn new(pagination_stream: PaginationStream<Item>) -> Self {
22 PaginationStreamImplStream { pagination_stream }
23 }
24}
25
26impl<Item> Stream for PaginationStreamImplStream<Item> {
27 type Item = Item;
28
29 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
30 self.pagination_stream.poll_next(cx)
31 }
32}
33
34/// Trait to convert PaginationStream into implementor of `Stream`
35pub trait PaginationStreamExt<Item> {
36 /// Convert PaginationStream into implementor of `Stream`
37 ///
38 /// # Example
39 /// ```no_run
40 /// # use aws_smithy_async::future::pagination_stream::PaginationStream;
41 /// use aws_smithy_types_convert::stream::PaginationStreamExt;
42 /// // Assuming you have obtained a pagination stream, by something like:
43 /// // ```
44 /// // let pagination_stream = s3_client
45 /// // .list_objects_v2()
46 /// // .bucket(bucket)
47 /// // .into_paginator()
48 /// // .send();
49 /// // ```
50 /// # let pagination_stream: PaginationStream<i32> = unimplemented!();
51 /// let futures_stream = pagination_stream.into_stream_03x();
52 /// ```
53 fn into_stream_03x(self) -> PaginationStreamImplStream<Item>;
54}
55
56impl<Item> PaginationStreamExt<Item> for PaginationStream<Item> {
57 fn into_stream_03x(self) -> PaginationStreamImplStream<Item> {
58 PaginationStreamImplStream {
59 pagination_stream: self,
60 }
61 }
62}