Skip to content

Commit 2780474

Browse files
committed
Fix enum templates
1 parent 63d647d commit 2780474

File tree

5 files changed

+63
-12
lines changed

5 files changed

+63
-12
lines changed

packages/cw-schema-codegen/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::{
1111
path::PathBuf,
1212
};
1313

14-
#[derive(Clone, Copy, Default, ValueEnum)]
14+
#[derive(Clone, Copy, Debug, Default, ValueEnum)]
1515
pub enum Language {
1616
#[default]
1717
Rust,
@@ -54,7 +54,7 @@ fn main() -> anyhow::Result<()> {
5454
.init()?;
5555

5656
let opts: Opts = Opts::parse();
57-
info!("Generating code for {} from {:?}", opts.language, opts.file);
57+
info!("Generating code for {:?} from {:?}", opts.language, opts.file);
5858

5959
let schema = std::fs::read_to_string(&opts.file)?;
6060
let schema: cw_schema::Schema = serde_json::from_str(&schema)?;
Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
pub enum {{ name }} {
22
{% for variant in variants %}
3-
{{ variant.name }} {% if let Some(types) = variant.types %}({% for ty in types %} {{ ty }}, {% endfor %}) {% endif %},
3+
{{ variant.name }}
4+
{% match variant.ty %}
5+
{% when TypeTemplate::Unit %}
6+
{% when TypeTemplate::Tuple with (types) %}
7+
(
8+
{% for ty in types %}
9+
{{ ty }},
10+
{% endfor %}
11+
)
12+
{% when TypeTemplate::Named with { fields } %}
13+
{
14+
{% for field in fields %}
15+
{{ field.name }}: {{ field.ty }},
16+
{% endfor %}
17+
}
18+
{% endmatch %}
19+
,
420
{% endfor %}
521
}

packages/cw-schema-codegen/tests/rust_tpl.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use askama::Template;
2-
use cw_schema_codegen::rust::{EnumTemplate, EnumVariantTemplate};
2+
use cw_schema_codegen::rust::{EnumTemplate, EnumVariantTemplate, FieldTemplate, TypeTemplate};
33

44
#[test]
55
fn simple_enum() {
@@ -8,11 +8,11 @@ fn simple_enum() {
88
variants: &[
99
EnumVariantTemplate {
1010
name: "One",
11-
types: None,
11+
ty: TypeTemplate::Unit,
1212
},
1313
EnumVariantTemplate {
1414
name: "Two",
15-
types: None,
15+
ty: TypeTemplate::Unit,
1616
},
1717
],
1818
};
@@ -28,11 +28,22 @@ fn complex_enum() {
2828
variants: &[
2929
EnumVariantTemplate {
3030
name: "One",
31-
types: Some(&["u64"]),
31+
ty: TypeTemplate::Tuple(&["u64"]),
3232
},
3333
EnumVariantTemplate {
3434
name: "Two",
35-
types: Some(&["String", "u64"]),
35+
ty: TypeTemplate::Named {
36+
fields: &[
37+
FieldTemplate {
38+
name: "a",
39+
ty: "u64",
40+
},
41+
FieldTemplate {
42+
name: "b",
43+
ty: "String",
44+
},
45+
],
46+
},
3647
},
3748
],
3849
};

packages/cw-schema-codegen/tests/snapshots/rust_tpl__complex_enum.snap

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,26 @@ expression: rendered
44
---
55
pub enum Complex {
66

7-
One ( u64, ) ,
7+
One
8+
9+
(
10+
11+
u64,
12+
13+
)
14+
15+
,
816

9-
Two ( String, u64, ) ,
17+
Two
18+
19+
{
20+
21+
a: u64,
22+
23+
b: String,
24+
25+
}
26+
27+
,
1028

1129
}

packages/cw-schema-codegen/tests/snapshots/rust_tpl__simple_enum.snap

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@ expression: rendered
44
---
55
pub enum Simple {
66

7-
One ,
7+
One
8+
9+
10+
,
811

9-
Two ,
12+
Two
13+
14+
15+
,
1016

1117
}

0 commit comments

Comments
 (0)