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 53 54 55 56 57 58
use reqwest::Client; use reqwest::Error as ReqwestError; use serde::{Deserialize, Serialize}; #[derive(Debug)] pub enum DeleteFileError { SendFailed(ReqwestError), ReceiveFailed(ReqwestError), InvalidAuth, ExpiredAuth, FileNotFound, FileDeleted, Unspecified, } pub struct DeleteFileRequest { pub username: String, pub auth: String, pub file_id: String, } #[derive(Serialize, Deserialize, Debug, PartialEq)] pub struct DeleteFileResponse { pub error_code: String, } pub fn delete_file( api_location: String, params: &DeleteFileRequest, ) -> Result<(), DeleteFileError> { let client = Client::new(); let form_params = [ ("username", params.username.as_str()), ("auth", params.auth.as_str()), ("file_id", params.file_id.as_str()), ]; let mut response = client .delete(format!("{}/delete-file", api_location).as_str()) .form(&form_params) .send() .map_err(|err| DeleteFileError::SendFailed(err))?; let response_body = response .json::<DeleteFileResponse>() .map_err(|err| DeleteFileError::ReceiveFailed(err))?; match ( response.status().as_u16(), response_body.error_code.as_str(), ) { (200..=299, _) => Ok(()), (401, "invalid_auth") => Err(DeleteFileError::InvalidAuth), (401, "expired_auth") => Err(DeleteFileError::ExpiredAuth), (404, "file_not_found") => Err(DeleteFileError::FileNotFound), (410, "file_deleted") => Err(DeleteFileError::FileDeleted), _ => Err(DeleteFileError::Unspecified), } }