// Back - An extremely simple git issue tracking system. Inspired by tvix's // panettone // // Copyright (C) 2024 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, path::PathBuf}; use thiserror::Error; use crate::web::prefix::BackPrefix; pub type Result = std::result::Result; pub mod responder; #[derive(Error, Debug)] pub enum Error { ConfigParse { file: PathBuf, error: serde_json::Error, }, ConfigRead { file: PathBuf, error: io::Error, }, RocketLaunch(#[from] rocket::Error), RepoOpen { repository_path: PathBuf, error: Box, }, RepoRefsIter(#[from] gix::refs::packed::buffer::open::Error), RepoRefsPrefixed(#[from] std::io::Error), IssuesPrefixMissing { prefix: BackPrefix, }, 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::ConfigRead { file, error } => { write!( f, "while trying to read the config file ({}): {error}", file.display() ) } Error::RocketLaunch(error) => { write!(f, "while trying to start back: {error}") } Error::RepoOpen { repository_path, error, } => { write!( f, "while trying to open the repository ({}): {error}", 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}") } } } }