Skip to content

Commit cbf65bb

Browse files
author
Pascal Hertleif
authored
Merge pull request #67 from voysys/serde
Added impl serde
2 parents bd63283 + bac697f commit cbf65bb

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/lib.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ pub struct Config<'a> {
6363
#[builder(default)]
6464
pub impl_arbitrary: FeatureConfig<'a>,
6565

66+
/// Optional: `impl Serialize` and `impl Deserialize` for generated types.. Default: `Never`.
67+
#[builder(default)]
68+
pub impl_serde: FeatureConfig<'a>,
69+
6670
/// Optional: `impl Error` for generated error type. Default: `Never`.
6771
///
6872
/// Note: this feature depends on `std`.
@@ -135,6 +139,17 @@ pub fn codegen(config: Config<'_>, out: impl Write) -> Result<()> {
135139
writeln!(w, r##"#[cfg(feature = "arb")]"##)?;
136140
writeln!(&mut w, "use arbitrary::{{Arbitrary, Unstructured}};")?;
137141

142+
match config.impl_serde {
143+
FeatureConfig::Always => {
144+
writeln!(&mut w, "use serde::{{Serialize, Deserialize}};")?;
145+
}
146+
FeatureConfig::Gated(gate) => {
147+
writeln!(w, r##"#[cfg(feature = "{gate}")]"##)?;
148+
writeln!(&mut w, "use serde::{{Serialize, Deserialize}};")?;
149+
}
150+
FeatureConfig::Never => (),
151+
}
152+
138153
writeln!(&mut w)?;
139154

140155
render_dbc(&mut w, &config, &dbc).context("could not generate Rust code")?;
@@ -167,6 +182,8 @@ fn render_root_enum(mut w: impl Write, dbc: &DBC, config: &Config<'_>) -> Result
167182
writeln!(w, "/// All messages")?;
168183
writeln!(w, "#[derive(Clone)]")?;
169184
config.impl_debug.fmt_attr(&mut w, "derive(Debug)")?;
185+
config.impl_serde.fmt_attr(&mut w, "derive(Serialize)")?;
186+
config.impl_serde.fmt_attr(&mut w, "derive(Deserialize)")?;
170187
writeln!(w, "pub enum Messages {{")?;
171188
{
172189
let mut w = PadAdapter::wrap(&mut w);
@@ -230,9 +247,14 @@ fn render_message(mut w: impl Write, config: &Config<'_>, msg: &Message, dbc: &D
230247
}
231248
}
232249
writeln!(w, "#[derive(Clone, Copy)]")?;
250+
config.impl_serde.fmt_attr(&mut w, "derive(Serialize)")?;
251+
config.impl_serde.fmt_attr(&mut w, "derive(Deserialize)")?;
233252
writeln!(w, "pub struct {} {{", type_name(msg.message_name()))?;
234253
{
235254
let mut w = PadAdapter::wrap(&mut w);
255+
config
256+
.impl_serde
257+
.fmt_attr(&mut w, "serde(with = \"serde_bytes\")");
236258
writeln!(w, "raw: [u8; {}],", msg.message_size())?;
237259
}
238260
writeln!(w, "}}")?;
@@ -941,6 +963,8 @@ fn write_enum(
941963
writeln!(w, "/// Defined values for {}", signal.name())?;
942964
writeln!(w, "#[derive(Clone, Copy, PartialEq)]")?;
943965
config.impl_debug.fmt_attr(&mut w, "derive(Debug)")?;
966+
config.impl_serde.fmt_attr(&mut w, "derive(Serialize)")?;
967+
config.impl_serde.fmt_attr(&mut w, "derive(Deserialize)")?;
944968
writeln!(w, "pub enum {} {{", type_name)?;
945969
{
946970
let mut w = PadAdapter::wrap(&mut w);
@@ -1253,6 +1277,8 @@ fn render_multiplexor_enums(
12531277
)?;
12541278

12551279
config.impl_debug.fmt_attr(&mut w, "derive(Debug)")?;
1280+
config.impl_serde.fmt_attr(&mut w, "derive(Serialize)")?;
1281+
config.impl_serde.fmt_attr(&mut w, "derive(Deserialize)")?;
12561282
writeln!(
12571283
w,
12581284
"pub enum {} {{",
@@ -1278,6 +1304,8 @@ fn render_multiplexor_enums(
12781304
let struct_name = multiplexed_enum_variant_name(msg, multiplexor_signal, **switch_index)?;
12791305

12801306
config.impl_debug.fmt_attr(&mut w, "derive(Debug)")?;
1307+
config.impl_serde.fmt_attr(&mut w, "derive(Serialize)")?;
1308+
config.impl_serde.fmt_attr(&mut w, "derive(Deserialize)")?;
12811309
writeln!(w, r##"#[derive(Default)]"##)?;
12821310
writeln!(
12831311
w,

0 commit comments

Comments
 (0)