Interrogate create_release result more closely

This commit is contained in:
2025-06-07 23:22:20 -05:00
parent 6bdad44cc6
commit 96e9ff4ce6

View File

@@ -45,14 +45,6 @@ pub async fn list_releases(
panic!("Reached end of list_releases without matching a return pathway."); panic!("Reached end of list_releases without matching a return pathway.");
} }
#[derive(Debug, Deserialize, Serialize)]
#[serde(untagged)]
enum CreateResult {
Success(structs::release::Release),
ErrWithMessage(ApiError),
Empty,
}
pub async fn create_release( pub async fn create_release(
client: &reqwest::Client, client: &reqwest::Client,
gitea_url: &str, gitea_url: &str,
@@ -60,27 +52,28 @@ pub async fn create_release(
submission: CreateReleaseOption, submission: CreateReleaseOption,
) -> Result<Release> { ) -> Result<Release> {
let request_url = format!("{gitea_url}/api/v1/repos/{repo}/releases"); let request_url = format!("{gitea_url}/api/v1/repos/{repo}/releases");
let req = client let response = client
.post(request_url) .post(request_url)
.json(&submission) .json(&submission)
.send() .send()
.await .await
.map_err(|e| crate::Error::from(e))?; .map_err(|e| crate::Error::from(e))?;
let new_release = req if response.status().is_success() {
.json::<CreateResult>() let new_release = response
.json::<Release>()
.await .await
.map_err(|e| crate::Error::from(e))?; .map_err(|e| crate::Error::from(e))?;
match new_release { return Ok(new_release);
CreateResult::Success(release) => Ok(release), } else if response.status().is_client_error() {
CreateResult::ErrWithMessage(api_error) => { let mesg = response
if api_error.message == "token is required" { .json::<ApiError>()
Err(crate::Error::MissingAuthToken) .await
} else { .map_err(|reqwest_err| {
Err(crate::Error::ApiErrorMessage(api_error)) crate::Error::WrappedReqwestErr(reqwest_err)
} })?;
} return Err(crate::Error::ApiErrorMessage(mesg))
CreateResult::Empty => panic!("How can we have 200 OK and no release info? No. Crash"),
} }
panic!("Reached end of create_release without matching a return path");
} }
pub fn edit_release(id: u64) -> Result<Release> { pub fn edit_release(id: u64) -> Result<Release> {
todo!(); todo!();