diff --git a/lightmotif-io/src/error.rs b/lightmotif-io/src/error.rs index bfd5a2f30d0826abef9bc3e15e8a1436de636832..38944abc32bc262a5cad212d6fcbece98d3f6276 100644 --- a/lightmotif-io/src/error.rs +++ b/lightmotif-io/src/error.rs @@ -1,13 +1,14 @@ use std::fmt::Display; use std::fmt::Formatter; +use std::sync::Arc; use nom::error::Error as NomError; -#[derive(Debug)] +#[derive(Clone, Debug)] pub enum Error { InvalidData, - Io(std::io::Error), - Nom(NomError<String>), + Io(Arc<std::io::Error>), + Nom(Arc<NomError<String>>), } impl From<lightmotif::err::InvalidData> for Error { @@ -18,13 +19,13 @@ impl From<lightmotif::err::InvalidData> for Error { impl From<std::io::Error> for Error { fn from(error: std::io::Error) -> Self { - Error::Io(error) + Error::Io(Arc::new(error)) } } impl From<NomError<&'_ str>> for Error { fn from(error: NomError<&'_ str>) -> Self { - Error::Nom(NomError::new(error.input.to_string(), error.code)) + Error::Nom(Arc::new(NomError::new(error.input.to_string(), error.code))) } } diff --git a/lightmotif-io/src/jaspar/mod.rs b/lightmotif-io/src/jaspar/mod.rs index 5154cd97959b583923c96722e86f21c5e2f250af..4c69a67963f9777d872a5aab2c406ea5824a1eef 100644 --- a/lightmotif-io/src/jaspar/mod.rs +++ b/lightmotif-io/src/jaspar/mod.rs @@ -96,7 +96,7 @@ impl<B: BufRead> Iterator for Reader<B> { let text = match std::str::from_utf8(bytes) { Ok(text) => text, Err(_) => { - return Some(Err(Error::Io(std::io::Error::new( + return Some(Err(Error::from(std::io::Error::new( std::io::ErrorKind::InvalidData, "decoding error", )))); diff --git a/lightmotif-io/src/jaspar16/mod.rs b/lightmotif-io/src/jaspar16/mod.rs index 702f42f09756aaf9e40f46a5be485ba86f20c24d..e1ec1d54d3acb118d54a2a65b4e35cd4922c241d 100644 --- a/lightmotif-io/src/jaspar16/mod.rs +++ b/lightmotif-io/src/jaspar16/mod.rs @@ -94,7 +94,7 @@ impl<B: BufRead, A: Alphabet> Iterator for Reader<B, A> { let text = match std::str::from_utf8(bytes) { Ok(text) => text, Err(_) => { - return Some(Err(Error::Io(std::io::Error::new( + return Some(Err(Error::from(std::io::Error::new( std::io::ErrorKind::InvalidData, "decoding error", ))));