diff --git a/crates/target_rust/src/lib.rs b/crates/target_rust/src/lib.rs index fcbd0e5..ea8b88a 100644 --- a/crates/target_rust/src/lib.rs +++ b/crates/target_rust/src/lib.rs @@ -197,6 +197,12 @@ impl jtd_codegen::target::Target for Target { return Ok(Some(s.into())); } + let mut derives = vec!["Serialize", "Deserialize"]; + + if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) { + derives.extend(s.split(",")); + } + state .imports .entry("serde".into()) @@ -205,7 +211,7 @@ impl jtd_codegen::target::Target for Target { writeln!(out)?; write!(out, "{}", description(&metadata, 0))?; - writeln!(out, "#[derive(Serialize, Deserialize)]")?; + writeln!(out, "#[derive({})]", derives.join(", "))?; writeln!(out, "pub enum {} {{", name)?; for (index, member) in members.into_iter().enumerate() { @@ -321,6 +327,12 @@ impl jtd_codegen::target::Target for Target { return Ok(Some(s.into())); } + let mut derives = vec!["Serialize", "Deserialize"]; + + if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) { + derives.extend(s.split(",")); + } + state .imports .entry("serde".into()) @@ -329,7 +341,7 @@ impl jtd_codegen::target::Target for Target { writeln!(out)?; write!(out, "{}", description(&metadata, 0))?; - writeln!(out, "#[derive(Serialize, Deserialize)]")?; + writeln!(out, "#[derive({})]", derives.join(", "))?; writeln!(out, "#[serde(tag = {:?})]", tag_json_name)?; writeln!(out, "pub enum {} {{", name)?; @@ -362,6 +374,12 @@ impl jtd_codegen::target::Target for Target { return Ok(Some(s.into())); } + let mut derives = vec!["Serialize", "Deserialize"]; + + if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) { + derives.extend(s.split(",")); + } + state .imports .entry("serde".into()) @@ -370,7 +388,7 @@ impl jtd_codegen::target::Target for Target { writeln!(out)?; write!(out, "{}", description(&metadata, 0))?; - writeln!(out, "#[derive(Serialize, Deserialize)]")?; + writeln!(out, "#[derive({})]", derives.join(", "))?; if fields.is_empty() { writeln!(out, "pub struct {} {{}}", name)?;