diff --git a/Cargo.lock b/Cargo.lock index f2bce0f..f6bb750 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,7 +71,7 @@ dependencies = [ [[package]] name = "firebase-rs" -version = "2.0.5" +version = "3.0.0" dependencies = [ "reqwest", "serde", diff --git a/Cargo.toml b/Cargo.toml index 4e6441e..c0939de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,11 @@ [package] name = "firebase-rs" edition = "2021" -version = "2.0.5" +version = "3.0.0" description = "Rust based Firebase library" readme = "README.md" repository = "https://github.com/emreyalvac/firebase-rs" -documentation = "https://docs.rs/firebase-rs/2.0.4/firebase_rs/" +documentation = "https://docs.rs/firebase-rs/3.0.0/firebase_rs/" license = "MIT" authors = ["Emre YALVAƇ "] exclude = ["examples/*", "tests/*"] diff --git a/src/constants.rs b/src/constants.rs index f0faa65..d213c7d 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -13,6 +13,7 @@ pub const EXPORT: &str = "export"; pub enum Method { GET, POST, + PUT, DELETE, PATCH, } diff --git a/src/lib.rs b/src/lib.rs index 5cd2428..357853b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,8 +26,8 @@ impl Firebase { /// let firebase = Firebase::new("https://myfirebase.firebaseio.com").unwrap(); /// ``` pub fn new(uri: &str) -> UrlParseResult - where - Self: Sized, + where + Self: Sized, { match check_uri(&uri) { Ok(uri) => Ok(Self { uri }), @@ -41,8 +41,8 @@ impl Firebase { /// let firebase = Firebase::new("https://myfirebase.firebaseio.com").unwrap(); /// ``` pub fn auth(uri: &str, auth_key: &str) -> UrlParseResult - where - Self: Sized, + where + Self: Sized, { match check_uri(&uri) { Ok(mut uri) => { @@ -90,9 +90,7 @@ impl Firebase { let mut uri = self.uri.clone(); uri.set_path(&format!("{}.json", new_path)); - Self { - uri, - } + Self { uri } } /// ``` @@ -144,6 +142,20 @@ impl Firebase { Err(_) => Err(RequestError::NetworkError), } } + Method::PUT => { + if !data.is_some() { + return Err(RequestError::SerializeError); + } + + let request = client.put(self.uri.to_string()).json(&data).send().await; + match request { + Ok(response) => { + let data = response.text().await.unwrap(); + Ok(Response { data }) + } + Err(_) => Err(RequestError::NetworkError), + } + } Method::PATCH => { if !data.is_some() { return Err(RequestError::SerializeError); @@ -171,8 +183,8 @@ impl Firebase { } async fn request_generic(&self, method: Method) -> RequestResult - where - T: Serialize + DeserializeOwned + Debug, + where + T: Serialize + DeserializeOwned + Debug, { let request = self.request(method, None).await; @@ -202,8 +214,31 @@ impl Firebase { /// # } /// ``` pub async fn set(&self, data: &T) -> RequestResult - where - T: Serialize + DeserializeOwned + Debug, + where + T: Serialize + DeserializeOwned + Debug, + { + let data = serde_json::to_value(&data).unwrap(); + self.request(Method::PUT, Some(data)).await + } + + /// ``` + /// use firebase_rs::Firebase; + /// use serde::{Serialize, Deserialize}; + /// + /// #[derive(Serialize, Deserialize, Debug)] + /// struct User { + /// name: String + /// } + /// + /// # async fn run() { + /// let user = User { name: String::default() }; + /// let firebase = Firebase::new("https://myfirebase.firebaseio.com").unwrap().at("users"); + /// let users = firebase.insert(&user).await; + /// # } + /// ``` + pub async fn insert(&self, data: &T) -> RequestResult + where + T: Serialize + DeserializeOwned + Debug, { let data = serde_json::to_value(&data).unwrap(); self.request(Method::POST, Some(data)).await @@ -249,8 +284,8 @@ impl Firebase { /// # } /// ``` pub async fn get(&self) -> RequestResult - where - T: Serialize + DeserializeOwned + Debug, + where + T: Serialize + DeserializeOwned + Debug, { self.request_generic::(Method::GET).await } @@ -283,8 +318,8 @@ impl Firebase { /// # } /// ``` pub async fn update(&self, data: &T) -> RequestResult - where - T: DeserializeOwned + Serialize + Debug, + where + T: DeserializeOwned + Serialize + Debug, { let value = serde_json::to_value(&data).unwrap(); self.request(Method::PATCH, Some(value)).await