diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-05-12 12:39:10 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-05-12 12:39:10 +0200 |
commit | 1e4dff1995833538f436b381bc0450a7c0080bad (patch) | |
tree | 2dc620ac9ea683cbee412b8d5818b3992462677c /src/error/mod.rs | |
download | back-1e4dff1995833538f436b381bc0450a7c0080bad.zip |
chore: Initial commit
Based on the version that was previously in `vhack.eu/nixos-server/pkgs/by-name/ba/back`.
Diffstat (limited to 'src/error/mod.rs')
-rw-r--r-- | src/error/mod.rs | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/src/error/mod.rs b/src/error/mod.rs new file mode 100644 index 0000000..026cc58 --- /dev/null +++ b/src/error/mod.rs @@ -0,0 +1,135 @@ +// Back - An extremely simple git bug visualization system. Inspired by TVL's +// panettone. +// +// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de> +// Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This file is part of Back. +// +// You should have received a copy of the License along with this program. +// If not, see <https://www.gnu.org/licenses/agpl.txt>. + +use std::{fmt::Display, io, net::SocketAddr, path::PathBuf}; + +use gix::hash::Prefix; +use thiserror::Error; + +pub type Result<T> = std::result::Result<T, Error>; + +#[derive(Error, Debug)] +pub enum Error { + ConfigParse { + file: PathBuf, + error: serde_json::Error, + }, + + ProjectListRead { + file: PathBuf, + error: io::Error, + }, + ConfigRead { + file: PathBuf, + error: io::Error, + }, + NotGitBug { + path: PathBuf, + }, + RepoOpen { + repository_path: PathBuf, + error: Box<gix::open::Error>, + }, + RepoFind { + repository_path: PathBuf, + }, + RepoRefsIter(#[from] gix::refs::packed::buffer::open::Error), + RepoRefsPrefixed { + error: io::Error, + }, + + TcpBind { + addr: SocketAddr, + err: io::Error, + }, + TcpAccept { + err: io::Error, + }, + + IssuesPrefixMissing { + prefix: Prefix, + }, + IssuesPrefixParse(#[from] gix::hash::prefix::from_hex::Error), +} + +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::ConfigParse { file, error } => { + write!( + f, + "while trying to parse the config file ({}): {error}", + file.display() + ) + } + Error::ProjectListRead { file, error } => { + write!( + f, + "while trying to read the project.list file ({}): {error}", + file.display() + ) + } + Error::ConfigRead { file, error } => { + write!( + f, + "while trying to read the config file ({}): {error}", + file.display() + ) + } + Error::RepoOpen { + repository_path, + error, + } => { + write!( + f, + "while trying to open the repository ({}): {error}", + repository_path.display() + ) + } + Error::NotGitBug { path } => { + write!( + f, + "Repository ('{}') has no initialized git-bug data", + path.display() + ) + } + Error::RepoFind { repository_path } => { + write!( + f, + "failed to find the repository at path: '{}'", + repository_path.display() + ) + } + Error::RepoRefsIter(error) => { + write!(f, "while iteration over the refs in a repository: {error}",) + } + Error::RepoRefsPrefixed { error, .. } => { + write!(f, "while prefixing the refs with a path: {error}") + } + Error::IssuesPrefixMissing { prefix } => { + write!( + f, + "There is no 'issue' associated with the prefix: {prefix}" + ) + } + Error::IssuesPrefixParse(error) => { + write!(f, "The given prefix can not be parsed as prefix: {error}") + } + Error::TcpBind { addr, err } => { + write!(f, "while trying to open tcp {addr} for listening: {err}.") + } + Error::TcpAccept { err } => { + write!(f, "while trying to accept a tcp connection: {err}.") + } + } + } +} |