1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
use reqwest::Client; use reqwest::Error as ReqwestError; use serde::{Deserialize, Serialize}; #[derive(Debug)] pub enum GetUpdatesError { SendFailed(ReqwestError), ReceiveFailed(ReqwestError), InvalidAuth, ExpiredAuth, Unspecified, } pub struct GetUpdatesRequest { pub username: String, pub auth: String, pub since_version: u64, } #[derive(Serialize, Deserialize, Debug, PartialEq)] pub struct FileMetadata { pub file_id: String, pub file_name: String, pub file_path: String, pub file_content_version: u64, pub file_metadata_version: u64, pub deleted: bool, } pub fn get_updates( api_location: String, params: &GetUpdatesRequest, ) -> Result<Vec<FileMetadata>, GetUpdatesError> { let client = Client::new(); let mut response = client .get( format!( "{}/get-updates/{}/{}/{}", api_location, params.username, params.auth, params.since_version ) .as_str(), ) .send() .map_err(|err| GetUpdatesError::SendFailed(err))?; match response.status().as_u16() { 200..=299 => Ok(response .json::<Vec<FileMetadata>>() .map_err(|err| GetUpdatesError::ReceiveFailed(err))?), _ => Err(GetUpdatesError::Unspecified), } }