1#![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
33pub 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}