From 1e4dff1995833538f436b381bc0450a7c0080bad Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Mon, 12 May 2025 12:39:10 +0200 Subject: chore: Initial commit Based on the version that was previously in `vhack.eu/nixos-server/pkgs/by-name/ba/back`. --- src/error/mod.rs | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 src/error/mod.rs (limited to 'src/error/mod.rs') 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 +// Copyright (C) 2025 Benedikt Peetz +// 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 . + +use std::{fmt::Display, io, net::SocketAddr, path::PathBuf}; + +use gix::hash::Prefix; +use thiserror::Error; + +pub type Result = std::result::Result; + +#[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, + }, + 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}.") + } + } + } +} -- cgit 1.4.1