Skip to content

Commit d9d2589

Browse files
authored
Merge pull request #4 from spindle-app/alissa/derive-for-enum
derive custom rust types for enum
2 parents 18d34e8 + 17c3619 commit d9d2589

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

crates/target_rust/src/lib.rs

+21-3
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@ impl jtd_codegen::target::Target for Target {
197197
return Ok(Some(s.into()));
198198
}
199199

200+
let mut derives = vec!["Serialize", "Deserialize"];
201+
202+
if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) {
203+
derives.extend(s.split(","));
204+
}
205+
200206
state
201207
.imports
202208
.entry("serde".into())
@@ -205,7 +211,7 @@ impl jtd_codegen::target::Target for Target {
205211

206212
writeln!(out)?;
207213
write!(out, "{}", description(&metadata, 0))?;
208-
writeln!(out, "#[derive(Serialize, Deserialize)]")?;
214+
writeln!(out, "#[derive({})]", derives.join(", "))?;
209215
writeln!(out, "pub enum {} {{", name)?;
210216

211217
for (index, member) in members.into_iter().enumerate() {
@@ -321,6 +327,12 @@ impl jtd_codegen::target::Target for Target {
321327
return Ok(Some(s.into()));
322328
}
323329

330+
let mut derives = vec!["Serialize", "Deserialize"];
331+
332+
if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) {
333+
derives.extend(s.split(","));
334+
}
335+
324336
state
325337
.imports
326338
.entry("serde".into())
@@ -329,7 +341,7 @@ impl jtd_codegen::target::Target for Target {
329341

330342
writeln!(out)?;
331343
write!(out, "{}", description(&metadata, 0))?;
332-
writeln!(out, "#[derive(Serialize, Deserialize)]")?;
344+
writeln!(out, "#[derive({})]", derives.join(", "))?;
333345
writeln!(out, "#[serde(tag = {:?})]", tag_json_name)?;
334346
writeln!(out, "pub enum {} {{", name)?;
335347

@@ -362,6 +374,12 @@ impl jtd_codegen::target::Target for Target {
362374
return Ok(Some(s.into()));
363375
}
364376

377+
let mut derives = vec!["Serialize", "Deserialize"];
378+
379+
if let Some(s) = metadata.get("rustCustomDerive").and_then(|v| v.as_str()) {
380+
derives.extend(s.split(","));
381+
}
382+
365383
state
366384
.imports
367385
.entry("serde".into())
@@ -370,7 +388,7 @@ impl jtd_codegen::target::Target for Target {
370388

371389
writeln!(out)?;
372390
write!(out, "{}", description(&metadata, 0))?;
373-
writeln!(out, "#[derive(Serialize, Deserialize)]")?;
391+
writeln!(out, "#[derive({})]", derives.join(", "))?;
374392

375393
if fields.is_empty() {
376394
writeln!(out, "pub struct {} {{}}", name)?;

0 commit comments

Comments
 (0)