qubit_progress/error/
delivery_error.rs1use std::error::Error;
12use std::fmt;
13
14use crate::Event;
15use crate::error::ReporterError;
16
17#[derive(Clone, Debug)]
19pub struct DeliveryError {
20 event: Box<Event>,
21 source: ReporterError,
22}
23
24impl DeliveryError {
25 pub(crate) fn new(event: Event, source: ReporterError) -> Self {
27 Self {
28 event: Box::new(event),
29 source,
30 }
31 }
32
33 #[must_use]
35 pub const fn event(&self) -> &Event {
36 &self.event
37 }
38
39 #[must_use]
41 pub const fn reporter_error(&self) -> &ReporterError {
42 &self.source
43 }
44
45 #[must_use]
47 pub fn into_event(self) -> Event {
48 *self.event
49 }
50
51 #[must_use]
53 pub fn into_reporter_error(self) -> ReporterError {
54 self.source
55 }
56
57 #[must_use]
59 pub fn into_parts(self) -> (Event, ReporterError) {
60 (*self.event, self.source)
61 }
62}
63
64impl fmt::Display for DeliveryError {
65 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
67 write!(
68 formatter,
69 "delivery of {} event for operation {} sequence {} failed: {}",
70 self.event.phase().as_str(),
71 self.event.operation_id(),
72 self.event.sequence(),
73 self.source,
74 )
75 }
76}
77
78impl Error for DeliveryError {
79 fn source(&self) -> Option<&(dyn Error + 'static)> {
81 Some(&self.source)
82 }
83}