create api builder

This commit is contained in:
grimhilt 2023-06-04 18:12:36 +02:00
parent b92454522f
commit 0817e01bdf
2 changed files with 72 additions and 0 deletions

53
src/services/api.rs Normal file
View File

@ -0,0 +1,53 @@
use reqwest::Client;
use reqwest::RequestBuilder;
use reqwest::{Response, Error, IntoUrl, Method};
use std::env;
use dotenv::dotenv;
pub struct ApiBuilder {
client: Client,
request: Option<RequestBuilder>,
}
impl ApiBuilder {
pub fn new() -> Self {
ApiBuilder {
client: Client::new(),
request: None,
}
}
pub fn set_request<U: IntoUrl>(mut self, method: Method, url: U) -> ApiBuilder {
self.request = Some(self.client.request(method, url));
self
}
fn set_auth(&mut self) -> &mut ApiBuilder {
// todo if not exist
dotenv().ok();
let password = env::var("PASSWORD").unwrap();
let username = env::var("USERNAME").unwrap();
match self.request.take() {
None => {
eprintln!("fatal: incorrect request");
std::process::exit(1);
},
Some(req) => {
self.request = Some(req.basic_auth(username, Some(password)));
}
}
self
}
pub async fn send(&mut self) -> Result<Response, Error> {
self.set_auth();
match self.request.take() {
None => {
eprintln!("fatal: incorrect request");
std::process::exit(1);
},
Some(req) => req.send().await.map_err(Error::from),
}
}
}

View File

@ -0,0 +1,19 @@
use crate::services::api::ApiBuilder;
use reqwest::{Method, IntoUrl, Response, Error};
pub struct ListFolders {
api_builder: ApiBuilder,
}
impl ListFolders {
pub fn new<U: IntoUrl>(url: U) -> Self {
ListFolders {
api_builder: ApiBuilder::new()
.set_request(Method::from_bytes(b"PROPFIND").unwrap(), url),
}
}
pub async fn send(&mut self) -> Result<Response, Error> {
Ok(self.api_builder.send().await?)
}
}