It all falls into place! I had been dreading doing this bit, but after updating the usage guide I realized the CLI args should be split, too. Which finally means that I can just glue on the PWD name as a final fallback for the repo name. Try the args, then the config file(s), then PWD. If nothing works, the user is in a world of hurt. Bail out.
49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
pub mod api;
|
|
pub mod cli;
|
|
pub mod config;
|
|
pub mod structs;
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
pub struct ApiError {
|
|
message: String,
|
|
url: String,
|
|
}
|
|
|
|
pub(crate) async fn decode_client_error(response: reqwest::Response) -> Result<ApiError> {
|
|
response
|
|
.json::<ApiError>()
|
|
.await
|
|
.map_err(crate::Error::WrappedReqwestErr)
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub enum Error {
|
|
Placeholder, // TODO: Enumerate error modes
|
|
MissingGiteaUrl, // the gitea URL wasn't specified on the CLI, env, or config file.
|
|
MissingRepoFRQN, // either the owner, repo, or both weren't specified in the loaded PartialConfig
|
|
MissingRepoOwner,
|
|
MissingRepoName,
|
|
WrappedConfigErr(config::Error),
|
|
WrappedReqwestErr(reqwest::Error),
|
|
MissingAuthToken,
|
|
NoSuchFile, // for release attachment 'file exists' pre-check.
|
|
NoSuchRelease,
|
|
ApiErrorMessage(ApiError),
|
|
}
|
|
|
|
impl From<reqwest::Error> for crate::Error {
|
|
fn from(value: reqwest::Error) -> Self {
|
|
Self::WrappedReqwestErr(value)
|
|
}
|
|
}
|
|
|
|
impl From<crate::config::Error> for crate::Error {
|
|
fn from(value: crate::config::Error) -> Self {
|
|
Self::WrappedConfigErr(value)
|
|
}
|
|
}
|
|
|
|
type Result<T> = core::result::Result<T, Error>;
|