Create initial project structure

The initial project structure includes the base scaffolding of the
application as well as the ability to fetch the repo list from the
remote endpoint.
This commit is contained in:
Anthony Oteri
2023-09-13 17:37:28 -04:00
parent 556a715b42
commit 7b0c3f1dcc
9 changed files with 348 additions and 1 deletions
+71
View File
@@ -0,0 +1,71 @@
#![allow(clippy::enum_variant_names)]
use thiserror::Error;
/// The common error type for this Application.
#[derive(Error, Debug)]
pub enum DredgeError {
/// An error related to the configuration of the program.
#[error(transparent)]
ConfigError(#[from] ConfigError),
/// An error communicating with the Registry API
#[error(transparent)]
ApiError(#[from] ApiError),
}
/// An error related to the configuration fo the program.
#[derive(Error, Debug)]
pub enum ConfigError {
/// An error parsing the configuration from disk.
#[error("Failed to parse configuration file")]
ParseError(Box<dyn std::error::Error>),
/// An error writing the configuration to disk.
#[error("Failed to write configuration data")]
WriteError(Box<dyn std::error::Error>),
/// A generic IOError
#[error(transparent)]
IOError(#[from] std::io::Error),
}
impl From<toml::ser::Error> for ConfigError {
fn from(other: toml::ser::Error) -> Self {
Self::WriteError(Box::from(other))
}
}
impl From<toml::de::Error> for ConfigError {
fn from(other: toml::de::Error) -> Self {
Self::ParseError(Box::from(other))
}
}
impl From<xdg::BaseDirectoriesError> for ConfigError {
fn from(other: xdg::BaseDirectoriesError) -> Self {
Self::WriteError(Box::from(other))
}
}
/// An error related to the communication with the registry API.
#[derive(Error, Debug)]
pub enum ApiError {
/// Error parsing a URL
#[error(transparent)]
UrlParseError(#[from] url::ParseError),
/// Error in HTTP Request
#[error(transparent)]
HttpError(#[from] reqwest::Error),
#[error("Failed to parse response headers")]
ResponseHeaderParseError(Box<dyn std::error::Error>),
}
impl From<reqwest::header::ToStrError> for ApiError {
fn from(other: reqwest::header::ToStrError) -> Self {
Self::ResponseHeaderParseError(Box::from(other))
}
}