From 0bece3912d6f28d411b0bfe6b1552fda520c2970 Mon Sep 17 00:00:00 2001 From: Alissa Pajer Date: Wed, 22 Mar 2023 14:53:45 -0400 Subject: [PATCH 1/2] derive custom rust types for enum --- crates/target_rust/src/lib.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/target_rust/src/lib.rs b/crates/target_rust/src/lib.rs index fcbd0e5..f9f73c9 100644 --- a/crates/target_rust/src/lib.rs +++ b/crates/target_rust/src/lib.rs @@ -203,9 +203,15 @@ impl jtd_codegen::target::Target for Target { .or_default() .extend(vec!["Deserialize".to_owned(), "Serialize".to_owned()]); + let mut derives = vec!["Serialize", "Deserialize"]; + + if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) { + derives.extend(s.split(",")); + } + 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() { From 17c36193a702c2ed0451c430904b9285ca926446 Mon Sep 17 00:00:00 2001 From: Alissa Pajer Date: Wed, 22 Mar 2023 15:13:30 -0400 Subject: [PATCH 2/2] rustCustomDerive in all places --- crates/target_rust/src/lib.rs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/crates/target_rust/src/lib.rs b/crates/target_rust/src/lib.rs index f9f73c9..ea8b88a 100644 --- a/crates/target_rust/src/lib.rs +++ b/crates/target_rust/src/lib.rs @@ -197,18 +197,18 @@ impl jtd_codegen::target::Target for Target { return Ok(Some(s.into())); } - state - .imports - .entry("serde".into()) - .or_default() - .extend(vec!["Deserialize".to_owned(), "Serialize".to_owned()]); - 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()) + .or_default() + .extend(vec!["Deserialize".to_owned(), "Serialize".to_owned()]); + writeln!(out)?; write!(out, "{}", description(&metadata, 0))?; writeln!(out, "#[derive({})]", derives.join(", "))?; @@ -327,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()) @@ -335,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)?; @@ -368,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()) @@ -376,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)?;