28 releases
0.4.3 | Apr 5, 2024 |
---|---|
0.4.1 | Mar 6, 2024 |
0.2.4 | Oct 29, 2023 |
0.1.6 | May 15, 2023 |
0.1.3 | Mar 26, 2023 |
#101 in HTTP client
88 downloads per month
Used in 2 crates
125KB
1.5K
SLoC
async-curl
This will perform curl Easy2 asynchronously for rust-lang via an Actor using tokio
How to use with multiple async request
use async_curl::{Actor, CurlActor};
use curl::easy::{Easy2, Handler, WriteError};
#[derive(Debug, Clone, Default)]
pub struct ResponseHandler {
data: Vec<u8>,
}
impl Handler for ResponseHandler {
/// This will store the response from the server
/// to the data vector.
fn write(&mut self, data: &[u8]) -> Result<usize, WriteError> {
self.data.extend_from_slice(data);
Ok(data.len())
}
}
impl ResponseHandler {
/// Instantiation of the ResponseHandler
/// and initialize the data vector.
pub fn new() -> Self {
Self::default()
}
/// This will consumed the object and
/// give the data to the caller
pub fn get_data(self) -> Vec<u8> {
self.data
}
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
let actor = CurlActor::new();
let mut easy2 = Easy2::new(ResponseHandler::new());
easy2.url("https://www.rust-lang.org/").unwrap();
easy2.get(true).unwrap();
let actor1 = actor.clone();
let spawn1 = tokio::spawn(async move {
let mut result = actor1.send_request(easy2).await.unwrap();
let response = result.get_ref().to_owned().get_data();
let status = result.response_code().unwrap();
println!("Response: {:?}", response);
println!("Status: {:?}", status);
});
let mut easy2 = Easy2::new(ResponseHandler::new());
easy2.url("https://www.rust-lang.org/").unwrap();
easy2.get(true).unwrap();
let spawn2 = tokio::spawn(async move {
let mut result = actor.send_request(easy2).await.unwrap();
let response = result.get_ref().to_owned().get_data();
let status = result.response_code().unwrap();
println!("Response: {:?}", response);
println!("Status: {:?}", status);
});
let (_, _) = tokio::join!(spawn1, spawn2);
}
Dependencies
~11–19MB
~292K SLoC