Skip to main content

rnotifylib/send_error/
reported.rs

1use std::error::Error;
2use crate::message::Message;
3use crate::send_error::borrowed::SendErrorBorrowed;
4use crate::send_error::owned::SendErrorOwned;
5use crate::send_error::SendError;
6
7#[derive(Debug)]
8pub struct ReportedSendError<'a> {
9    send_err: SendErrorBorrowed<'a>,
10    error_report_summary: ErrorReportSummary,
11}
12
13impl<'a> ReportedSendError<'a> {
14    pub fn new(send_err: SendErrorBorrowed<'a>, error_report_summary: ErrorReportSummary) -> Self {
15        Self {
16            send_err,
17            error_report_summary,
18        }
19    }
20
21    pub fn get_report_summary(&self) -> &ErrorReportSummary {
22        &self.error_report_summary
23    }
24}
25
26impl<'a> SendError for ReportedSendError<'a> {
27    fn get_error(&self) -> &Box<dyn Error> {
28        &self.send_err.get_error()
29    }
30
31    fn get_failed_destination_id(&self) -> &str {
32        &self.send_err.get_failed_destination_id()
33    }
34
35    fn get_failed_message(&self) -> &Message {
36        self.send_err.get_failed_message()
37    }
38}
39
40#[derive(Default, Debug)]
41pub struct ErrorReportSummary {
42    /// Whether the error was reported to any error-receiving destination
43    reported: bool,
44    /// Destinations that a report was attempted but failed.
45    error_report_failures: Vec<SendErrorOwned>
46}
47
48impl ErrorReportSummary {
49    pub fn new(reported: bool, error_report_failures: Vec<SendErrorOwned>) -> Self {
50        Self {
51            reported,
52            error_report_failures,
53        }
54    }
55
56    pub fn was_reported(&self) -> bool {
57        self.reported
58    }
59
60    pub fn get_report_failures(&self) -> &Vec<SendErrorOwned> {
61        &self.error_report_failures
62    }
63}