summaryrefslogtreecommitdiff
path: root/examples/04-sum/output/rust/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-10 10:19:49 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-10 10:19:49 +0100
commit5113f2157c5aa257ad7ebf555cb6a551701d169a (patch)
tree8ddaee09f6c43b0529b2203f9e662a028fb5fcc0 /examples/04-sum/output/rust/src
parent5d41166750e0f05da436bf30c7a642749f7a71c5 (diff)
Add generic struct example without any outputs
Diffstat (limited to 'examples/04-sum/output/rust/src')
-rw-r--r--examples/04-sum/output/rust/src/lib.rs29
-rw-r--r--examples/04-sum/output/rust/src/shapes.rs32
2 files changed, 61 insertions, 0 deletions
diff --git a/examples/04-sum/output/rust/src/lib.rs b/examples/04-sum/output/rust/src/lib.rs
new file mode 100644
index 0000000..f961002
--- /dev/null
+++ b/examples/04-sum/output/rust/src/lib.rs
@@ -0,0 +1,29 @@
+mod shapes;
+
+use shapes::{Rectangle, Shape, Triangle};
+
+fn area(shape: &Shape) -> i32 {
+ match shape {
+ Shape::Rectangle(rectangle) => rectangle.width * rectangle.height,
+ Shape::Triangle(triangle) => triangle.width * triangle.height / 2,
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::shapes::{Rectangle, Shape, Triangle};
+
+ #[test]
+ fn rectangle() {
+ let rectangle = Shape::Rectangle(Rectangle { width: 10, height: 25 });
+ let area = super::area(&rectangle);
+ assert_eq!(area, 250);
+ }
+
+ #[test]
+ fn triangle() {
+ let triangle = Shape::Triangle(Triangle { width: 10, height: 25 });
+ let area = super::area(&triangle);
+ assert_eq!(area, 125);
+ }
+}
diff --git a/examples/04-sum/output/rust/src/shapes.rs b/examples/04-sum/output/rust/src/shapes.rs
new file mode 100644
index 0000000..2712e41
--- /dev/null
+++ b/examples/04-sum/output/rust/src/shapes.rs
@@ -0,0 +1,32 @@
+// Generated by hobgoblin.
+
+/// A 2D shape.
+#[derive(Clone, Debug, Hash, PartialEq)]
+pub enum Shape {
+ Rectangle(crate::shapes::Rectangle),
+ Triangle(crate::shapes::Triangle),
+}
+
+impl ::std::convert::From::<crate::shapes::Rectangle> for crate::shapes::Shape {
+ fn from(value: crate::shapes::Rectangle) -> Self {
+ Self::Rectangle(value)
+ }
+}
+
+impl ::std::convert::From::<crate::shapes::Triangle> for crate::shapes::Shape {
+ fn from(value: crate::shapes::Triangle) -> Self {
+ Self::Triangle(value)
+ }
+}
+
+#[derive(Clone, Debug, Hash, PartialEq)]
+pub struct Rectangle {
+ pub width: ::core::primitive::i32,
+ pub height: ::core::primitive::i32,
+}
+
+#[derive(Clone, Debug, Hash, PartialEq)]
+pub struct Triangle {
+ pub width: ::core::primitive::i32,
+ pub height: ::core::primitive::i32,
+}