From 2f7196dbfc5e8a98c41b7794f517d4a5deab8176 Mon Sep 17 00:00:00 2001 From: ryneeverett Date: Sun, 15 Jan 2023 16:31:46 -0500 Subject: [PATCH] Don't expose third-party errors in public API. --- taskchampion/taskchampion/src/errors.rs | 29 +++++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/taskchampion/taskchampion/src/errors.rs b/taskchampion/taskchampion/src/errors.rs index fb2bae028..473f13487 100644 --- a/taskchampion/taskchampion/src/errors.rs +++ b/taskchampion/taskchampion/src/errors.rs @@ -19,20 +19,25 @@ pub enum Error { /// A usage error #[error("User Error: {0}")] Usage(String), - - /// Error conversions. - #[error(transparent)] - Http(#[from] ureq::Error), - #[error(transparent)] - Io(#[from] io::Error), - #[error(transparent)] - Json(#[from] serde_json::Error), + /// A general error. #[error(transparent)] Other(#[from] anyhow::Error), - #[error("Third Party Sqlite Error")] - Rusqlite(#[from] rusqlite::Error), - #[error(transparent)] - Sqlite(#[from] crate::storage::sqlite::SqliteError), } +/// Convert private and third party errors into Error::Other. +macro_rules! convert_error { + ( $error:ty ) => { + impl From<$error> for Error { + fn from(err: $error) -> Self { + Self::Other(err.into()) + } + } + }; +} +convert_error!(ureq::Error); +convert_error!(io::Error); +convert_error!(serde_json::Error); +convert_error!(rusqlite::Error); +convert_error!(crate::storage::sqlite::SqliteError); + pub type Result = std::result::Result;