Miscellaneous code cleanup

This commit is contained in:
Anthony Oteri
2023-09-21 15:56:34 -04:00
parent 97275a9dcd
commit cead0006a4
3 changed files with 10 additions and 94 deletions
-46
View File
@@ -1,46 +0,0 @@
/*
* Copyright 2023 Anthony Oteri
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
use std::fs;
use std::path::Path;
use serde::{Deserialize, Serialize};
use url::Url;
use crate::error::ConfigError;
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct Config {
pub registry_url: Url,
}
impl Default for Config {
fn default() -> Self {
Self {
registry_url: Url::parse("https://localhost:5000").unwrap(),
}
}
}
impl TryFrom<&Path> for Config {
type Error = ConfigError;
fn try_from(path: &Path) -> Result<Self, Self::Error> {
let contents = fs::read_to_string(path)?;
let config: Self = toml::from_str(&contents)?;
Ok(config)
}
}
-38
View File
@@ -21,10 +21,6 @@ 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),
@@ -34,40 +30,6 @@ pub enum DredgeError {
RegistryUrlError(String),
}
/// 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 {
+10 -10
View File
@@ -27,10 +27,12 @@ use crate::error::DredgeError;
mod api;
pub(crate) mod cli;
mod commands;
mod config;
mod error;
/// Generate the full Docker Registry URL from a given `host[:port]`
/// Name of "latest" tag
const LATEST: &str = "latest";
/// Parse the "<REGISTRY>" argument into a complete Docker Registry URL.
///
/// This prepends the HTTPS scheme and converts the given string to a `Url`
/// instance.
@@ -42,14 +44,11 @@ mod error;
///
/// If there is a problem parsing the resulting string as a valid URL, a
/// `DredgeError::RegistryUrlError` will be returned.
fn make_registry_url(host: &str) -> Result<Url, DredgeError> {
fn parse_registry_arg(host: &str) -> Result<Url, DredgeError> {
log::trace!("make_registry_url(host: {host})");
Url::parse(host)
.or_else(|_| {
let url_string = format!("https://{host}");
Url::parse(&url_string)
})
.or_else(|_| Url::parse(&format!("https://{host}")))
.or(Err(DredgeError::RegistryUrlError(host.to_string())))
}
@@ -61,14 +60,15 @@ async fn main() -> Result<(), DredgeError> {
let log_level = args.log_level;
femme::with_level(log::LevelFilter::from(log_level));
// -- Generate the complete registry URL from the given host[:path]
let registry_url: Url = make_registry_url(&args.registry)?;
// -- Parse the given <REGISTRY> argument into a complete URL
let registry_url: Url = parse_registry_arg(&args.registry)?;
// -- Dispatch control to the appropriate command handler.
match args.command {
Commands::Catalog => commands::catalog_handler(&registry_url).await?,
Commands::Tags { name } => commands::tags_handler(&registry_url, &name).await?,
Commands::Show { image, tag } => {
commands::show_handler(&registry_url, &image, &tag.unwrap_or("latest".to_string()))
commands::show_handler(&registry_url, &image, &tag.unwrap_or(LATEST.to_string()))
.await?;
}
Commands::Delete { image, tag } => {