diff --git a/src/models/token.rs b/src/models/token.rs index cd57a8d..25bf3d2 100644 --- a/src/models/token.rs +++ b/src/models/token.rs @@ -18,3 +18,19 @@ impl Default for Token { } } } + +impl Token { + pub fn bearer_token(&self) -> String { + let mut token: String = String::from("Bearer "); + + match &self.access_token { + Some(tok) => { + token += tok; + } + None => { + } + } + + return token; + } +} diff --git a/src/syncers/delete.rs b/src/syncers/delete.rs index c97204b..f07a910 100644 --- a/src/syncers/delete.rs +++ b/src/syncers/delete.rs @@ -1,4 +1,11 @@ use std::default::Default; +use std::io::Error; + +use reqwest; +use reqwest::Response; +use serde; +// use serde::Deserialize; +// use serde::Serialize; use crate::models; @@ -18,7 +25,36 @@ impl Default for Delete { } impl Delete { - pub fn delete_song(&self, token: &models::token::Token, song: &models::song::Song) { - let url = syncer_base::Syncer::retrieve_url(&self.api, &song); + pub async fn delete_song(&self, token: &models::token::Token, song: &models::song::Song) { + let url = self.retrieve_url(&song); + let client = reqwest::Client::new(); + let access_token = token.bearer_token(); + let response = client.delete(&url) + .header(reqwest::header::AUTHORIZATION, access_token) + .send() + .await + .unwrap(); + + match response.status() { + reqwest::StatusCode::OK => { + println!("Success!"); + } + other => { + panic!("Issue occurred: {:?}", other); + } + } + } + + fn retrieve_url(&self, song: &models::song::Song) -> String { + let api = &self.api; + let mut url: String = String::from(&api.url); + url += &String::from("api/"); + url += &String::from(&api.version); + url += &String::from("/"); + url += &String::from(&api.endpoint); + url += &String::from("/"); + url += &song.id.unwrap().to_string(); + + return url; } } diff --git a/src/syncers/download.rs b/src/syncers/download.rs index 2607afa..5abeba3 100644 --- a/src/syncers/download.rs +++ b/src/syncers/download.rs @@ -12,4 +12,15 @@ impl Default for Download { api: models::api::API::default(), } } +} + +impl Download { + pub async fn download_song(&self, token: &models::token::Token) { + } + + fn retrieve_url(&self) -> String { + let mut url: String = String::new(); + + return url; + } } \ No newline at end of file diff --git a/src/syncers/retrieve_records.rs b/src/syncers/retrieve_records.rs index b6039b1..538f151 100644 --- a/src/syncers/retrieve_records.rs +++ b/src/syncers/retrieve_records.rs @@ -1,7 +1,10 @@ use std::default::Default; +use std::io::Error; use crate::models; +// use super::syncer_base::Result; + pub struct RetrieveRecords { pub api: models::api::API, @@ -14,4 +17,50 @@ impl Default for RetrieveRecords { api: models::api::API::default(), } } +} + + +impl RetrieveRecords { + pub async fn get_all_songs(&self, token: &models::token::Token) + -> Result, Error> { + + let mut songs: Vec = Vec::new(); + let url = self.retrieve_url(); + let access_token = token.bearer_token(); + let client = reqwest::Client::new(); + let response = client.get(&url) + .header(reqwest::header::AUTHORIZATION, access_token) + .send() + .await + .unwrap(); + + + match response.status() { + reqwest::StatusCode::OK => { + // on success, parse our JSON to an APIResponse + let s = response.json::>().await; + match s { + // + Ok(parsed) => { + songs = parsed; + }, + Err(_) => println!("Hm, the response didn't match the shape we expected."), + }; + } + reqwest::StatusCode::UNAUTHORIZED => { + println!("Need to grab a new token"); + } + other => { + panic!("Uh oh! Something unexpected happened: {:?}", other); + } + } + + return Ok(songs); + } + + fn retrieve_url(&self) -> String { + let mut url: String = String::new(); + + return url; + } } \ No newline at end of file diff --git a/src/syncers/syncer_base.rs b/src/syncers/syncer_base.rs index 7cbc353..e816945 100644 --- a/src/syncers/syncer_base.rs +++ b/src/syncers/syncer_base.rs @@ -1,24 +1,13 @@ -use crate::models; +// use crate::models; pub struct Syncer { + // pub api: models::api::API, ok: i32, unauthorized: i32, not_found: i32, } impl Syncer { - pub fn retrieve_url(api: &models::api::API, song: &models::song::Song) -> String { - let mut url: String = String::from(&api.url); - url += &String::from("api/"); - url += &String::from(&api.version); - url += &String::from("/"); - url += &String::from(&api.endpoint); - url += &String::from("/"); - url += &song.id.unwrap().to_string(); - - return url; - } - pub fn ok() -> i32 { return 200; } diff --git a/src/syncers/upload.rs b/src/syncers/upload.rs index 809cc81..b463bc2 100644 --- a/src/syncers/upload.rs +++ b/src/syncers/upload.rs @@ -1,5 +1,8 @@ use std::default::Default; +use reqwest; +use reqwest::Response; + use crate::models; pub struct Upload { @@ -12,4 +15,33 @@ impl Default for Upload { api: models::api::API::default(), } } +} + +impl Upload { + pub async fn upload_song(&self, token: &models::token::Token, song: &models::song::Song) { + let url = self.retrieve_url(&song); + let client = reqwest::Client::new(); + let access_token = token.bearer_token(); + let response = client.post(&url) + .header(reqwest::header::AUTHORIZATION, access_token) + .send() + .await + .unwrap(); + + match response.status() { + reqwest::StatusCode::OK => { + println!("Success!"); + } + other => { + panic!("Issue occurred: {:?}", other); + } + } + } + + + fn retrieve_url(&self, song: &models::song::Song) -> String { + let mut url: String = String::new(); + + return url; + } } \ No newline at end of file