diff options
Diffstat (limited to 'pkgs/by-name/ba/back/src/error')
-rw-r--r-- | pkgs/by-name/ba/back/src/error/mod.rs | 44 | ||||
-rw-r--r-- | pkgs/by-name/ba/back/src/error/responder.rs | 23 |
2 files changed, 64 insertions, 3 deletions
diff --git a/pkgs/by-name/ba/back/src/error/mod.rs b/pkgs/by-name/ba/back/src/error/mod.rs index 7e1c9cf..8b71700 100644 --- a/pkgs/by-name/ba/back/src/error/mod.rs +++ b/pkgs/by-name/ba/back/src/error/mod.rs @@ -1,9 +1,24 @@ +// Back - An extremely simple git issue tracking system. Inspired by tvix's +// panettone +// +// Copyright (C) 2024 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, path::PathBuf}; use thiserror::Error; +use crate::web::prefix::BackPrefix; + pub type Result<T> = std::result::Result<T, Error>; +pub mod responder; + #[derive(Error, Debug)] pub enum Error { ConfigParse { @@ -14,11 +29,19 @@ pub enum Error { file: PathBuf, error: io::Error, }, + RocketLaunch(#[from] rocket::Error), + RepoOpen { repository_path: PathBuf, error: Box<gix::open::Error>, }, - RocketLaunch(#[from] rocket::Error), + 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 { @@ -38,6 +61,9 @@ impl Display for Error { file.display() ) } + Error::RocketLaunch(error) => { + write!(f, "while trying to start back: {error}") + } Error::RepoOpen { repository_path, error, @@ -48,8 +74,20 @@ impl Display for Error { repository_path.display() ) } - Error::RocketLaunch(error) => { - write!(f, "while trying to start back: {error}") + 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}") } } } diff --git a/pkgs/by-name/ba/back/src/error/responder.rs b/pkgs/by-name/ba/back/src/error/responder.rs new file mode 100644 index 0000000..7bea961 --- /dev/null +++ b/pkgs/by-name/ba/back/src/error/responder.rs @@ -0,0 +1,23 @@ +// Back - An extremely simple git issue tracking system. Inspired by tvix's +// panettone +// +// Copyright (C) 2024 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 rocket::{ + response::{self, Responder, Response}, + Request, +}; + +use super::Error; + +impl<'r> Responder<'r, 'static> for Error { + fn respond_to(self, req: &'r Request<'_>) -> response::Result<'static> { + Response::build_from(self.to_string().respond_to(req)?).ok() + } +} |