diff --git a/src/api/release_attachment.rs b/src/api/release_attachment.rs index 2a1ceec..1c61b2f 100644 --- a/src/api/release_attachment.rs +++ b/src/api/release_attachment.rs @@ -1,10 +1,45 @@ +use std::fs; + pub fn check_release_match_repo(){} pub fn get_release_attachment(){} pub fn list_release_attachments(){ todo!(); } -pub fn create_release_attachment(){} +pub async fn create_release_attachment( + client: &reqwest::Client, + gitea_url: &str, + repo: &str, + release_id: usize, + files: Vec, +) -> crate::Result<()> { + let request_url = format!("{gitea_url}/api/v1/repos/{repo}/releases/{release_id}/assets"); + + // Ensure all files exists before starting the uploads + for file in &files { + if let Err(e) = fs::exists(file) { + return Err(crate::Error::NoSuchFile); + } + } + + for file in files { + println!("Uploading file {}", &file); + let data = reqwest::multipart::Part::stream(fs::read(&file).unwrap()) + .file_name("attachment") + .mime_str("text/plain")?; + + let form= reqwest::multipart::Form::new() + .part("attachment", data); + + let request = client + .post(&request_url) + .multipart(form) + .query(&[("name", file.split("/").last())]) + .send() + .await?; + } + Ok(()) +} pub fn edit_release_attachment(){} pub fn delete_release_attachment(){} diff --git a/src/lib.rs b/src/lib.rs index a426c9d..2e07f25 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,6 +15,7 @@ pub enum Error { Placeholder, // TODO: Enumerate error modes WrappedReqwestErr(reqwest::Error), MissingAuthToken, + NoSuchFile, // for release attachment 'file exists' pre-check. } impl From for crate::Error {