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}