Skip to content

Commit 9b6db00

Browse files
committed
Wrap recursive Rust types into Box (closes #10)
1 parent d8136ae commit 9b6db00

File tree

16 files changed

+549
-5
lines changed

16 files changed

+549
-5
lines changed

Cargo.lock

Lines changed: 37 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkgs/crate-genotype-cli/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,5 @@ semver = { version = "1.0.27", features = ["serde"] }
3737
[dev-dependencies]
3838
pretty_assertions = "1.4.1"
3939
insta = { version = "1.46.3", features = ["ron"] }
40+
trybuild = "1.0.111"
41+
serde = { version = "1.0.210", features = ["derive"] }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dist/
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
src = "."
2+
3+
[rs]
4+
enabled = true
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Node: {
2+
value: string,
3+
next?: Node,
4+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
NodeMeta: {
2+
id: string,
3+
}
4+
5+
TreeLinkFields: {
6+
parent?: TreeNode,
7+
}
8+
9+
TreeNode: {
10+
...NodeMeta,
11+
...TreeLinkFields,
12+
payload: TreePayload,
13+
children: [TreeNode],
14+
}
15+
16+
TreePayload: {
17+
...NodeMeta,
18+
owner?: TreeNode,
19+
kind: string,
20+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
use std::path::PathBuf;
2+
use std::process::Command;
3+
4+
#[test]
5+
fn recursive_box_generated_rust_compiles() {
6+
let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
7+
let example_dir = manifest_dir.join("examples/recursive-box");
8+
let dist_dir = example_dir.join("dist");
9+
10+
if dist_dir.exists() {
11+
std::fs::remove_dir_all(&dist_dir).unwrap();
12+
}
13+
14+
let output = Command::new(env!("CARGO_BIN_EXE_gt"))
15+
.arg("build")
16+
.arg("examples/recursive-box")
17+
.current_dir(&manifest_dir)
18+
.output()
19+
.unwrap();
20+
21+
assert!(
22+
output.status.success(),
23+
"gt build failed:\nstdout:\n{}\nstderr:\n{}",
24+
String::from_utf8_lossy(&output.stdout),
25+
String::from_utf8_lossy(&output.stderr)
26+
);
27+
28+
unsafe {
29+
std::env::set_var(
30+
"GENOTYPE_CLI_MANIFEST_DIR",
31+
manifest_dir.to_string_lossy().as_ref(),
32+
);
33+
}
34+
35+
let t = trybuild::TestCases::new();
36+
t.pass("tests/trybuild/recursive_box_generated.rs");
37+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
mod generated_node {
2+
include!(concat!(
3+
env!("GENOTYPE_CLI_MANIFEST_DIR"),
4+
"/examples/recursive-box/dist/rs/src/node.rs"
5+
));
6+
}
7+
8+
mod generated_tree {
9+
include!(concat!(
10+
env!("GENOTYPE_CLI_MANIFEST_DIR"),
11+
"/examples/recursive-box/dist/rs/src/tree.rs"
12+
));
13+
}
14+
15+
fn main() {}

pkgs/crate-genotype-lang-rs-project/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ thiserror = "1.0.64"
2222
indexmap = { version = "2.6.0", features = ["serde"] }
2323
toml_edit = { version = "0.22.26", features = ["serde"] }
2424
serde = { version = "1.0.210", features = ["derive"] }
25+
petgraph = "0.8.3"
2526

2627
[dev-dependencies]
2728
pretty_assertions = "1.4.1"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
src = "."
2+
3+
[rs]
4+
enabled = true

0 commit comments

Comments
 (0)