diff --git a/src/includes/errors.rs b/src/includes/errors.rs index d1eca53..ffaf708 100644 --- a/src/includes/errors.rs +++ b/src/includes/errors.rs @@ -1,4 +1,5 @@ #[derive(Clone, Copy, Debug, PartialEq, Eq)] +//#[extra_derives] pub enum CanError { UnknownMessageId(embedded_can::Id), /// Signal parameter is not within the range diff --git a/src/lib.rs b/src/lib.rs index cb2c37f..9c94b4f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1592,7 +1592,15 @@ fn render_arbitrary(mut w: impl Write, config: &Config<'_>, msg: &Message) -> Re } fn render_error(mut w: impl Write, config: &Config<'_>) -> io::Result<()> { - w.write_all(include_bytes!("./includes/errors.rs"))?; + let template = include_str!("./includes/errors.rs"); + + for (i, text) in template.split("//#[extra_derives]").enumerate() { + if i > 0 { + config.impl_defmt.fmt_attr(&mut w, "derive(defmt::Format)")?; + config.impl_serde.fmt_attr(&mut w, "derive(serde::Deserialize, serde::Serialize)")?; + } + w.write_all(text.as_bytes())?; + } config.impl_error.fmt_cfg(w, |w| { writeln!(w, "impl std::error::Error for CanError {{}}")