Skip to content

Commit 10ee9fa

Browse files
committed
Add enum codegen
1 parent 27d31ad commit 10ee9fa

File tree

9 files changed

+105
-0
lines changed

9 files changed

+105
-0
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/cw-schema-codegen/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@ log = "0.4.22"
1616
serde_json = "1.0.128"
1717
simple_logger = "5.0.0"
1818
strum = { version = "0.26.3", default-features = false, features = ["derive"] }
19+
20+
[dev-dependencies]
21+
insta = "1.40.0"

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod rust;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use askama::Template;
2+
3+
pub struct EnumVariantTemplate<'a> {
4+
pub name: &'a str,
5+
pub types: Option<&'a [&'a str]>,
6+
}
7+
8+
#[derive(Template)]
9+
#[template(escape = "none", path = "rust/enum.tpl.rs")]
10+
pub struct EnumTemplate<'a> {
11+
pub name: &'a str,
12+
pub variants: &'a [EnumVariantTemplate<'a>],
13+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pub enum {{ name }} {
2+
{% for variant in variants %}
3+
{{ variant.name }} {% if let Some(types) = variant.types %}({% for ty in types %} {{ ty }}, {% endfor %}) {% endif %},
4+
{% endfor %}
5+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use askama::Template;
2+
use cw_schema_codegen::rust::{EnumTemplate, EnumVariantTemplate};
3+
4+
#[test]
5+
fn simple_enum() {
6+
let tpl = EnumTemplate {
7+
name: "Simple",
8+
variants: &[
9+
EnumVariantTemplate {
10+
name: "One",
11+
types: None,
12+
},
13+
EnumVariantTemplate {
14+
name: "Two",
15+
types: None,
16+
},
17+
],
18+
};
19+
20+
let rendered = tpl.render().unwrap();
21+
insta::assert_snapshot!(rendered);
22+
}
23+
24+
#[test]
25+
fn complex_enum() {
26+
let tpl = EnumTemplate {
27+
name: "Complex",
28+
variants: &[
29+
EnumVariantTemplate {
30+
name: "One",
31+
types: Some(&["u64"]),
32+
},
33+
EnumVariantTemplate {
34+
name: "Two",
35+
types: Some(&["String", "u64"]),
36+
},
37+
],
38+
};
39+
40+
let rendered = tpl.render().unwrap();
41+
insta::assert_snapshot!(rendered);
42+
}
43+
44+
#[test]
45+
fn empty_enum() {
46+
let tpl = EnumTemplate {
47+
name: "Empty",
48+
variants: &[],
49+
};
50+
51+
let rendered = tpl.render().unwrap();
52+
insta::assert_snapshot!(rendered);
53+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
source: packages/cw-schema-codegen/tests/rust_tpl.rs
3+
expression: rendered
4+
---
5+
pub enum Complex {
6+
7+
One ( u64, ) ,
8+
9+
Two ( String, u64, ) ,
10+
11+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
source: packages/cw-schema-codegen/tests/rust_tpl.rs
3+
expression: rendered
4+
---
5+
pub enum Empty {
6+
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
source: packages/cw-schema-codegen/tests/rust_tpl.rs
3+
expression: rendered
4+
---
5+
pub enum Simple {
6+
7+
One ,
8+
9+
Two ,
10+
11+
}

0 commit comments

Comments
 (0)