Skip to main content

azums_core/
lib.rs

1//! # Azums Core
2//!
3//! Zero-dependency core traits, models, and [`QueueError`] for `azums`.
4
5#![deny(unsafe_code)]
6#![allow(clippy::double_must_use)]
7#![cfg_attr(not(feature = "std"), no_std)]
8
9#[cfg(feature = "alloc")]
10extern crate alloc;
11
12pub mod backend;
13pub mod error;
14pub mod model;
15pub mod semantics;
16
17pub use backend::{
18    CallRecord, JobExplanation, JobObservationEvent, MemoryAttempt, MemoryBackend, MockBackend,
19    NotificationStream, ObservabilityBackend, QueueMetrics, StorageBackend, StreamBackend,
20};
21pub use error::{Error, QueueError};
22pub use model::{
23    BackendCapabilities, BackendSemanticCapabilities, BackpressureCapability,
24    ConsumerGroupCapability, ConsumerGroupStatus, DurabilityCapability, Event, Job, JobExecution,
25    JobHandler, JobLifecycleState, JobListItem, JobProcessor, JobStatus, NewEvent, NewJob,
26    NotificationCapability, OrderingCapability, Queue, QueueConfig, QueueOrdering,
27    RetentionCapability, TransactionalEnqueueCapability, Worker,
28};
29pub use semantics::{
30    semantic_contract, SemanticBehavior, SemanticClassification, SemanticContract,
31};
32
33/// Helper function to extract a human-readable panic message string from a panic payload.
34pub fn format_panic_message(err: Box<dyn std::any::Any + Send>) -> String {
35    if let Some(s) = err.downcast_ref::<&str>() {
36        s.to_string()
37    } else if let Some(s) = err.downcast_ref::<String>() {
38        s.clone()
39    } else {
40        "job handler panicked with unknown payload".to_string()
41    }
42}