#[derive(Debug, thiserror::Error)]
pub enum DshError {
#[error("Certificates error: {0}")]
CertificatesError(#[from] crate::certificates::CertificatesError),
#[error("Datastream error: {0}")]
DatastreamError(#[from] crate::datastream::DatastreamError),
#[error("Utils error: {0}")]
UtilsError(#[from] crate::utils::UtilsError),
}
pub(crate) fn report(mut err: &dyn std::error::Error) -> String {
let mut s = format!("{}", err);
while let Some(src) = err.source() {
s.push_str(&format!("\n\nCaused by: {}", src));
err = src;
}
s
}
#[cfg(test)]
mod tests {
use super::*;
use crate::certificates::CertificatesError;
#[test]
fn test_dsh_error_and_report() {
let cert_err = CertificatesError::NoCertificates;
let dsh_err = DshError::from(cert_err);
let error_message = format!("{}", dsh_err);
println!("{}", error_message);
assert!(error_message.contains("Certificates error: Certificates are not set"));
let report_output = report(&dsh_err);
assert!(report_output.contains("Certificates are not set"));
}
}