The function `std::fs::exists(...)` was stabilized in Rust 1.81, which means it can't be used in the Debian Bookworm build. This patch swaps to a compatible implementation leaning on the std::path::Path struct. I'm both "upstreaming" a Debian-specific patch I had to make for the package, and fixing the additional usage now in `main.rs`. There doesn't seem to be any compelling reason to avoid using this function, so I figure I should merge it into the base release.
57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
use std::{fs, path};
|
|
|
|
use crate::structs::Attachment;
|
|
|
|
pub fn check_release_match_repo() {}
|
|
pub fn get_release_attachment() {}
|
|
pub fn list_release_attachments() {
|
|
todo!();
|
|
}
|
|
pub async fn create_release_attachment(
|
|
client: &reqwest::Client,
|
|
gitea_url: &str,
|
|
repo: &str,
|
|
release_id: usize,
|
|
file: String,
|
|
) -> crate::Result<Attachment> {
|
|
let request_url = format!("{gitea_url}/api/v1/repos/{repo}/releases/{release_id}/assets");
|
|
|
|
let path = path::Path::new(&file);
|
|
match path.try_exists() {
|
|
Ok(true) => (),
|
|
Ok(false) => return Err(crate::Error::NoSuchFile),
|
|
Err(e) => {
|
|
eprintln!("Uh oh! The file-exists check couldn't be done: {e}");
|
|
panic!("TODO: Deal with scenario where the file's existence cannot be checked (e.g.: no permission)");
|
|
},
|
|
}
|
|
|
|
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 response = client
|
|
.post(&request_url)
|
|
.multipart(form)
|
|
.query(&[("name", file.split("/").last())])
|
|
.send()
|
|
.await?;
|
|
if response.status().is_success() {
|
|
// TODO: create a struct Attachment and return it to the caller.
|
|
let attachment_desc = response
|
|
.json::<Attachment>()
|
|
.await
|
|
.map_err(|e| crate::Error::from(e))?;
|
|
return Ok(attachment_desc);
|
|
} else if response.status().is_client_error() {
|
|
let mesg = crate::decode_client_error(response).await?;
|
|
return Err(crate::Error::ApiErrorMessage(mesg));
|
|
}
|
|
panic!("Reached end of release_attachment without matching a return path");
|
|
}
|
|
pub fn edit_release_attachment() {}
|
|
pub fn delete_release_attachment() {}
|