From 0817e01bdf4f7964ce0ef2838e6bf33787f99799 Mon Sep 17 00:00:00 2001 From: grimhilt Date: Sun, 4 Jun 2023 18:12:36 +0200 Subject: [PATCH] create api builder --- src/services/api.rs | 53 ++++++++++++++++++++++++++++++++++++ src/services/list_folders.rs | 19 +++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/services/api.rs create mode 100644 src/services/list_folders.rs diff --git a/src/services/api.rs b/src/services/api.rs new file mode 100644 index 0000000..45809ce --- /dev/null +++ b/src/services/api.rs @@ -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, +} + +impl ApiBuilder { + pub fn new() -> Self { + ApiBuilder { + client: Client::new(), + request: None, + } + } + + pub fn set_request(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 { + 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), + } + } +} + diff --git a/src/services/list_folders.rs b/src/services/list_folders.rs new file mode 100644 index 0000000..f627109 --- /dev/null +++ b/src/services/list_folders.rs @@ -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(url: U) -> Self { + ListFolders { + api_builder: ApiBuilder::new() + .set_request(Method::from_bytes(b"PROPFIND").unwrap(), url), + } + } + + pub async fn send(&mut self) -> Result { + Ok(self.api_builder.send().await?) + } +}