Skip to content

Commit

Permalink
Refactoring using async-curl v0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
LorenzoLeonardo committed Oct 28, 2023
1 parent 8a3d23c commit 7219fef
Show file tree
Hide file tree
Showing 17 changed files with 185 additions and 250 deletions.
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ documentation = "https://docs.rs/curl-http-client"
readme = "README.md"

[dependencies]
async-curl = "0.1"
async-curl = "0.2"
curl = "0.4"
derive-deref-rs = "0.1"
http = "0.2"
Expand Down
32 changes: 16 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ that uses an actor model (Message passing) to achieve a non-blocking I/O.

## Get Request
```rust
use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{collector::Collector, http_client::HttpClient, request::HttpRequest};
use http::{HeaderMap, Method};
use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
let curl = CurlActor::new();
let collector = Collector::Ram(Vec::new());

let request = HttpRequest {
Expand All @@ -36,14 +36,14 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {

## Post Request
```rust
use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{collector::Collector, http_client::HttpClient, request::HttpRequest};
use http::{HeaderMap, Method};
use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
let curl = CurlActor::new();
let collector = Collector::Ram(Vec::new());

let request = HttpRequest {
Expand All @@ -67,7 +67,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
```rust
use std::path::PathBuf;

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::HttpClient,
Expand All @@ -78,7 +78,7 @@ use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
let curl = CurlActor::new();

let collector = Collector::File(FileInfo::path(PathBuf::from("<FILE PATH TO SAVE>")));

Expand All @@ -103,7 +103,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
```rust
use std::{fs, path::PathBuf};

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::{FileSize, HttpClient},
Expand All @@ -117,7 +117,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let file_to_be_uploaded = PathBuf::from("<FILE PATH TO BE UPLOADED>");
let file_size = fs::metadata(file_to_be_uploaded.as_path()).unwrap().len() as usize;

let curl = AsyncCurl::new();
let curl = CurlActor::new();
let collector = Collector::File(FileInfo::path(file_to_be_uploaded));

let request = HttpRequest {
Expand All @@ -140,7 +140,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {

## Concurrency
```rust
use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{collector::Collector, http_client::HttpClient, request::HttpRequest};
use futures::future;
use http::{HeaderMap, Method};
Expand All @@ -150,7 +150,7 @@ use url::Url;
async fn main() {
const NUM_CONCURRENT: usize = 5;

let curl = AsyncCurl::new();
let curl = CurlActor::new();
let mut handles = Vec::new();

for _n in 0..NUM_CONCURRENT {
Expand Down Expand Up @@ -189,7 +189,7 @@ async fn main() {
use std::fs;
use std::path::PathBuf;

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::{BytesOffset, HttpClient},
Expand All @@ -200,7 +200,7 @@ use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
let curl = CurlActor::new();
let save_to = PathBuf::from("<FILE PATH TO SAVE>");
let collector = Collector::File(FileInfo::path(save_to.clone()));

Expand All @@ -226,7 +226,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
```rust
use std::path::PathBuf;

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::HttpClient,
Expand All @@ -240,7 +240,7 @@ use url::Url;
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let (tx, mut rx) = channel(1);

let curl = AsyncCurl::new();
let curl = CurlActor::new();
let file_info = FileInfo::path(PathBuf::from("<FILE PATH TO SAVE>")).with_transfer_speed_sender(tx);
let collector = Collector::File(file_info);

Expand Down Expand Up @@ -273,7 +273,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
```rust
use std::{fs, path::PathBuf};

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::{FileSize, HttpClient},
Expand All @@ -290,7 +290,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let file_to_be_uploaded = PathBuf::from("<FILE PATH TO BE UPLOADED>");
let file_size = fs::metadata(file_to_be_uploaded.as_path()).unwrap().len() as usize;

let curl = AsyncCurl::new();
let curl = CurlActor::new();
let file_info = FileInfo::path(file_to_be_uploaded).with_transfer_speed_sender(tx);
let collector = Collector::File(file_info);

Expand Down
4 changes: 2 additions & 2 deletions examples/asynchronous.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{collector::Collector, http_client::HttpClient, request::HttpRequest};
use futures::future;
use http::{HeaderMap, Method};
Expand All @@ -8,7 +8,7 @@ use url::Url;
async fn main() {
const NUM_CONCURRENT: usize = 5;

let curl = AsyncCurl::new();
let curl = CurlActor::new();
let mut handles = Vec::new();

for _n in 0..NUM_CONCURRENT {
Expand Down
15 changes: 8 additions & 7 deletions examples/download.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::path::PathBuf;

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::HttpClient,
Expand All @@ -10,23 +10,24 @@ use http::{HeaderMap, Method};
use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
async fn main() {
let curl = CurlActor::new();

let collector = Collector::File(FileInfo::path(PathBuf::from("<FILE PATH TO SAVE>")));

let request = HttpRequest {
url: Url::parse("<SOURCE URL>")?,
url: Url::parse("<SOURCE URL>").unwrap(),
method: Method::GET,
headers: HeaderMap::new(),
body: None,
};

let response = HttpClient::new(curl, collector)
.request(request)?
.request(request)
.unwrap()
.perform()
.await?;
.await
.unwrap();

println!("Response: {:?}", response);
Ok(())
}
15 changes: 8 additions & 7 deletions examples/get.rs
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{collector::Collector, http_client::HttpClient, request::HttpRequest};
use http::{HeaderMap, Method};
use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
async fn main() {
let curl = CurlActor::new();
let collector = Collector::Ram(Vec::new());

let request = HttpRequest {
url: Url::parse("<SOURCE URL>")?,
url: Url::parse("<SOURCE URL>").unwrap(),
method: Method::GET,
headers: HeaderMap::new(),
body: None,
};

let response = HttpClient::new(curl, collector)
.request(request)?
.request(request)
.unwrap()
.perform()
.await?;
.await
.unwrap();

println!("Response: {:?}", response);
Ok(())
}
12 changes: 7 additions & 5 deletions examples/post.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{collector::Collector, http_client::HttpClient, request::HttpRequest};
use http::{HeaderMap, Method};
use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
let curl = CurlActor::new();
let collector = Collector::Ram(Vec::new());

let request = HttpRequest {
url: Url::parse("<TARGET URL>")?,
url: Url::parse("<TARGET URL>").unwrap(),
method: Method::POST,
headers: HeaderMap::new(),
body: Some("test body".as_bytes().to_vec()),
};

let response = HttpClient::new(curl, collector)
.request(request)?
.request(request)
.unwrap()
.perform()
.await?;
.await
.unwrap();

println!("Response: {:?}", response);
Ok(())
Expand Down
15 changes: 9 additions & 6 deletions examples/resume_download.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::fs;
use std::path::PathBuf;

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::{BytesOffset, HttpClient},
Expand All @@ -12,23 +12,26 @@ use url::Url;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let curl = AsyncCurl::new();
let curl = CurlActor::new();
let save_to = PathBuf::from("<FILE PATH TO SAVE>");
let collector = Collector::File(FileInfo::path(save_to.clone()));

let partial_download_file_size = fs::metadata(save_to.as_path())?.len() as usize;
let request = HttpRequest {
url: Url::parse("<SOURCE URL>")?,
url: Url::parse("<SOURCE URL>").unwrap(),
method: Method::GET,
headers: HeaderMap::new(),
body: None,
};

let response = HttpClient::new(curl, collector)
.resume_from(BytesOffset::from(partial_download_file_size))?
.request(request)?
.resume_from(BytesOffset::from(partial_download_file_size))
.unwrap()
.request(request)
.unwrap()
.perform()
.await?;
.await
.unwrap();

println!("Response: {:?}", response);
Ok(())
Expand Down
15 changes: 9 additions & 6 deletions examples/upload.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::{fs, path::PathBuf};

use async_curl::async_curl::AsyncCurl;
use async_curl::actor::CurlActor;
use curl_http_client::{
collector::{Collector, FileInfo},
http_client::{FileSize, HttpClient},
Expand All @@ -14,21 +14,24 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let file_to_be_uploaded = PathBuf::from("<FILE PATH TO BE UPLOADED>");
let file_size = fs::metadata(file_to_be_uploaded.as_path()).unwrap().len() as usize;

let curl = AsyncCurl::new();
let curl = CurlActor::new();
let collector = Collector::File(FileInfo::path(file_to_be_uploaded));

let request = HttpRequest {
url: Url::parse("<TARGET URL>")?,
url: Url::parse("<TARGET URL>").unwrap(),
method: Method::PUT,
headers: HeaderMap::new(),
body: None,
};

let response = HttpClient::new(curl, collector)
.upload_file_size(FileSize::from(file_size))?
.request(request)?
.upload_file_size(FileSize::from(file_size))
.unwrap()
.request(request)
.unwrap()
.perform()
.await?;
.await
.unwrap();

println!("Response: {:?}", response);
Ok(())
Expand Down
12 changes: 8 additions & 4 deletions src/error.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
use std::fmt::Debug;

use crate::collector::Collector;

/// Error type returned by failed curl HTTP requests.
#[derive(Debug, thiserror::Error)]
#[derive(Debug)]
pub enum Error {
#[error("curl request failed")]
Curl(String),
#[error("Other error: {}", _0)]
Curl(curl::Error),
Http(String),
Perform(async_curl::error::Error<Collector>),
Other(String),
}
Loading

0 comments on commit 7219fef

Please sign in to comment.