Interrogate create_release result more closely
This commit is contained in:
@@ -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!();
|
||||||
|
|||||||
Reference in New Issue
Block a user