1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use crate::Result; use bytes::{BufMut, BytesMut}; use hyper::{ body::HttpBody, client::{Client, HttpConnector}, Body, HeaderMap, Method, Request, StatusCode, Uri, }; use hyper_tls::HttpsConnector; pub enum Payload<'a> { None, Payload(&'a str), } pub async fn request_get( client: &Client<HttpsConnector<HttpConnector>>, uri: &Uri, auth: &str, ) -> Result<(StatusCode, HeaderMap, BytesMut)> { let request = Request::builder() .method(Method::GET) .uri(uri) .header("Authorization", auth) .body(Body::empty())?; let mut response = client.request(request).await?; let status = response.status(); let headers = response.headers().to_owned(); let mut body = BytesMut::with_capacity(1024); if !headers.contains_key("content-length") || !headers.contains_key("content-type") { return Ok((status, headers, body)); } while let Some(chunk) = response.body_mut().data().await { body.put(chunk?); } Ok((status, headers, body)) } pub async fn request_post<'a>( client: &Client<HttpsConnector<HttpConnector>>, uri: &Uri, auth: &str, payload: Payload<'a>, ) -> Result<(StatusCode, HeaderMap, BytesMut)> { let request = match payload { Payload::Payload(str) => Request::builder() .method(Method::POST) .uri(uri) .header("Authorization", auth) .body(Body::from(str.to_owned()))?, Payload::None => Request::builder() .method(Method::POST) .uri(uri) .header("Authorization", auth) .body(Body::empty())?, }; let mut response = client.request(request).await?; let status = response.status(); let headers = response.headers().to_owned(); let mut body = BytesMut::with_capacity(1024); if !headers.contains_key("content-length") || !headers.contains_key("content-type") { return Ok((status, headers, body)); } while let Some(chunk) = response.body_mut().data().await { body.put(chunk?); } Ok((status, headers, body)) }