From b7bbb5cdffdfc4ddf5bc7c1a45d34760130e48a0 Mon Sep 17 00:00:00 2001 From: Adam Leventhal Date: Wed, 16 Mar 2022 13:30:49 -0700 Subject: [PATCH] update ByteStream type to include Pin (#36) --- progenitor-client/src/lib.rs | 10 +++++++--- progenitor/tests/build_nexus.rs | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/progenitor-client/src/lib.rs b/progenitor-client/src/lib.rs index 35e5543..f5e9e9d 100644 --- a/progenitor-client/src/lib.rs +++ b/progenitor-client/src/lib.rs @@ -2,7 +2,10 @@ //! Support code for generated clients. -use std::ops::{Deref, DerefMut}; +use std::{ + ops::{Deref, DerefMut}, + pin::Pin, +}; use bytes::Bytes; use futures_core::Stream; @@ -10,7 +13,8 @@ use serde::de::DeserializeOwned; /// Represents a streaming, untyped byte stream for both success and error /// responses. -pub type ByteStream = Box>>; +pub type ByteStream = + Pin> + Send>>; /// Success value returned by generated client methods. pub struct ResponseValue { @@ -46,7 +50,7 @@ impl ResponseValue { let status = response.status(); let headers = response.headers().clone(); Self { - inner: Box::new(response.bytes_stream()), + inner: Box::pin(response.bytes_stream()), status, headers, } diff --git a/progenitor/tests/build_nexus.rs b/progenitor/tests/build_nexus.rs index 7f703b1..e892e59 100644 --- a/progenitor/tests/build_nexus.rs +++ b/progenitor/tests/build_nexus.rs @@ -1,3 +1,23 @@ // Copyright 2021 Oxide Computer Company progenitor::generate_api!("../sample_openapi/nexus.json"); + +pub async fn iteration_example() { + let client = Client::new("xxx"); + + let bod = types::LoginParams { + username: "ahl".to_string(), + }; + + let mut stream = client.spoof_login(&bod).await.unwrap(); + + loop { + use futures::TryStreamExt; + + match stream.try_next().await { + Ok(Some(bytes)) => println!("bytes: {:?}", bytes), + Ok(None) => break, + Err(e) => panic!("{}", e), + } + } +}