From 80e428ee60b51174593cd61ca3f85c37047dfbb0 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 25 Mar 2026 17:17:25 -0400 Subject: [PATCH] errors --- crates/lib/pager/src/client/pager_builder.rs | 4 ++-- crates/lib/pager/src/error/mod.rs | 1 + .../pager/src/error/pager_builder_error.rs | 19 +++++++++++++++++++ crates/lib/pager/src/error/pager_error.rs | 13 ++++++++++++- .../lib/pager/src/error/pager_system_error.rs | 6 +----- 5 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 crates/lib/pager/src/error/pager_builder_error.rs diff --git a/crates/lib/pager/src/client/pager_builder.rs b/crates/lib/pager/src/client/pager_builder.rs index a83e96cc83..c45f9aefa3 100644 --- a/crates/lib/pager/src/client/pager_builder.rs +++ b/crates/lib/pager/src/client/pager_builder.rs @@ -4,8 +4,8 @@ use rootly_client::creds::rootly_api_key::RootlyApiKey; use crate::client::pager::Pager; use crate::client::pager_client::{PagerClient, PagerClientConfig}; +use crate::error::pager_builder_error::PagerBuilderError; use crate::error::pager_error::PagerError; -use crate::error::pager_system_error::PagerSystemError; use crate::worker::pager_worker_message_queue::{new_shared_queue, new_shared_queue_with_capacity, PagerWorkerMessageQueue}; use crate::worker::pager_worker::PagerWorker; @@ -104,7 +104,7 @@ impl PagerBuilder { fn make_client(&self) -> Result { let client_config = self.client_config.clone() - .ok_or(PagerSystemError::NoBackendConfigured)?; + .ok_or(PagerBuilderError::NoBackendConfigured)?; Ok(PagerClient::new(client_config, self.application_name.clone(), self.environment.clone())) } diff --git a/crates/lib/pager/src/error/mod.rs b/crates/lib/pager/src/error/mod.rs index 0bdf17fee4..f7371b8fb6 100644 --- a/crates/lib/pager/src/error/mod.rs +++ b/crates/lib/pager/src/error/mod.rs @@ -1,3 +1,4 @@ +pub mod pager_builder_error; pub mod pager_error; pub mod pager_service_error; pub mod pager_system_error; diff --git a/crates/lib/pager/src/error/pager_builder_error.rs b/crates/lib/pager/src/error/pager_builder_error.rs new file mode 100644 index 0000000000..140c1661e6 --- /dev/null +++ b/crates/lib/pager/src/error/pager_builder_error.rs @@ -0,0 +1,19 @@ +use std::error::Error; +use std::fmt::{Display, Formatter}; + +/// Errors from building/configuring a Pager instance. +#[derive(Debug)] +pub enum PagerBuilderError { + /// The pager was not configured with a backend. + NoBackendConfigured, +} + +impl Error for PagerBuilderError {} + +impl Display for PagerBuilderError { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + Self::NoBackendConfigured => write!(f, "No pager backend configured. Call .rootly() or .client_config() on PagerBuilder."), + } + } +} diff --git a/crates/lib/pager/src/error/pager_error.rs b/crates/lib/pager/src/error/pager_error.rs index debbc8d09c..24e1c7d8e2 100644 --- a/crates/lib/pager/src/error/pager_error.rs +++ b/crates/lib/pager/src/error/pager_error.rs @@ -1,16 +1,20 @@ use std::error::Error; use std::fmt::{Display, Formatter}; +use crate::error::pager_builder_error::PagerBuilderError; use crate::error::pager_service_error::PagerServiceError; use crate::error::pager_system_error::PagerSystemError; /// Top-level error type for the pager library. #[derive(Debug)] pub enum PagerError { + /// An error during Pager construction/configuration. + Builder(PagerBuilderError), + /// A third-party paging service (Rootly, etc.) returned an error. Service(PagerServiceError), - /// Our own pager system broke (configuration, mutex, queue, etc.). + /// Our own pager system broke (mutex, queue, etc.). System(PagerSystemError), } @@ -19,12 +23,19 @@ impl Error for PagerError {} impl Display for PagerError { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { + Self::Builder(err) => write!(f, "PagerBuilderError: {}", err), Self::Service(err) => write!(f, "PagerServiceError: {}", err), Self::System(err) => write!(f, "PagerSystemError: {}", err), } } } +impl From for PagerError { + fn from(err: PagerBuilderError) -> Self { + Self::Builder(err) + } +} + impl From for PagerError { fn from(err: PagerServiceError) -> Self { Self::Service(err) diff --git a/crates/lib/pager/src/error/pager_system_error.rs b/crates/lib/pager/src/error/pager_system_error.rs index 85e5486fd4..33b6b92e99 100644 --- a/crates/lib/pager/src/error/pager_system_error.rs +++ b/crates/lib/pager/src/error/pager_system_error.rs @@ -1,12 +1,9 @@ use std::error::Error; use std::fmt::{Display, Formatter}; -/// Errors from our own pager system (configuration, concurrency, etc.). +/// Errors from our own pager system at runtime (concurrency, queue, etc.). #[derive(Debug)] pub enum PagerSystemError { - /// The pager was not configured with a backend. - NoBackendConfigured, - /// The message queue was not configured. Use `build_with_worker()` to enable queuing. QueueNotConfigured, @@ -19,7 +16,6 @@ impl Error for PagerSystemError {} impl Display for PagerSystemError { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { - Self::NoBackendConfigured => write!(f, "No pager backend configured. Call .rootly() or .client_config() on PagerBuilder."), Self::QueueNotConfigured => write!(f, "Pager message queue not configured. Use build_with_worker() to enable queuing."), Self::MutexPoisoned(msg) => write!(f, "Pager mutex poisoned: {}", msg), }