]> code.octet-stream.net Git - m17rt/blobdiff - m17app/src/error.rs
Add error handling
[m17rt] / m17app / src / error.rs
index aeb58a562a4f191313b250c3292d73920ac76d29..634a531e55a36e0b343c50295c35307899eb9d86 100644 (file)
@@ -2,7 +2,7 @@ use std::{fmt::Display, path::PathBuf};
 
 use thiserror::Error;
 
-/// Errors originating from the M17 Rust Toolkit core
+/// Errors from the M17 Rust Toolkit
 #[derive(Debug, Error)]
 pub enum M17Error {
     #[error("given callsign contains at least one character invalid in M17: {0}")]
@@ -39,10 +39,17 @@ pub enum M17Error {
 
     #[error("adapter error for id {0}: {1}")]
     Adapter(usize, #[source] AdapterError),
+
+    #[error("soundmodem component error: {0}")]
+    Soundmodem(#[source] SoundmodemError),
 }
 
+/// Arbitrary error type returned from adapters, which may be user-implemented
 pub type AdapterError = Box<dyn std::error::Error + Sync + Send + 'static>;
 
+/// Arbitrary error type returned from soundmodem components, which may be user-implemented
+pub type SoundmodemError = Box<dyn std::error::Error + Sync + Send + 'static>;
+
 /// Iterator over potentially multiple errors
 #[derive(Debug, Error)]
 pub struct M17Errors(pub(crate) Vec<M17Error>);
@@ -56,6 +63,13 @@ impl Iterator for M17Errors {
 
 impl Display for M17Errors {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        write!(f, "{:?}", self.0)
+        let mut displays = vec![];
+        for e in &self.0 {
+            displays.push(e.to_string());
+        }
+        write!(f, "[{}]", displays.join(", "))
     }
 }
+
+#[derive(Debug, Error)]
+pub enum M17SoundmodemError {}