Remove disabled examples
This commit is contained in:
@@ -1,101 +0,0 @@
|
||||
#![deny(warnings)]
|
||||
use std::io::{self, Cursor};
|
||||
use std::mem;
|
||||
use std::path::Path;
|
||||
use std::pin::Pin;
|
||||
use std::task::{Context, Poll};
|
||||
|
||||
use futures::{Stream, TryStreamExt};
|
||||
use reqwest::r#async::{Body, Client, Decoder};
|
||||
use tokio_fs::File;
|
||||
use tokio::io::AsyncRead;
|
||||
|
||||
use failure::Fail;
|
||||
|
||||
#[derive(Debug, Fail)]
|
||||
pub enum Error {
|
||||
#[fail(display = "Io Error")]
|
||||
Io(#[fail(cause)] std::io::Error),
|
||||
#[fail(display = "Reqwest error")]
|
||||
Reqwest(#[fail(cause)] reqwest::Error),
|
||||
}
|
||||
|
||||
unsafe impl Send for Error {}
|
||||
unsafe impl Sync for Error {}
|
||||
|
||||
struct AsyncReadWrapper<T> {
|
||||
inner: T,
|
||||
}
|
||||
|
||||
impl<T> AsyncReadWrapper<T> {
|
||||
fn inner(self: Pin<&mut Self>) -> Pin<&mut T> {
|
||||
unsafe {
|
||||
Pin::map_unchecked_mut(self, |x| &mut x.inner)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Stream for AsyncReadWrapper<T>
|
||||
where T: AsyncRead
|
||||
{
|
||||
type Item = Result<hyper::Chunk, failure::Compat<Error>>;
|
||||
fn poll_next(
|
||||
mut self: Pin<&mut Self>,
|
||||
cx: &mut Context<'_>,
|
||||
) -> Poll<Option<Self::Item>> {
|
||||
let mut buf = vec![];
|
||||
loop {
|
||||
let mut read_buf = vec![];
|
||||
match self.as_mut().inner().as_mut().poll_read(cx, &mut read_buf) {
|
||||
Poll::Pending => {
|
||||
if buf.is_empty() {
|
||||
return Poll::Pending;
|
||||
} else {
|
||||
return Poll::Ready(Some(Ok(buf.into())));
|
||||
}
|
||||
}
|
||||
Poll::Ready(Err(e)) => {
|
||||
return Poll::Ready(Some(Err(Error::Io(e).compat())))
|
||||
},
|
||||
Poll::Ready(Ok(n)) => {
|
||||
buf.extend_from_slice(&read_buf[..n]);
|
||||
if buf.is_empty() && n == 0 {
|
||||
return Poll::Ready(None);
|
||||
} else {
|
||||
return Poll::Ready(Some(Ok(buf.into())));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn post<P>(path: P) -> Result<(), Error>
|
||||
where
|
||||
P: AsRef<Path> + Send + Unpin + 'static,
|
||||
{
|
||||
let source = File::open(path)
|
||||
.await.map_err(Error::Io)?;
|
||||
let wrapper = AsyncReadWrapper { inner: source };
|
||||
let mut res = Client::new()
|
||||
.post("https://httpbin.org/post")
|
||||
.body(Body::wrap_stream(wrapper))
|
||||
.send()
|
||||
.await.map_err(Error::Reqwest)?;
|
||||
|
||||
println!("{}", res.status());
|
||||
|
||||
let body = mem::replace(res.body_mut(), Decoder::empty());
|
||||
let body: Result<_, _> = body.try_concat().await;
|
||||
|
||||
let mut body = Cursor::new(body.map_err(Error::Reqwest)?);
|
||||
io::copy(&mut body, &mut io::stdout()).map_err(Error::Io)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Error> {
|
||||
let path = concat!(env!("CARGO_MANIFEST_DIR"), "/LICENSE-APACHE");
|
||||
post(path).await
|
||||
}
|
||||
Reference in New Issue
Block a user