diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-06 15:45:11 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-06 15:45:11 +0200 |
commit | a6baea06697f6c76c695dc4198099deb8ba916e0 (patch) | |
tree | 476a3865f6b4bef04751ba20534813a58892811b /src/error/mod.rs | |
parent | chore: Initial commit (diff) | |
download | back-a6baea06697f6c76c695dc4198099deb8ba916e0.zip |
feat(treewide): Prepare for first release
This commit contains many changes, as they were developed alongside `git-bug-rs` and unfortunately not separately committed. A toplevel summary would include: - Appropriate redirects, - The templating moved to `vy` (as this works with rustfmt formatting), - Search support (via `git-bug-rs`), - And better layout in the link section.
Diffstat (limited to 'src/error/mod.rs')
-rw-r--r-- | src/error/mod.rs | 165 |
1 files changed, 63 insertions, 102 deletions
diff --git a/src/error/mod.rs b/src/error/mod.rs index 026cc58..f109e11 100644 --- a/src/error/mod.rs +++ b/src/error/mod.rs @@ -10,126 +10,87 @@ // 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 std::{io, net::SocketAddr, path::PathBuf}; -use gix::hash::Prefix; +use git_bug::{ + entities::{identity::Identity, issue::Issue}, + replica::{ + self, + entity::{ + id::prefix::{self, IdPrefix}, + snapshot::Snapshot, + }, + }, +}; use thiserror::Error; -pub type Result<T> = std::result::Result<T, Error>; +pub(crate) type Result<T> = std::result::Result<T, Error>; #[derive(Error, Debug)] pub enum Error { + #[error("while trying to parse the config file ({file}): {error}")] ConfigParse { file: PathBuf, error: serde_json::Error, }, - ProjectListRead { - file: PathBuf, - error: io::Error, - }, - ConfigRead { - file: PathBuf, - error: io::Error, - }, - NotGitBug { - path: PathBuf, - }, + #[error("while trying to read the project.list file ({file}): {error}")] + ProjectListRead { file: PathBuf, error: io::Error }, + + #[error("while trying to read the config file ({file}): {error}")] + ConfigRead { file: PathBuf, error: io::Error }, + + #[error("Repository ('{path}') has no initialized git-bug data")] + NotGitBug { path: PathBuf }, + + #[error("while trying to open the repository ({repository_path}): {error}")] RepoOpen { repository_path: PathBuf, - error: Box<gix::open::Error>, - }, - RepoFind { - repository_path: PathBuf, + error: Box<replica::open::Error>, }, + + #[error("while trying to get an entity reference from a replica: {0}")] + RepoGetReferences(#[from] replica::get::Error), + + #[error("while trying to read an issues's data from a replica: {0}")] + RepoIssueRead(#[from] replica::entity::read::Error<Issue>), + + #[error("while trying to read an identity's data from a replica: {0}")] + RepoIdentityRead(#[from] replica::entity::read::Error<Identity>), + + #[error("failed to find the repository at path: '{repository_path}'")] + RepoFind { repository_path: PathBuf }, + + #[error("while iteration over the refs in a repository: {0}")] RepoRefsIter(#[from] gix::refs::packed::buffer::open::Error), - RepoRefsPrefixed { - error: io::Error, - }, - TcpBind { - addr: SocketAddr, - err: io::Error, - }, - TcpAccept { - err: io::Error, - }, + #[error("while prefixing the refs with a path: {error}")] + RepoRefsPrefixed { error: io::Error }, + + #[error("while trying to open tcp {addr} for listening: {err}.")] + TcpBind { addr: SocketAddr, err: io::Error }, + #[error("while trying to accept a tcp connection: {err}.")] + TcpAccept { err: io::Error }, + + #[error("There is no 'issue' associated with the prefix '{prefix}': {err}")] IssuesPrefixMissing { - prefix: Prefix, + prefix: Box<IdPrefix>, + err: prefix::resolve::Error, }, - 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}.") - } - } - } + #[error("The given prefix ('{prefix}') can not be parsed as prefix: {error}")] + IssuesPrefixParse { + prefix: String, + error: prefix::decode::Error, + }, + + #[error("Route '{0}' was unknown.")] + NotFound(PathBuf), + + #[error("Query '{query}' was not valid: {err}")] + InvalidQuery { + err: git_bug::query::parse::parser::Error<Snapshot<Issue>>, + query: String, + }, } |