From 5113f2157c5aa257ad7ebf555cb6a551701d169a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 10 Aug 2026 10:19:49 +0100 Subject: Add generic struct example without any outputs --- examples/03-struct-generic/hobgoblin.json5 | 23 + examples/03-struct-generic/src/point.hob | 11 + examples/03-sum/hobgoblin.json5 | 19 - examples/03-sum/output/java/.gitignore | 2 - examples/03-sum/output/java/pom.xml | 1 - .../src/main/java/org/zwobble/example/Shapes.java | 17 - .../test/java/org/zwobble/example/ShapesTests.java | 23 - examples/03-sum/output/rust/.gitignore | 1 - examples/03-sum/output/rust/Cargo.lock | 7 - examples/03-sum/output/rust/Cargo.toml | 6 - examples/03-sum/output/rust/rust-toolchain.toml | 2 - examples/03-sum/output/rust/src/lib.rs | 29 - examples/03-sum/output/rust/src/shapes.rs | 32 -- examples/03-sum/src/shapes.hob | 17 - examples/04-box/hobgoblin.json5 | 23 - examples/04-box/output/java/.gitignore | 2 - examples/04-box/output/java/pom.xml | 1 - .../test/java/org/zwobble/example/PointTests.java | 16 - examples/04-box/output/rust/.gitignore | 1 - examples/04-box/output/rust/Cargo.lock | 7 - examples/04-box/output/rust/Cargo.toml | 6 - examples/04-box/output/rust/rust-toolchain.toml | 2 - examples/04-box/output/rust/src/lib.rs | 14 - examples/04-box/output/rust/src/point.rs | 15 - examples/04-box/src/point.hob | 11 - examples/04-sum/hobgoblin.json5 | 19 + examples/04-sum/output/java/.gitignore | 2 + examples/04-sum/output/java/pom.xml | 1 + .../src/main/java/org/zwobble/example/Shapes.java | 17 + .../test/java/org/zwobble/example/ShapesTests.java | 23 + examples/04-sum/output/rust/.gitignore | 1 + examples/04-sum/output/rust/Cargo.lock | 7 + examples/04-sum/output/rust/Cargo.toml | 6 + examples/04-sum/output/rust/rust-toolchain.toml | 2 + examples/04-sum/output/rust/src/lib.rs | 29 + examples/04-sum/output/rust/src/shapes.rs | 32 ++ examples/04-sum/src/shapes.hob | 17 + examples/05-box/hobgoblin.json5 | 23 + examples/05-box/output/java/.gitignore | 2 + examples/05-box/output/java/pom.xml | 1 + .../test/java/org/zwobble/example/PointTests.java | 16 + examples/05-box/output/rust/.gitignore | 1 + examples/05-box/output/rust/Cargo.lock | 7 + examples/05-box/output/rust/Cargo.toml | 6 + examples/05-box/output/rust/rust-toolchain.toml | 2 + examples/05-box/output/rust/src/lib.rs | 14 + examples/05-box/output/rust/src/point.rs | 15 + examples/05-box/src/point.hob | 11 + examples/05-inductive-data-types/hobgoblin.json5 | 19 - .../05-inductive-data-types/output/java/.gitignore | 2 - .../05-inductive-data-types/output/java/pom.xml | 1 - .../main/java/org/zwobble/example/Arithmetic.java | 17 - .../java/org/zwobble/example/ArithmeticTests.java | 24 - .../05-inductive-data-types/output/rust/.gitignore | 1 - .../05-inductive-data-types/output/rust/Cargo.lock | 7 - .../05-inductive-data-types/output/rust/Cargo.toml | 6 - .../output/rust/rust-toolchain.toml | 2 - .../output/rust/src/arithmetic.rs | 30 -- .../05-inductive-data-types/output/rust/src/lib.rs | 33 -- .../05-inductive-data-types/src/arithmetic.hob | 13 - .../hobgoblin.json5 | 19 - .../output/java/.gitignore | 2 - .../output/java/pom.xml | 1 - .../test/java/org/zwobble/example/DataTests.java | 14 - .../output/rust/.gitignore | 1 - .../output/rust/Cargo.lock | 7 - .../output/rust/Cargo.toml | 6 - .../output/rust/rust-toolchain.toml | 2 - .../output/rust/src/data/a.rs | 17 - .../output/rust/src/data/b.rs | 6 - .../output/rust/src/data/mod.rs | 2 - .../output/rust/src/lib.rs | 15 - .../src/data/a.hob | 9 - .../src/data/b.hob | 5 - examples/06-inductive-data-types/hobgoblin.json5 | 19 + .../06-inductive-data-types/output/java/.gitignore | 2 + .../06-inductive-data-types/output/java/pom.xml | 1 + .../main/java/org/zwobble/example/Arithmetic.java | 17 + .../java/org/zwobble/example/ArithmeticTests.java | 24 + .../06-inductive-data-types/output/rust/.gitignore | 1 + .../06-inductive-data-types/output/rust/Cargo.lock | 7 + .../06-inductive-data-types/output/rust/Cargo.toml | 6 + .../output/rust/rust-toolchain.toml | 2 + .../output/rust/src/arithmetic.rs | 30 ++ .../06-inductive-data-types/output/rust/src/lib.rs | 33 ++ .../06-inductive-data-types/src/arithmetic.hob | 13 + examples/07-enum/hobgoblin.json5 | 19 - examples/07-enum/output/java/.gitignore | 2 - examples/07-enum/output/java/pom.xml | 1 - .../src/main/java/org/zwobble/example/Numbers.java | 13 - .../java/org/zwobble/example/NumbersTests.java | 14 - examples/07-enum/output/rust/.gitignore | 1 - examples/07-enum/output/rust/Cargo.lock | 7 - examples/07-enum/output/rust/Cargo.toml | 6 - examples/07-enum/output/rust/rust-toolchain.toml | 2 - examples/07-enum/output/rust/src/lib.rs | 23 - examples/07-enum/output/rust/src/numbers.rs | 9 - examples/07-enum/src/numbers.hob | 6 - .../hobgoblin.json5 | 19 + .../output/java/.gitignore | 2 + .../output/java/pom.xml | 1 + .../test/java/org/zwobble/example/DataTests.java | 14 + .../output/rust/.gitignore | 1 + .../output/rust/Cargo.lock | 7 + .../output/rust/Cargo.toml | 6 + .../output/rust/rust-toolchain.toml | 2 + .../output/rust/src/data/a.rs | 17 + .../output/rust/src/data/b.rs | 6 + .../output/rust/src/data/mod.rs | 2 + .../output/rust/src/lib.rs | 15 + .../src/data/a.hob | 9 + .../src/data/b.hob | 5 + examples/08-enum/hobgoblin.json5 | 19 + examples/08-enum/output/java/.gitignore | 2 + examples/08-enum/output/java/pom.xml | 1 + .../src/main/java/org/zwobble/example/Numbers.java | 13 + .../java/org/zwobble/example/NumbersTests.java | 14 + examples/08-enum/output/rust/.gitignore | 1 + examples/08-enum/output/rust/Cargo.lock | 7 + examples/08-enum/output/rust/Cargo.toml | 6 + examples/08-enum/output/rust/rust-toolchain.toml | 2 + examples/08-enum/output/rust/src/lib.rs | 23 + examples/08-enum/output/rust/src/numbers.rs | 9 + examples/08-enum/src/numbers.hob | 6 + examples/08-list/hobgoblin.json5 | 19 - examples/08-list/output/java/.gitignore | 2 - examples/08-list/output/java/pom.xml | 1 - .../test/java/org/zwobble/example/PointTests.java | 32 -- examples/08-list/output/rust/.gitignore | 1 - examples/08-list/output/rust/Cargo.lock | 7 - examples/08-list/output/rust/Cargo.toml | 6 - examples/08-list/output/rust/rust-toolchain.toml | 2 - examples/08-list/output/rust/src/lib.rs | 16 - examples/08-list/output/rust/src/point.rs | 12 - examples/08-list/src/point.hob | 8 - examples/09-list/hobgoblin.json5 | 19 + examples/09-list/output/java/.gitignore | 2 + examples/09-list/output/java/pom.xml | 1 + .../test/java/org/zwobble/example/PointTests.java | 32 ++ examples/09-list/output/rust/.gitignore | 1 + examples/09-list/output/rust/Cargo.lock | 7 + examples/09-list/output/rust/Cargo.toml | 6 + examples/09-list/output/rust/rust-toolchain.toml | 2 + examples/09-list/output/rust/src/lib.rs | 16 + examples/09-list/output/rust/src/point.rs | 12 + examples/09-list/src/point.hob | 8 + examples/09-native-type/hobgoblin.json5 | 19 - examples/09-native-type/output/java/.gitignore | 2 - examples/09-native-type/output/java/pom.xml | 1 - .../example/types/point/HobgoblinNativePoint.java | 7 - .../org/zwobble/example/types/point/Point.java | 4 - .../test/java/org/zwobble/example/PointTests.java | 13 - examples/09-native-type/output/rust/.gitignore | 1 - examples/09-native-type/output/rust/Cargo.lock | 7 - examples/09-native-type/output/rust/Cargo.toml | 6 - .../09-native-type/output/rust/rust-toolchain.toml | 2 - .../09-native-type/output/rust/src/gen/point.rs | 8 - examples/09-native-type/output/rust/src/lib.rs | 11 - examples/09-native-type/output/rust/src/point.rs | 4 - examples/09-native-type/src/point.hob | 8 - .../10-native-type-custom-config/hobgoblin.json5 | 33 -- .../output/java/.gitignore | 2 - .../output/java/pom.xml | 1 - .../src/main/java/org/zwobble/example/Point.java | 4 - .../example/types/point/HobgoblinNativePoint.java | 9 - .../test/java/org/zwobble/example/PointTests.java | 12 - .../output/rust/.gitignore | 1 - .../output/rust/Cargo.lock | 7 - .../output/rust/Cargo.toml | 6 - .../output/rust/rust-toolchain.toml | 2 - .../output/rust/src/main.rs | 14 - .../output/rust/src/point.rs | 8 - .../10-native-type-custom-config/src/point.hob | 8 - examples/10-native-type/hobgoblin.json5 | 19 + examples/10-native-type/output/java/.gitignore | 2 + examples/10-native-type/output/java/pom.xml | 1 + .../example/types/point/HobgoblinNativePoint.java | 7 + .../org/zwobble/example/types/point/Point.java | 4 + .../test/java/org/zwobble/example/PointTests.java | 13 + examples/10-native-type/output/rust/.gitignore | 1 + examples/10-native-type/output/rust/Cargo.lock | 7 + examples/10-native-type/output/rust/Cargo.toml | 6 + .../10-native-type/output/rust/rust-toolchain.toml | 2 + .../10-native-type/output/rust/src/gen/point.rs | 8 + examples/10-native-type/output/rust/src/lib.rs | 11 + examples/10-native-type/output/rust/src/point.rs | 4 + examples/10-native-type/src/point.hob | 8 + .../11-native-type-custom-config/hobgoblin.json5 | 33 ++ .../output/java/.gitignore | 2 + .../output/java/pom.xml | 1 + .../src/main/java/org/zwobble/example/Point.java | 4 + .../example/types/point/HobgoblinNativePoint.java | 9 + .../test/java/org/zwobble/example/PointTests.java | 12 + .../output/rust/.gitignore | 1 + .../output/rust/Cargo.lock | 7 + .../output/rust/Cargo.toml | 6 + .../output/rust/rust-toolchain.toml | 2 + .../output/rust/src/main.rs | 14 + .../output/rust/src/point.rs | 8 + .../11-native-type-custom-config/src/point.hob | 8 + examples/11-native-type-generic/hobgoblin.json5 | 33 -- .../11-native-type-generic/output/java/.gitignore | 2 - .../11-native-type-generic/output/java/pom.xml | 1 - .../example/types/map/HobgoblinNativeMap.java | 9 - .../test/java/org/zwobble/example/MapTests.java | 13 - .../11-native-type-generic/output/rust/.gitignore | 1 - .../11-native-type-generic/output/rust/Cargo.lock | 7 - .../11-native-type-generic/output/rust/Cargo.toml | 6 - .../output/rust/rust-toolchain.toml | 2 - .../output/rust/src/gen/map.rs | 6 - .../11-native-type-generic/output/rust/src/lib.rs | 12 - .../11-native-type-generic/output/rust/src/map.rs | 1 - examples/11-native-type-generic/src/map.hob | 6 - examples/12-native-type-generic/hobgoblin.json5 | 33 ++ .../12-native-type-generic/output/java/.gitignore | 2 + .../12-native-type-generic/output/java/pom.xml | 1 + .../example/types/map/HobgoblinNativeMap.java | 9 + .../test/java/org/zwobble/example/MapTests.java | 13 + .../12-native-type-generic/output/rust/.gitignore | 1 + .../12-native-type-generic/output/rust/Cargo.lock | 7 + .../12-native-type-generic/output/rust/Cargo.toml | 6 + .../output/rust/rust-toolchain.toml | 2 + .../output/rust/src/gen/map.rs | 6 + .../12-native-type-generic/output/rust/src/lib.rs | 12 + .../12-native-type-generic/output/rust/src/map.rs | 1 + examples/12-native-type-generic/src/map.hob | 6 + examples/12-shared/hobgoblin.json5 | 23 - examples/12-shared/output/java/.gitignore | 2 - examples/12-shared/output/java/pom.xml | 1 - .../test/java/org/zwobble/example/PointTests.java | 15 - examples/12-shared/output/rust/.gitignore | 1 - examples/12-shared/output/rust/Cargo.lock | 7 - examples/12-shared/output/rust/Cargo.toml | 6 - examples/12-shared/output/rust/rust-toolchain.toml | 2 - examples/12-shared/output/rust/src/lib.rs | 14 - examples/12-shared/output/rust/src/point.rs | 15 - examples/12-shared/src/point.hob | 11 - examples/13-custom-code/hobgoblin.json5 | 19 - examples/13-custom-code/output/java/.gitignore | 2 - examples/13-custom-code/output/java/pom.xml | 1 - .../org/zwobble/example/types/shapes/Square.java | 37 -- .../test/java/org/zwobble/example/ShapesTests.java | 13 - examples/13-custom-code/output/rust/.gitignore | 1 - examples/13-custom-code/output/rust/Cargo.lock | 7 - examples/13-custom-code/output/rust/Cargo.toml | 6 - .../13-custom-code/output/rust/rust-toolchain.toml | 2 - .../13-custom-code/output/rust/src/gen/shapes.rs | 6 - examples/13-custom-code/output/rust/src/lib.rs | 12 - examples/13-custom-code/output/rust/src/shapes.rs | 7 - examples/13-custom-code/src/shapes.hob | 3 - examples/13-shared/hobgoblin.json5 | 23 + examples/13-shared/output/java/.gitignore | 2 + examples/13-shared/output/java/pom.xml | 1 + .../test/java/org/zwobble/example/PointTests.java | 15 + examples/13-shared/output/rust/.gitignore | 1 + examples/13-shared/output/rust/Cargo.lock | 7 + examples/13-shared/output/rust/Cargo.toml | 6 + examples/13-shared/output/rust/rust-toolchain.toml | 2 + examples/13-shared/output/rust/src/lib.rs | 14 + examples/13-shared/output/rust/src/point.rs | 15 + examples/13-shared/src/point.hob | 11 + examples/14-custom-code/hobgoblin.json5 | 19 + examples/14-custom-code/output/java/.gitignore | 2 + examples/14-custom-code/output/java/pom.xml | 1 + .../org/zwobble/example/types/shapes/Square.java | 37 ++ .../test/java/org/zwobble/example/ShapesTests.java | 13 + examples/14-custom-code/output/rust/.gitignore | 1 + examples/14-custom-code/output/rust/Cargo.lock | 7 + examples/14-custom-code/output/rust/Cargo.toml | 6 + .../14-custom-code/output/rust/rust-toolchain.toml | 2 + .../14-custom-code/output/rust/src/gen/shapes.rs | 6 + examples/14-custom-code/output/rust/src/lib.rs | 12 + examples/14-custom-code/output/rust/src/shapes.rs | 7 + examples/14-custom-code/src/shapes.hob | 3 + examples/14-imports/hobgoblin.json5 | 19 - examples/14-imports/output/java/.gitignore | 2 - examples/14-imports/output/java/pom.xml | 1 - .../test/java/org/zwobble/example/LineTests.java | 15 - examples/14-imports/output/rust/.gitignore | 1 - examples/14-imports/output/rust/Cargo.lock | 7 - examples/14-imports/output/rust/Cargo.toml | 6 - .../14-imports/output/rust/rust-toolchain.toml | 2 - examples/14-imports/output/rust/src/lib.rs | 15 - examples/14-imports/output/rust/src/line.rs | 8 - examples/14-imports/output/rust/src/point.rs | 8 - examples/14-imports/src/line.hob | 7 - examples/14-imports/src/point.hob | 5 - examples/15-imports/hobgoblin.json5 | 19 + examples/15-imports/output/java/.gitignore | 2 + examples/15-imports/output/java/pom.xml | 1 + .../test/java/org/zwobble/example/LineTests.java | 15 + examples/15-imports/output/rust/.gitignore | 1 + examples/15-imports/output/rust/Cargo.lock | 7 + examples/15-imports/output/rust/Cargo.toml | 6 + .../15-imports/output/rust/rust-toolchain.toml | 2 + examples/15-imports/output/rust/src/lib.rs | 15 + examples/15-imports/output/rust/src/line.rs | 8 + examples/15-imports/output/rust/src/point.rs | 8 + examples/15-imports/src/line.hob | 7 + examples/15-imports/src/point.hob | 5 + examples/15-transient-0/hobgoblin.json5 | 27 - examples/15-transient-0/output/java/.gitignore | 3 - examples/15-transient-0/output/java/pom.xml | 1 - .../zwobble/example/types/data/GenericNative.java | 3 - .../example/types/data/HobgoblinNativeData.java | 13 - .../org/zwobble/example/types/data/Native.java | 3 - .../data/transient0/HobgoblinTransient0Data.java | 581 --------------------- .../zwobble/example/types/transient0/Decoder.java | 13 - .../zwobble/example/types/transient0/Encoder.java | 13 - .../transient0/HobgoblinTransient0Builtins.java | 82 --- .../HobgoblinTransient0TaggedSharedValue.java | 22 - .../java/org/zwobble/example/Transient0Tests.java | 392 -------------- examples/15-transient-0/output/rust/.gitignore | 2 - examples/15-transient-0/output/rust/Cargo.lock | 7 - examples/15-transient-0/output/rust/Cargo.toml | 6 - .../15-transient-0/output/rust/rust-toolchain.toml | 2 - examples/15-transient-0/output/rust/src/data.rs | 66 --- .../15-transient-0/output/rust/src/gen/data.rs | 151 ------ .../output/rust/src/gen/data/transient_0.rs | 531 ------------------- .../output/rust/src/gen/transient_0.rs | 88 ---- examples/15-transient-0/output/rust/src/lib.rs | 353 ------------- .../15-transient-0/output/rust/src/transient_0.rs | 1 - examples/15-transient-0/src/data.hob | 111 ---- examples/16-transient-0/hobgoblin.json5 | 27 + examples/16-transient-0/output/java/.gitignore | 3 + examples/16-transient-0/output/java/pom.xml | 1 + .../zwobble/example/types/data/GenericNative.java | 3 + .../example/types/data/HobgoblinNativeData.java | 13 + .../org/zwobble/example/types/data/Native.java | 3 + .../data/transient0/HobgoblinTransient0Data.java | 581 +++++++++++++++++++++ .../zwobble/example/types/transient0/Decoder.java | 13 + .../zwobble/example/types/transient0/Encoder.java | 13 + .../transient0/HobgoblinTransient0Builtins.java | 82 +++ .../HobgoblinTransient0TaggedSharedValue.java | 22 + .../java/org/zwobble/example/Transient0Tests.java | 392 ++++++++++++++ examples/16-transient-0/output/rust/.gitignore | 2 + examples/16-transient-0/output/rust/Cargo.lock | 7 + examples/16-transient-0/output/rust/Cargo.toml | 6 + .../16-transient-0/output/rust/rust-toolchain.toml | 2 + examples/16-transient-0/output/rust/src/data.rs | 66 +++ .../16-transient-0/output/rust/src/gen/data.rs | 151 ++++++ .../output/rust/src/gen/data/transient_0.rs | 531 +++++++++++++++++++ .../output/rust/src/gen/transient_0.rs | 88 ++++ examples/16-transient-0/output/rust/src/lib.rs | 353 +++++++++++++ .../16-transient-0/output/rust/src/transient_0.rs | 1 + examples/16-transient-0/src/data.hob | 111 ++++ 346 files changed, 3837 insertions(+), 3803 deletions(-) create mode 100644 examples/03-struct-generic/hobgoblin.json5 create mode 100644 examples/03-struct-generic/src/point.hob delete mode 100644 examples/03-sum/hobgoblin.json5 delete mode 100644 examples/03-sum/output/java/.gitignore delete mode 120000 examples/03-sum/output/java/pom.xml delete mode 100644 examples/03-sum/output/java/src/main/java/org/zwobble/example/Shapes.java delete mode 100644 examples/03-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java delete mode 100644 examples/03-sum/output/rust/.gitignore delete mode 100644 examples/03-sum/output/rust/Cargo.lock delete mode 100644 examples/03-sum/output/rust/Cargo.toml delete mode 100644 examples/03-sum/output/rust/rust-toolchain.toml delete mode 100644 examples/03-sum/output/rust/src/lib.rs delete mode 100644 examples/03-sum/output/rust/src/shapes.rs delete mode 100644 examples/03-sum/src/shapes.hob delete mode 100644 examples/04-box/hobgoblin.json5 delete mode 100644 examples/04-box/output/java/.gitignore delete mode 120000 examples/04-box/output/java/pom.xml delete mode 100644 examples/04-box/output/java/src/test/java/org/zwobble/example/PointTests.java delete mode 100644 examples/04-box/output/rust/.gitignore delete mode 100644 examples/04-box/output/rust/Cargo.lock delete mode 100644 examples/04-box/output/rust/Cargo.toml delete mode 100644 examples/04-box/output/rust/rust-toolchain.toml delete mode 100644 examples/04-box/output/rust/src/lib.rs delete mode 100644 examples/04-box/output/rust/src/point.rs delete mode 100644 examples/04-box/src/point.hob create mode 100644 examples/04-sum/hobgoblin.json5 create mode 100644 examples/04-sum/output/java/.gitignore create mode 120000 examples/04-sum/output/java/pom.xml create mode 100644 examples/04-sum/output/java/src/main/java/org/zwobble/example/Shapes.java create mode 100644 examples/04-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java create mode 100644 examples/04-sum/output/rust/.gitignore create mode 100644 examples/04-sum/output/rust/Cargo.lock create mode 100644 examples/04-sum/output/rust/Cargo.toml create mode 100644 examples/04-sum/output/rust/rust-toolchain.toml create mode 100644 examples/04-sum/output/rust/src/lib.rs create mode 100644 examples/04-sum/output/rust/src/shapes.rs create mode 100644 examples/04-sum/src/shapes.hob create mode 100644 examples/05-box/hobgoblin.json5 create mode 100644 examples/05-box/output/java/.gitignore create mode 120000 examples/05-box/output/java/pom.xml create mode 100644 examples/05-box/output/java/src/test/java/org/zwobble/example/PointTests.java create mode 100644 examples/05-box/output/rust/.gitignore create mode 100644 examples/05-box/output/rust/Cargo.lock create mode 100644 examples/05-box/output/rust/Cargo.toml create mode 100644 examples/05-box/output/rust/rust-toolchain.toml create mode 100644 examples/05-box/output/rust/src/lib.rs create mode 100644 examples/05-box/output/rust/src/point.rs create mode 100644 examples/05-box/src/point.hob delete mode 100644 examples/05-inductive-data-types/hobgoblin.json5 delete mode 100644 examples/05-inductive-data-types/output/java/.gitignore delete mode 120000 examples/05-inductive-data-types/output/java/pom.xml delete mode 100644 examples/05-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java delete mode 100644 examples/05-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java delete mode 100644 examples/05-inductive-data-types/output/rust/.gitignore delete mode 100644 examples/05-inductive-data-types/output/rust/Cargo.lock delete mode 100644 examples/05-inductive-data-types/output/rust/Cargo.toml delete mode 100644 examples/05-inductive-data-types/output/rust/rust-toolchain.toml delete mode 100644 examples/05-inductive-data-types/output/rust/src/arithmetic.rs delete mode 100644 examples/05-inductive-data-types/output/rust/src/lib.rs delete mode 100644 examples/05-inductive-data-types/src/arithmetic.hob delete mode 100644 examples/06-inductive-data-types-separate-namespaces/hobgoblin.json5 delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/java/.gitignore delete mode 120000 examples/06-inductive-data-types-separate-namespaces/output/java/pom.xml delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/.gitignore delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.lock delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.toml delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs delete mode 100644 examples/06-inductive-data-types-separate-namespaces/output/rust/src/lib.rs delete mode 100644 examples/06-inductive-data-types-separate-namespaces/src/data/a.hob delete mode 100644 examples/06-inductive-data-types-separate-namespaces/src/data/b.hob create mode 100644 examples/06-inductive-data-types/hobgoblin.json5 create mode 100644 examples/06-inductive-data-types/output/java/.gitignore create mode 120000 examples/06-inductive-data-types/output/java/pom.xml create mode 100644 examples/06-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java create mode 100644 examples/06-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java create mode 100644 examples/06-inductive-data-types/output/rust/.gitignore create mode 100644 examples/06-inductive-data-types/output/rust/Cargo.lock create mode 100644 examples/06-inductive-data-types/output/rust/Cargo.toml create mode 100644 examples/06-inductive-data-types/output/rust/rust-toolchain.toml create mode 100644 examples/06-inductive-data-types/output/rust/src/arithmetic.rs create mode 100644 examples/06-inductive-data-types/output/rust/src/lib.rs create mode 100644 examples/06-inductive-data-types/src/arithmetic.hob delete mode 100644 examples/07-enum/hobgoblin.json5 delete mode 100644 examples/07-enum/output/java/.gitignore delete mode 120000 examples/07-enum/output/java/pom.xml delete mode 100644 examples/07-enum/output/java/src/main/java/org/zwobble/example/Numbers.java delete mode 100644 examples/07-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java delete mode 100644 examples/07-enum/output/rust/.gitignore delete mode 100644 examples/07-enum/output/rust/Cargo.lock delete mode 100644 examples/07-enum/output/rust/Cargo.toml delete mode 100644 examples/07-enum/output/rust/rust-toolchain.toml delete mode 100644 examples/07-enum/output/rust/src/lib.rs delete mode 100644 examples/07-enum/output/rust/src/numbers.rs delete mode 100644 examples/07-enum/src/numbers.hob create mode 100644 examples/07-inductive-data-types-separate-namespaces/hobgoblin.json5 create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/java/.gitignore create mode 120000 examples/07-inductive-data-types-separate-namespaces/output/java/pom.xml create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/.gitignore create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.lock create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.toml create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs create mode 100644 examples/07-inductive-data-types-separate-namespaces/output/rust/src/lib.rs create mode 100644 examples/07-inductive-data-types-separate-namespaces/src/data/a.hob create mode 100644 examples/07-inductive-data-types-separate-namespaces/src/data/b.hob create mode 100644 examples/08-enum/hobgoblin.json5 create mode 100644 examples/08-enum/output/java/.gitignore create mode 120000 examples/08-enum/output/java/pom.xml create mode 100644 examples/08-enum/output/java/src/main/java/org/zwobble/example/Numbers.java create mode 100644 examples/08-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java create mode 100644 examples/08-enum/output/rust/.gitignore create mode 100644 examples/08-enum/output/rust/Cargo.lock create mode 100644 examples/08-enum/output/rust/Cargo.toml create mode 100644 examples/08-enum/output/rust/rust-toolchain.toml create mode 100644 examples/08-enum/output/rust/src/lib.rs create mode 100644 examples/08-enum/output/rust/src/numbers.rs create mode 100644 examples/08-enum/src/numbers.hob delete mode 100644 examples/08-list/hobgoblin.json5 delete mode 100644 examples/08-list/output/java/.gitignore delete mode 120000 examples/08-list/output/java/pom.xml delete mode 100644 examples/08-list/output/java/src/test/java/org/zwobble/example/PointTests.java delete mode 100644 examples/08-list/output/rust/.gitignore delete mode 100644 examples/08-list/output/rust/Cargo.lock delete mode 100644 examples/08-list/output/rust/Cargo.toml delete mode 100644 examples/08-list/output/rust/rust-toolchain.toml delete mode 100644 examples/08-list/output/rust/src/lib.rs delete mode 100644 examples/08-list/output/rust/src/point.rs delete mode 100644 examples/08-list/src/point.hob create mode 100644 examples/09-list/hobgoblin.json5 create mode 100644 examples/09-list/output/java/.gitignore create mode 120000 examples/09-list/output/java/pom.xml create mode 100644 examples/09-list/output/java/src/test/java/org/zwobble/example/PointTests.java create mode 100644 examples/09-list/output/rust/.gitignore create mode 100644 examples/09-list/output/rust/Cargo.lock create mode 100644 examples/09-list/output/rust/Cargo.toml create mode 100644 examples/09-list/output/rust/rust-toolchain.toml create mode 100644 examples/09-list/output/rust/src/lib.rs create mode 100644 examples/09-list/output/rust/src/point.rs create mode 100644 examples/09-list/src/point.hob delete mode 100644 examples/09-native-type/hobgoblin.json5 delete mode 100644 examples/09-native-type/output/java/.gitignore delete mode 120000 examples/09-native-type/output/java/pom.xml delete mode 100644 examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java delete mode 100644 examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java delete mode 100644 examples/09-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java delete mode 100644 examples/09-native-type/output/rust/.gitignore delete mode 100644 examples/09-native-type/output/rust/Cargo.lock delete mode 100644 examples/09-native-type/output/rust/Cargo.toml delete mode 100644 examples/09-native-type/output/rust/rust-toolchain.toml delete mode 100644 examples/09-native-type/output/rust/src/gen/point.rs delete mode 100644 examples/09-native-type/output/rust/src/lib.rs delete mode 100644 examples/09-native-type/output/rust/src/point.rs delete mode 100644 examples/09-native-type/src/point.hob delete mode 100644 examples/10-native-type-custom-config/hobgoblin.json5 delete mode 100644 examples/10-native-type-custom-config/output/java/.gitignore delete mode 120000 examples/10-native-type-custom-config/output/java/pom.xml delete mode 100644 examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java delete mode 100644 examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java delete mode 100644 examples/10-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java delete mode 100644 examples/10-native-type-custom-config/output/rust/.gitignore delete mode 100644 examples/10-native-type-custom-config/output/rust/Cargo.lock delete mode 100644 examples/10-native-type-custom-config/output/rust/Cargo.toml delete mode 100644 examples/10-native-type-custom-config/output/rust/rust-toolchain.toml delete mode 100644 examples/10-native-type-custom-config/output/rust/src/main.rs delete mode 100644 examples/10-native-type-custom-config/output/rust/src/point.rs delete mode 100644 examples/10-native-type-custom-config/src/point.hob create mode 100644 examples/10-native-type/hobgoblin.json5 create mode 100644 examples/10-native-type/output/java/.gitignore create mode 120000 examples/10-native-type/output/java/pom.xml create mode 100644 examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java create mode 100644 examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java create mode 100644 examples/10-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java create mode 100644 examples/10-native-type/output/rust/.gitignore create mode 100644 examples/10-native-type/output/rust/Cargo.lock create mode 100644 examples/10-native-type/output/rust/Cargo.toml create mode 100644 examples/10-native-type/output/rust/rust-toolchain.toml create mode 100644 examples/10-native-type/output/rust/src/gen/point.rs create mode 100644 examples/10-native-type/output/rust/src/lib.rs create mode 100644 examples/10-native-type/output/rust/src/point.rs create mode 100644 examples/10-native-type/src/point.hob create mode 100644 examples/11-native-type-custom-config/hobgoblin.json5 create mode 100644 examples/11-native-type-custom-config/output/java/.gitignore create mode 120000 examples/11-native-type-custom-config/output/java/pom.xml create mode 100644 examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java create mode 100644 examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java create mode 100644 examples/11-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java create mode 100644 examples/11-native-type-custom-config/output/rust/.gitignore create mode 100644 examples/11-native-type-custom-config/output/rust/Cargo.lock create mode 100644 examples/11-native-type-custom-config/output/rust/Cargo.toml create mode 100644 examples/11-native-type-custom-config/output/rust/rust-toolchain.toml create mode 100644 examples/11-native-type-custom-config/output/rust/src/main.rs create mode 100644 examples/11-native-type-custom-config/output/rust/src/point.rs create mode 100644 examples/11-native-type-custom-config/src/point.hob delete mode 100644 examples/11-native-type-generic/hobgoblin.json5 delete mode 100644 examples/11-native-type-generic/output/java/.gitignore delete mode 120000 examples/11-native-type-generic/output/java/pom.xml delete mode 100644 examples/11-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java delete mode 100644 examples/11-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java delete mode 100644 examples/11-native-type-generic/output/rust/.gitignore delete mode 100644 examples/11-native-type-generic/output/rust/Cargo.lock delete mode 100644 examples/11-native-type-generic/output/rust/Cargo.toml delete mode 100644 examples/11-native-type-generic/output/rust/rust-toolchain.toml delete mode 100644 examples/11-native-type-generic/output/rust/src/gen/map.rs delete mode 100644 examples/11-native-type-generic/output/rust/src/lib.rs delete mode 100644 examples/11-native-type-generic/output/rust/src/map.rs delete mode 100644 examples/11-native-type-generic/src/map.hob create mode 100644 examples/12-native-type-generic/hobgoblin.json5 create mode 100644 examples/12-native-type-generic/output/java/.gitignore create mode 120000 examples/12-native-type-generic/output/java/pom.xml create mode 100644 examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java create mode 100644 examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java create mode 100644 examples/12-native-type-generic/output/rust/.gitignore create mode 100644 examples/12-native-type-generic/output/rust/Cargo.lock create mode 100644 examples/12-native-type-generic/output/rust/Cargo.toml create mode 100644 examples/12-native-type-generic/output/rust/rust-toolchain.toml create mode 100644 examples/12-native-type-generic/output/rust/src/gen/map.rs create mode 100644 examples/12-native-type-generic/output/rust/src/lib.rs create mode 100644 examples/12-native-type-generic/output/rust/src/map.rs create mode 100644 examples/12-native-type-generic/src/map.hob delete mode 100644 examples/12-shared/hobgoblin.json5 delete mode 100644 examples/12-shared/output/java/.gitignore delete mode 120000 examples/12-shared/output/java/pom.xml delete mode 100644 examples/12-shared/output/java/src/test/java/org/zwobble/example/PointTests.java delete mode 100644 examples/12-shared/output/rust/.gitignore delete mode 100644 examples/12-shared/output/rust/Cargo.lock delete mode 100644 examples/12-shared/output/rust/Cargo.toml delete mode 100644 examples/12-shared/output/rust/rust-toolchain.toml delete mode 100644 examples/12-shared/output/rust/src/lib.rs delete mode 100644 examples/12-shared/output/rust/src/point.rs delete mode 100644 examples/12-shared/src/point.hob delete mode 100644 examples/13-custom-code/hobgoblin.json5 delete mode 100644 examples/13-custom-code/output/java/.gitignore delete mode 120000 examples/13-custom-code/output/java/pom.xml delete mode 100644 examples/13-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java delete mode 100644 examples/13-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java delete mode 100644 examples/13-custom-code/output/rust/.gitignore delete mode 100644 examples/13-custom-code/output/rust/Cargo.lock delete mode 100644 examples/13-custom-code/output/rust/Cargo.toml delete mode 100644 examples/13-custom-code/output/rust/rust-toolchain.toml delete mode 100644 examples/13-custom-code/output/rust/src/gen/shapes.rs delete mode 100644 examples/13-custom-code/output/rust/src/lib.rs delete mode 100644 examples/13-custom-code/output/rust/src/shapes.rs delete mode 100644 examples/13-custom-code/src/shapes.hob create mode 100644 examples/13-shared/hobgoblin.json5 create mode 100644 examples/13-shared/output/java/.gitignore create mode 120000 examples/13-shared/output/java/pom.xml create mode 100644 examples/13-shared/output/java/src/test/java/org/zwobble/example/PointTests.java create mode 100644 examples/13-shared/output/rust/.gitignore create mode 100644 examples/13-shared/output/rust/Cargo.lock create mode 100644 examples/13-shared/output/rust/Cargo.toml create mode 100644 examples/13-shared/output/rust/rust-toolchain.toml create mode 100644 examples/13-shared/output/rust/src/lib.rs create mode 100644 examples/13-shared/output/rust/src/point.rs create mode 100644 examples/13-shared/src/point.hob create mode 100644 examples/14-custom-code/hobgoblin.json5 create mode 100644 examples/14-custom-code/output/java/.gitignore create mode 120000 examples/14-custom-code/output/java/pom.xml create mode 100644 examples/14-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java create mode 100644 examples/14-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java create mode 100644 examples/14-custom-code/output/rust/.gitignore create mode 100644 examples/14-custom-code/output/rust/Cargo.lock create mode 100644 examples/14-custom-code/output/rust/Cargo.toml create mode 100644 examples/14-custom-code/output/rust/rust-toolchain.toml create mode 100644 examples/14-custom-code/output/rust/src/gen/shapes.rs create mode 100644 examples/14-custom-code/output/rust/src/lib.rs create mode 100644 examples/14-custom-code/output/rust/src/shapes.rs create mode 100644 examples/14-custom-code/src/shapes.hob delete mode 100644 examples/14-imports/hobgoblin.json5 delete mode 100644 examples/14-imports/output/java/.gitignore delete mode 120000 examples/14-imports/output/java/pom.xml delete mode 100644 examples/14-imports/output/java/src/test/java/org/zwobble/example/LineTests.java delete mode 100644 examples/14-imports/output/rust/.gitignore delete mode 100644 examples/14-imports/output/rust/Cargo.lock delete mode 100644 examples/14-imports/output/rust/Cargo.toml delete mode 100644 examples/14-imports/output/rust/rust-toolchain.toml delete mode 100644 examples/14-imports/output/rust/src/lib.rs delete mode 100644 examples/14-imports/output/rust/src/line.rs delete mode 100644 examples/14-imports/output/rust/src/point.rs delete mode 100644 examples/14-imports/src/line.hob delete mode 100644 examples/14-imports/src/point.hob create mode 100644 examples/15-imports/hobgoblin.json5 create mode 100644 examples/15-imports/output/java/.gitignore create mode 120000 examples/15-imports/output/java/pom.xml create mode 100644 examples/15-imports/output/java/src/test/java/org/zwobble/example/LineTests.java create mode 100644 examples/15-imports/output/rust/.gitignore create mode 100644 examples/15-imports/output/rust/Cargo.lock create mode 100644 examples/15-imports/output/rust/Cargo.toml create mode 100644 examples/15-imports/output/rust/rust-toolchain.toml create mode 100644 examples/15-imports/output/rust/src/lib.rs create mode 100644 examples/15-imports/output/rust/src/line.rs create mode 100644 examples/15-imports/output/rust/src/point.rs create mode 100644 examples/15-imports/src/line.hob create mode 100644 examples/15-imports/src/point.hob delete mode 100644 examples/15-transient-0/hobgoblin.json5 delete mode 100644 examples/15-transient-0/output/java/.gitignore delete mode 120000 examples/15-transient-0/output/java/pom.xml delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java delete mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java delete mode 100644 examples/15-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java delete mode 100644 examples/15-transient-0/output/rust/.gitignore delete mode 100644 examples/15-transient-0/output/rust/Cargo.lock delete mode 100644 examples/15-transient-0/output/rust/Cargo.toml delete mode 100644 examples/15-transient-0/output/rust/rust-toolchain.toml delete mode 100644 examples/15-transient-0/output/rust/src/data.rs delete mode 100644 examples/15-transient-0/output/rust/src/gen/data.rs delete mode 100644 examples/15-transient-0/output/rust/src/gen/data/transient_0.rs delete mode 100644 examples/15-transient-0/output/rust/src/gen/transient_0.rs delete mode 100644 examples/15-transient-0/output/rust/src/lib.rs delete mode 100644 examples/15-transient-0/output/rust/src/transient_0.rs delete mode 100644 examples/15-transient-0/src/data.hob create mode 100644 examples/16-transient-0/hobgoblin.json5 create mode 100644 examples/16-transient-0/output/java/.gitignore create mode 120000 examples/16-transient-0/output/java/pom.xml create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java create mode 100644 examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java create mode 100644 examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java create mode 100644 examples/16-transient-0/output/rust/.gitignore create mode 100644 examples/16-transient-0/output/rust/Cargo.lock create mode 100644 examples/16-transient-0/output/rust/Cargo.toml create mode 100644 examples/16-transient-0/output/rust/rust-toolchain.toml create mode 100644 examples/16-transient-0/output/rust/src/data.rs create mode 100644 examples/16-transient-0/output/rust/src/gen/data.rs create mode 100644 examples/16-transient-0/output/rust/src/gen/data/transient_0.rs create mode 100644 examples/16-transient-0/output/rust/src/gen/transient_0.rs create mode 100644 examples/16-transient-0/output/rust/src/lib.rs create mode 100644 examples/16-transient-0/output/rust/src/transient_0.rs create mode 100644 examples/16-transient-0/src/data.hob diff --git a/examples/03-struct-generic/hobgoblin.json5 b/examples/03-struct-generic/hobgoblin.json5 new file mode 100644 index 0000000..b5ea8a6 --- /dev/null +++ b/examples/03-struct-generic/hobgoblin.json5 @@ -0,0 +1,23 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ +// { +// generator: "java-types", +// path: "output/java/src/gen/java", +// }, +// { +// generator: "java-precisely-matchers", +// path: "output/java/src/gen/java", +// }, +// { +// generator: "rust-types", +// path: "output/rust/src", +// }, + ], + } +} diff --git a/examples/03-struct-generic/src/point.hob b/examples/03-struct-generic/src/point.hob new file mode 100644 index 0000000..3ed314a --- /dev/null +++ b/examples/03-struct-generic/src/point.hob @@ -0,0 +1,11 @@ +/// A straight line from one point to another. +struct Line[TPoint] { + field start: TPoint; + field end: TPoint; +} + +/// A 2D point. +struct Point { + field x: Int32; + field y: Int32; +} diff --git a/examples/03-sum/hobgoblin.json5 b/examples/03-sum/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/03-sum/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/03-sum/output/java/.gitignore b/examples/03-sum/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/03-sum/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/03-sum/output/java/pom.xml b/examples/03-sum/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/03-sum/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/03-sum/output/java/src/main/java/org/zwobble/example/Shapes.java b/examples/03-sum/output/java/src/main/java/org/zwobble/example/Shapes.java deleted file mode 100644 index a6a468f..0000000 --- a/examples/03-sum/output/java/src/main/java/org/zwobble/example/Shapes.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.zwobble.example; - -import org.zwobble.example.types.shapes.Shape; -import org.zwobble.example.types.shapes.Rectangle; -import org.zwobble.example.types.shapes.Triangle; - -public class Shapes { - public static int area(Shape shape) { - return switch (shape) { - case Rectangle(var width, var height) -> - width * height; - - case Triangle(var width, var height) -> - width * height / 2; - }; - } -} diff --git a/examples/03-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java b/examples/03-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java deleted file mode 100644 index 893a544..0000000 --- a/examples/03-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.shapes.Shape; -import org.zwobble.example.types.shapes.Rectangle; -import org.zwobble.example.types.shapes.Triangle; - -public class ShapesTests { - @Test - public void rectangle() { - Shape rectangle = new Rectangle(10, 25); - int area = Shapes.area(rectangle); - assertEquals(area, 250); - } - - @Test - public void triangle() { - Shape triangle = new Triangle(10, 25); - int area = Shapes.area(triangle); - assertEquals(area, 125); - } -} diff --git a/examples/03-sum/output/rust/.gitignore b/examples/03-sum/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/03-sum/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/03-sum/output/rust/Cargo.lock b/examples/03-sum/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/03-sum/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/03-sum/output/rust/Cargo.toml b/examples/03-sum/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/03-sum/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/03-sum/output/rust/rust-toolchain.toml b/examples/03-sum/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/03-sum/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/03-sum/output/rust/src/lib.rs b/examples/03-sum/output/rust/src/lib.rs deleted file mode 100644 index f961002..0000000 --- a/examples/03-sum/output/rust/src/lib.rs +++ /dev/null @@ -1,29 +0,0 @@ -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/03-sum/output/rust/src/shapes.rs b/examples/03-sum/output/rust/src/shapes.rs deleted file mode 100644 index 2712e41..0000000 --- a/examples/03-sum/output/rust/src/shapes.rs +++ /dev/null @@ -1,32 +0,0 @@ -// 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:: for crate::shapes::Shape { - fn from(value: crate::shapes::Rectangle) -> Self { - Self::Rectangle(value) - } -} - -impl ::std::convert::From:: 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, -} diff --git a/examples/03-sum/src/shapes.hob b/examples/03-sum/src/shapes.hob deleted file mode 100644 index 03a727a..0000000 --- a/examples/03-sum/src/shapes.hob +++ /dev/null @@ -1,17 +0,0 @@ -/// A 2D shape. -sum Shape { - variant Rectangle; - variant Triangle; - - field width: Int32; -} - -struct Rectangle { - field width: Int32; - field height: Int32; -} - -struct Triangle { - field width: Int32; - field height: Int32; -} diff --git a/examples/04-box/hobgoblin.json5 b/examples/04-box/hobgoblin.json5 deleted file mode 100644 index 19e0f93..0000000 --- a/examples/04-box/hobgoblin.json5 +++ /dev/null @@ -1,23 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "java-precisely-matchers", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - } -} diff --git a/examples/04-box/output/java/.gitignore b/examples/04-box/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/04-box/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/04-box/output/java/pom.xml b/examples/04-box/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/04-box/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/04-box/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/04-box/output/java/src/test/java/org/zwobble/example/PointTests.java deleted file mode 100644 index 16f3c62..0000000 --- a/examples/04-box/output/java/src/test/java/org/zwobble/example/PointTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.point.Line; -import org.zwobble.example.types.point.Point; - -public class PointTests { - @Test - public void lineFields() { - var line = new Line( - new Point(10, 25), - new Point(42, 47) - ); - } -} diff --git a/examples/04-box/output/rust/.gitignore b/examples/04-box/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/04-box/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/04-box/output/rust/Cargo.lock b/examples/04-box/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/04-box/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/04-box/output/rust/Cargo.toml b/examples/04-box/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/04-box/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/04-box/output/rust/rust-toolchain.toml b/examples/04-box/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/04-box/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/04-box/output/rust/src/lib.rs b/examples/04-box/output/rust/src/lib.rs deleted file mode 100644 index a324869..0000000 --- a/examples/04-box/output/rust/src/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -mod point; - -#[cfg(test)] -mod test { - use super::point::{Line, Point}; - - #[test] - fn line_fields() { - let line = Line { - start: Box::new(Point { x: 10, y: 25 }), - end: Box::new(Point { x: 42, y: 47 }), - }; - } -} diff --git a/examples/04-box/output/rust/src/point.rs b/examples/04-box/output/rust/src/point.rs deleted file mode 100644 index 9629fc1..0000000 --- a/examples/04-box/output/rust/src/point.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Generated by hobgoblin. - -/// A straight line from one point to another. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Line { - pub start: ::std::boxed::Box::, - pub end: ::std::boxed::Box::, -} - -/// A 2D point. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Point { - pub x: ::core::primitive::i32, - pub y: ::core::primitive::i32, -} diff --git a/examples/04-box/src/point.hob b/examples/04-box/src/point.hob deleted file mode 100644 index ba9fa89..0000000 --- a/examples/04-box/src/point.hob +++ /dev/null @@ -1,11 +0,0 @@ -/// A straight line from one point to another. -struct Line { - field start: Box[Point]; - field end: Box[Point]; -} - -/// A 2D point. -struct Point { - field x: Int32; - field y: Int32; -} diff --git a/examples/04-sum/hobgoblin.json5 b/examples/04-sum/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/04-sum/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/04-sum/output/java/.gitignore b/examples/04-sum/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/04-sum/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/04-sum/output/java/pom.xml b/examples/04-sum/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/04-sum/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/04-sum/output/java/src/main/java/org/zwobble/example/Shapes.java b/examples/04-sum/output/java/src/main/java/org/zwobble/example/Shapes.java new file mode 100644 index 0000000..a6a468f --- /dev/null +++ b/examples/04-sum/output/java/src/main/java/org/zwobble/example/Shapes.java @@ -0,0 +1,17 @@ +package org.zwobble.example; + +import org.zwobble.example.types.shapes.Shape; +import org.zwobble.example.types.shapes.Rectangle; +import org.zwobble.example.types.shapes.Triangle; + +public class Shapes { + public static int area(Shape shape) { + return switch (shape) { + case Rectangle(var width, var height) -> + width * height; + + case Triangle(var width, var height) -> + width * height / 2; + }; + } +} diff --git a/examples/04-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java b/examples/04-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java new file mode 100644 index 0000000..893a544 --- /dev/null +++ b/examples/04-sum/output/java/src/test/java/org/zwobble/example/ShapesTests.java @@ -0,0 +1,23 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.shapes.Shape; +import org.zwobble.example.types.shapes.Rectangle; +import org.zwobble.example.types.shapes.Triangle; + +public class ShapesTests { + @Test + public void rectangle() { + Shape rectangle = new Rectangle(10, 25); + int area = Shapes.area(rectangle); + assertEquals(area, 250); + } + + @Test + public void triangle() { + Shape triangle = new Triangle(10, 25); + int area = Shapes.area(triangle); + assertEquals(area, 125); + } +} diff --git a/examples/04-sum/output/rust/.gitignore b/examples/04-sum/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/04-sum/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/04-sum/output/rust/Cargo.lock b/examples/04-sum/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/04-sum/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/04-sum/output/rust/Cargo.toml b/examples/04-sum/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/04-sum/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/04-sum/output/rust/rust-toolchain.toml b/examples/04-sum/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/04-sum/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" 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:: for crate::shapes::Shape { + fn from(value: crate::shapes::Rectangle) -> Self { + Self::Rectangle(value) + } +} + +impl ::std::convert::From:: 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, +} diff --git a/examples/04-sum/src/shapes.hob b/examples/04-sum/src/shapes.hob new file mode 100644 index 0000000..03a727a --- /dev/null +++ b/examples/04-sum/src/shapes.hob @@ -0,0 +1,17 @@ +/// A 2D shape. +sum Shape { + variant Rectangle; + variant Triangle; + + field width: Int32; +} + +struct Rectangle { + field width: Int32; + field height: Int32; +} + +struct Triangle { + field width: Int32; + field height: Int32; +} diff --git a/examples/05-box/hobgoblin.json5 b/examples/05-box/hobgoblin.json5 new file mode 100644 index 0000000..19e0f93 --- /dev/null +++ b/examples/05-box/hobgoblin.json5 @@ -0,0 +1,23 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "java-precisely-matchers", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + } +} diff --git a/examples/05-box/output/java/.gitignore b/examples/05-box/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/05-box/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/05-box/output/java/pom.xml b/examples/05-box/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/05-box/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/05-box/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/05-box/output/java/src/test/java/org/zwobble/example/PointTests.java new file mode 100644 index 0000000..16f3c62 --- /dev/null +++ b/examples/05-box/output/java/src/test/java/org/zwobble/example/PointTests.java @@ -0,0 +1,16 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.point.Line; +import org.zwobble.example.types.point.Point; + +public class PointTests { + @Test + public void lineFields() { + var line = new Line( + new Point(10, 25), + new Point(42, 47) + ); + } +} diff --git a/examples/05-box/output/rust/.gitignore b/examples/05-box/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/05-box/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/05-box/output/rust/Cargo.lock b/examples/05-box/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/05-box/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/05-box/output/rust/Cargo.toml b/examples/05-box/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/05-box/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/05-box/output/rust/rust-toolchain.toml b/examples/05-box/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/05-box/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/05-box/output/rust/src/lib.rs b/examples/05-box/output/rust/src/lib.rs new file mode 100644 index 0000000..a324869 --- /dev/null +++ b/examples/05-box/output/rust/src/lib.rs @@ -0,0 +1,14 @@ +mod point; + +#[cfg(test)] +mod test { + use super::point::{Line, Point}; + + #[test] + fn line_fields() { + let line = Line { + start: Box::new(Point { x: 10, y: 25 }), + end: Box::new(Point { x: 42, y: 47 }), + }; + } +} diff --git a/examples/05-box/output/rust/src/point.rs b/examples/05-box/output/rust/src/point.rs new file mode 100644 index 0000000..9629fc1 --- /dev/null +++ b/examples/05-box/output/rust/src/point.rs @@ -0,0 +1,15 @@ +// Generated by hobgoblin. + +/// A straight line from one point to another. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Line { + pub start: ::std::boxed::Box::, + pub end: ::std::boxed::Box::, +} + +/// A 2D point. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Point { + pub x: ::core::primitive::i32, + pub y: ::core::primitive::i32, +} diff --git a/examples/05-box/src/point.hob b/examples/05-box/src/point.hob new file mode 100644 index 0000000..ba9fa89 --- /dev/null +++ b/examples/05-box/src/point.hob @@ -0,0 +1,11 @@ +/// A straight line from one point to another. +struct Line { + field start: Box[Point]; + field end: Box[Point]; +} + +/// A 2D point. +struct Point { + field x: Int32; + field y: Int32; +} diff --git a/examples/05-inductive-data-types/hobgoblin.json5 b/examples/05-inductive-data-types/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/05-inductive-data-types/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/05-inductive-data-types/output/java/.gitignore b/examples/05-inductive-data-types/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/05-inductive-data-types/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/05-inductive-data-types/output/java/pom.xml b/examples/05-inductive-data-types/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/05-inductive-data-types/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/05-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java b/examples/05-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java deleted file mode 100644 index 08cb75c..0000000 --- a/examples/05-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.zwobble.example; - -import org.zwobble.example.types.arithmetic.Add; -import org.zwobble.example.types.arithmetic.Const; -import org.zwobble.example.types.arithmetic.Expression; - -public class Arithmetic { - public static int eval(Expression expression) { - return switch (expression) { - case Add(var left, var right) -> - eval(left) + eval(right); - - case Const(var value) -> - value; - }; - } -} diff --git a/examples/05-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java b/examples/05-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java deleted file mode 100644 index cd4fdd0..0000000 --- a/examples/05-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.arithmetic.Add; -import org.zwobble.example.types.arithmetic.Const; -import org.zwobble.example.types.arithmetic.Expression; - -public class ArithmeticTests { - @Test - public void eval() { - Expression expression = new Add( - new Add( - new Const(42), - new Const(47) - ), - new Const(52) - ); - - int result = Arithmetic.eval(expression); - - assertEquals(result, 141); - } -} diff --git a/examples/05-inductive-data-types/output/rust/.gitignore b/examples/05-inductive-data-types/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/05-inductive-data-types/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/05-inductive-data-types/output/rust/Cargo.lock b/examples/05-inductive-data-types/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/05-inductive-data-types/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/05-inductive-data-types/output/rust/Cargo.toml b/examples/05-inductive-data-types/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/05-inductive-data-types/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/05-inductive-data-types/output/rust/rust-toolchain.toml b/examples/05-inductive-data-types/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/05-inductive-data-types/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/05-inductive-data-types/output/rust/src/arithmetic.rs b/examples/05-inductive-data-types/output/rust/src/arithmetic.rs deleted file mode 100644 index 248d2c1..0000000 --- a/examples/05-inductive-data-types/output/rust/src/arithmetic.rs +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub enum Expression { - Add(::std::boxed::Box::), - Const(crate::arithmetic::Const), -} - -impl ::std::convert::From:: for crate::arithmetic::Expression { - fn from(value: crate::arithmetic::Add) -> Self { - Self::Add(::std::boxed::Box::new(value)) - } -} - -impl ::std::convert::From:: for crate::arithmetic::Expression { - fn from(value: crate::arithmetic::Const) -> Self { - Self::Const(value) - } -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Add { - pub left: crate::arithmetic::Expression, - pub right: crate::arithmetic::Expression, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Const { - pub value: ::core::primitive::i32, -} diff --git a/examples/05-inductive-data-types/output/rust/src/lib.rs b/examples/05-inductive-data-types/output/rust/src/lib.rs deleted file mode 100644 index 3265e69..0000000 --- a/examples/05-inductive-data-types/output/rust/src/lib.rs +++ /dev/null @@ -1,33 +0,0 @@ -mod arithmetic; - -use arithmetic::{Const, Expression}; - -fn eval(expression: &Expression) -> i32 { - match expression { - Expression::Add(add) => - eval(&add.left) + eval(&add.right), - - Expression::Const(Const { value }) => - *value, - } -} - -#[cfg(test)] -mod test { - use super::arithmetic::{Add, Const, Expression}; - - #[test] - fn eval() { - let expression: Expression = Add { - left: Add { - left: Const { value: 42 }.into(), - right: Const { value: 47 }.into(), - }.into(), - right: Const { value: 52 }.into(), - }.into(); - - let result = super::eval(&expression); - - assert_eq!(result, 141); - } -} diff --git a/examples/05-inductive-data-types/src/arithmetic.hob b/examples/05-inductive-data-types/src/arithmetic.hob deleted file mode 100644 index d3b2051..0000000 --- a/examples/05-inductive-data-types/src/arithmetic.hob +++ /dev/null @@ -1,13 +0,0 @@ -sum Expression { - variant Box[Add]; - variant Const; -} - -struct Add { - field left: Expression; - field right: Expression; -} - -struct Const { - field value: Int32; -} diff --git a/examples/06-inductive-data-types-separate-namespaces/hobgoblin.json5 b/examples/06-inductive-data-types-separate-namespaces/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/06-inductive-data-types-separate-namespaces/output/java/.gitignore b/examples/06-inductive-data-types-separate-namespaces/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/06-inductive-data-types-separate-namespaces/output/java/pom.xml b/examples/06-inductive-data-types-separate-namespaces/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/06-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java b/examples/06-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java deleted file mode 100644 index f01bf0a..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.zwobble.example; - -import java.util.Optional; -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.data.a.A1; -import org.zwobble.example.types.data.b.B; - -public class DataTests { - @Test - public void data() { - var data = new A1(Optional.of(new B(Optional.of(new A1(Optional.empty()))))); - } -} diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/.gitignore b/examples/06-inductive-data-types-separate-namespaces/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.lock b/examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.toml b/examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml b/examples/06-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs b/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs deleted file mode 100644 index 1ec823f..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub enum A { - A1(::std::boxed::Box::), -} - -impl ::std::convert::From:: for crate::data::a::A { - fn from(value: crate::data::a::A1) -> Self { - Self::A1(::std::boxed::Box::new(value)) - } -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct A1 { - pub b: ::std::option::Option::, -} diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs b/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs deleted file mode 100644 index 38bf8fc..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct B { - pub a: ::std::option::Option::, -} diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs b/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs deleted file mode 100644 index 677af14..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod a; -pub mod b; diff --git a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/lib.rs b/examples/06-inductive-data-types-separate-namespaces/output/rust/src/lib.rs deleted file mode 100644 index 01aaddf..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/output/rust/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -mod data; - -#[cfg(test)] -mod test { - use super::data::{a::{A, A1}, b::B}; - - #[test] - fn data() { - let data = A::A1(Box::new(A1 { - b: Some(B { - a: Some(A::A1(Box::new(A1 { b: None }))), - }), - })); - } -} diff --git a/examples/06-inductive-data-types-separate-namespaces/src/data/a.hob b/examples/06-inductive-data-types-separate-namespaces/src/data/a.hob deleted file mode 100644 index e8c02ea..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/src/data/a.hob +++ /dev/null @@ -1,9 +0,0 @@ -import {B} from ./b; - -sum A { - variant Box[A1]; -} - -struct A1 { - field b: Option[B]; -} diff --git a/examples/06-inductive-data-types-separate-namespaces/src/data/b.hob b/examples/06-inductive-data-types-separate-namespaces/src/data/b.hob deleted file mode 100644 index 4d538fc..0000000 --- a/examples/06-inductive-data-types-separate-namespaces/src/data/b.hob +++ /dev/null @@ -1,5 +0,0 @@ -import {A} from ./a; - -struct B { - field a: Option[A]; -} diff --git a/examples/06-inductive-data-types/hobgoblin.json5 b/examples/06-inductive-data-types/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/06-inductive-data-types/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/06-inductive-data-types/output/java/.gitignore b/examples/06-inductive-data-types/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/06-inductive-data-types/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/06-inductive-data-types/output/java/pom.xml b/examples/06-inductive-data-types/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/06-inductive-data-types/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/06-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java b/examples/06-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java new file mode 100644 index 0000000..08cb75c --- /dev/null +++ b/examples/06-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java @@ -0,0 +1,17 @@ +package org.zwobble.example; + +import org.zwobble.example.types.arithmetic.Add; +import org.zwobble.example.types.arithmetic.Const; +import org.zwobble.example.types.arithmetic.Expression; + +public class Arithmetic { + public static int eval(Expression expression) { + return switch (expression) { + case Add(var left, var right) -> + eval(left) + eval(right); + + case Const(var value) -> + value; + }; + } +} diff --git a/examples/06-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java b/examples/06-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java new file mode 100644 index 0000000..cd4fdd0 --- /dev/null +++ b/examples/06-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java @@ -0,0 +1,24 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.arithmetic.Add; +import org.zwobble.example.types.arithmetic.Const; +import org.zwobble.example.types.arithmetic.Expression; + +public class ArithmeticTests { + @Test + public void eval() { + Expression expression = new Add( + new Add( + new Const(42), + new Const(47) + ), + new Const(52) + ); + + int result = Arithmetic.eval(expression); + + assertEquals(result, 141); + } +} diff --git a/examples/06-inductive-data-types/output/rust/.gitignore b/examples/06-inductive-data-types/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/06-inductive-data-types/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/06-inductive-data-types/output/rust/Cargo.lock b/examples/06-inductive-data-types/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/06-inductive-data-types/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/06-inductive-data-types/output/rust/Cargo.toml b/examples/06-inductive-data-types/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/06-inductive-data-types/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/06-inductive-data-types/output/rust/rust-toolchain.toml b/examples/06-inductive-data-types/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/06-inductive-data-types/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/06-inductive-data-types/output/rust/src/arithmetic.rs b/examples/06-inductive-data-types/output/rust/src/arithmetic.rs new file mode 100644 index 0000000..248d2c1 --- /dev/null +++ b/examples/06-inductive-data-types/output/rust/src/arithmetic.rs @@ -0,0 +1,30 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub enum Expression { + Add(::std::boxed::Box::), + Const(crate::arithmetic::Const), +} + +impl ::std::convert::From:: for crate::arithmetic::Expression { + fn from(value: crate::arithmetic::Add) -> Self { + Self::Add(::std::boxed::Box::new(value)) + } +} + +impl ::std::convert::From:: for crate::arithmetic::Expression { + fn from(value: crate::arithmetic::Const) -> Self { + Self::Const(value) + } +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Add { + pub left: crate::arithmetic::Expression, + pub right: crate::arithmetic::Expression, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Const { + pub value: ::core::primitive::i32, +} diff --git a/examples/06-inductive-data-types/output/rust/src/lib.rs b/examples/06-inductive-data-types/output/rust/src/lib.rs new file mode 100644 index 0000000..3265e69 --- /dev/null +++ b/examples/06-inductive-data-types/output/rust/src/lib.rs @@ -0,0 +1,33 @@ +mod arithmetic; + +use arithmetic::{Const, Expression}; + +fn eval(expression: &Expression) -> i32 { + match expression { + Expression::Add(add) => + eval(&add.left) + eval(&add.right), + + Expression::Const(Const { value }) => + *value, + } +} + +#[cfg(test)] +mod test { + use super::arithmetic::{Add, Const, Expression}; + + #[test] + fn eval() { + let expression: Expression = Add { + left: Add { + left: Const { value: 42 }.into(), + right: Const { value: 47 }.into(), + }.into(), + right: Const { value: 52 }.into(), + }.into(); + + let result = super::eval(&expression); + + assert_eq!(result, 141); + } +} diff --git a/examples/06-inductive-data-types/src/arithmetic.hob b/examples/06-inductive-data-types/src/arithmetic.hob new file mode 100644 index 0000000..d3b2051 --- /dev/null +++ b/examples/06-inductive-data-types/src/arithmetic.hob @@ -0,0 +1,13 @@ +sum Expression { + variant Box[Add]; + variant Const; +} + +struct Add { + field left: Expression; + field right: Expression; +} + +struct Const { + field value: Int32; +} diff --git a/examples/07-enum/hobgoblin.json5 b/examples/07-enum/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/07-enum/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/07-enum/output/java/.gitignore b/examples/07-enum/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/07-enum/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/07-enum/output/java/pom.xml b/examples/07-enum/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/07-enum/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/07-enum/output/java/src/main/java/org/zwobble/example/Numbers.java b/examples/07-enum/output/java/src/main/java/org/zwobble/example/Numbers.java deleted file mode 100644 index fc17869..0000000 --- a/examples/07-enum/output/java/src/main/java/org/zwobble/example/Numbers.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.zwobble.example; - -import org.zwobble.example.types.numbers.SmallNumber; - -public class Numbers { - public static int eval(SmallNumber smallNumber) { - return switch (smallNumber) { - case ZERO -> 0; - case ONE -> 1; - case TWO -> 2; - }; - } -} diff --git a/examples/07-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java b/examples/07-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java deleted file mode 100644 index 141d5d1..0000000 --- a/examples/07-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.numbers.SmallNumber; - -public class NumbersTests { - @Test - public void canEvalSmallNumbers() { - assertEquals(Numbers.eval(SmallNumber.ZERO), 0); - assertEquals(Numbers.eval(SmallNumber.ONE), 1); - assertEquals(Numbers.eval(SmallNumber.TWO), 2); - } -} diff --git a/examples/07-enum/output/rust/.gitignore b/examples/07-enum/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/07-enum/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/07-enum/output/rust/Cargo.lock b/examples/07-enum/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/07-enum/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/07-enum/output/rust/Cargo.toml b/examples/07-enum/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/07-enum/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/07-enum/output/rust/rust-toolchain.toml b/examples/07-enum/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/07-enum/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/07-enum/output/rust/src/lib.rs b/examples/07-enum/output/rust/src/lib.rs deleted file mode 100644 index ae0b67c..0000000 --- a/examples/07-enum/output/rust/src/lib.rs +++ /dev/null @@ -1,23 +0,0 @@ -mod numbers; - -use numbers::SmallNumber; - -fn eval(small_number: SmallNumber) -> i32 { - match small_number { - SmallNumber::Zero => 0, - SmallNumber::One => 1, - SmallNumber::Two => 2, - } -} - -#[cfg(test)] -mod test { - use super::numbers::SmallNumber; - - #[test] - fn can_eval_small_numbers() { - assert_eq!(super::eval(SmallNumber::Zero), 0); - assert_eq!(super::eval(SmallNumber::One), 1); - assert_eq!(super::eval(SmallNumber::Two), 2); - } -} diff --git a/examples/07-enum/output/rust/src/numbers.rs b/examples/07-enum/output/rust/src/numbers.rs deleted file mode 100644 index 29483ba..0000000 --- a/examples/07-enum/output/rust/src/numbers.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by hobgoblin. - -/// A small number. -#[derive(Clone, Copy, Debug, Hash, PartialEq)] -pub enum SmallNumber { - Zero, - One, - Two, -} diff --git a/examples/07-enum/src/numbers.hob b/examples/07-enum/src/numbers.hob deleted file mode 100644 index 125082d..0000000 --- a/examples/07-enum/src/numbers.hob +++ /dev/null @@ -1,6 +0,0 @@ -/// A small number. -enum SmallNumber { - variant zero; - variant one; - variant two; -} diff --git a/examples/07-inductive-data-types-separate-namespaces/hobgoblin.json5 b/examples/07-inductive-data-types-separate-namespaces/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/07-inductive-data-types-separate-namespaces/output/java/.gitignore b/examples/07-inductive-data-types-separate-namespaces/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/07-inductive-data-types-separate-namespaces/output/java/pom.xml b/examples/07-inductive-data-types-separate-namespaces/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/07-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java b/examples/07-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java new file mode 100644 index 0000000..f01bf0a --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java @@ -0,0 +1,14 @@ +package org.zwobble.example; + +import java.util.Optional; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.data.a.A1; +import org.zwobble.example.types.data.b.B; + +public class DataTests { + @Test + public void data() { + var data = new A1(Optional.of(new B(Optional.of(new A1(Optional.empty()))))); + } +} diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/.gitignore b/examples/07-inductive-data-types-separate-namespaces/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.lock b/examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.toml b/examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml b/examples/07-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs new file mode 100644 index 0000000..1ec823f --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs @@ -0,0 +1,17 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub enum A { + A1(::std::boxed::Box::), +} + +impl ::std::convert::From:: for crate::data::a::A { + fn from(value: crate::data::a::A1) -> Self { + Self::A1(::std::boxed::Box::new(value)) + } +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct A1 { + pub b: ::std::option::Option::, +} diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs new file mode 100644 index 0000000..38bf8fc --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs @@ -0,0 +1,6 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct B { + pub a: ::std::option::Option::, +} diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs new file mode 100644 index 0000000..677af14 --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs @@ -0,0 +1,2 @@ +pub mod a; +pub mod b; diff --git a/examples/07-inductive-data-types-separate-namespaces/output/rust/src/lib.rs b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/lib.rs new file mode 100644 index 0000000..01aaddf --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/output/rust/src/lib.rs @@ -0,0 +1,15 @@ +mod data; + +#[cfg(test)] +mod test { + use super::data::{a::{A, A1}, b::B}; + + #[test] + fn data() { + let data = A::A1(Box::new(A1 { + b: Some(B { + a: Some(A::A1(Box::new(A1 { b: None }))), + }), + })); + } +} diff --git a/examples/07-inductive-data-types-separate-namespaces/src/data/a.hob b/examples/07-inductive-data-types-separate-namespaces/src/data/a.hob new file mode 100644 index 0000000..e8c02ea --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/src/data/a.hob @@ -0,0 +1,9 @@ +import {B} from ./b; + +sum A { + variant Box[A1]; +} + +struct A1 { + field b: Option[B]; +} diff --git a/examples/07-inductive-data-types-separate-namespaces/src/data/b.hob b/examples/07-inductive-data-types-separate-namespaces/src/data/b.hob new file mode 100644 index 0000000..4d538fc --- /dev/null +++ b/examples/07-inductive-data-types-separate-namespaces/src/data/b.hob @@ -0,0 +1,5 @@ +import {A} from ./a; + +struct B { + field a: Option[A]; +} diff --git a/examples/08-enum/hobgoblin.json5 b/examples/08-enum/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/08-enum/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/08-enum/output/java/.gitignore b/examples/08-enum/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/08-enum/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/08-enum/output/java/pom.xml b/examples/08-enum/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/08-enum/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/08-enum/output/java/src/main/java/org/zwobble/example/Numbers.java b/examples/08-enum/output/java/src/main/java/org/zwobble/example/Numbers.java new file mode 100644 index 0000000..fc17869 --- /dev/null +++ b/examples/08-enum/output/java/src/main/java/org/zwobble/example/Numbers.java @@ -0,0 +1,13 @@ +package org.zwobble.example; + +import org.zwobble.example.types.numbers.SmallNumber; + +public class Numbers { + public static int eval(SmallNumber smallNumber) { + return switch (smallNumber) { + case ZERO -> 0; + case ONE -> 1; + case TWO -> 2; + }; + } +} diff --git a/examples/08-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java b/examples/08-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java new file mode 100644 index 0000000..141d5d1 --- /dev/null +++ b/examples/08-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java @@ -0,0 +1,14 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.numbers.SmallNumber; + +public class NumbersTests { + @Test + public void canEvalSmallNumbers() { + assertEquals(Numbers.eval(SmallNumber.ZERO), 0); + assertEquals(Numbers.eval(SmallNumber.ONE), 1); + assertEquals(Numbers.eval(SmallNumber.TWO), 2); + } +} diff --git a/examples/08-enum/output/rust/.gitignore b/examples/08-enum/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/08-enum/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/08-enum/output/rust/Cargo.lock b/examples/08-enum/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/08-enum/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/08-enum/output/rust/Cargo.toml b/examples/08-enum/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/08-enum/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/08-enum/output/rust/rust-toolchain.toml b/examples/08-enum/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/08-enum/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/08-enum/output/rust/src/lib.rs b/examples/08-enum/output/rust/src/lib.rs new file mode 100644 index 0000000..ae0b67c --- /dev/null +++ b/examples/08-enum/output/rust/src/lib.rs @@ -0,0 +1,23 @@ +mod numbers; + +use numbers::SmallNumber; + +fn eval(small_number: SmallNumber) -> i32 { + match small_number { + SmallNumber::Zero => 0, + SmallNumber::One => 1, + SmallNumber::Two => 2, + } +} + +#[cfg(test)] +mod test { + use super::numbers::SmallNumber; + + #[test] + fn can_eval_small_numbers() { + assert_eq!(super::eval(SmallNumber::Zero), 0); + assert_eq!(super::eval(SmallNumber::One), 1); + assert_eq!(super::eval(SmallNumber::Two), 2); + } +} diff --git a/examples/08-enum/output/rust/src/numbers.rs b/examples/08-enum/output/rust/src/numbers.rs new file mode 100644 index 0000000..29483ba --- /dev/null +++ b/examples/08-enum/output/rust/src/numbers.rs @@ -0,0 +1,9 @@ +// Generated by hobgoblin. + +/// A small number. +#[derive(Clone, Copy, Debug, Hash, PartialEq)] +pub enum SmallNumber { + Zero, + One, + Two, +} diff --git a/examples/08-enum/src/numbers.hob b/examples/08-enum/src/numbers.hob new file mode 100644 index 0000000..125082d --- /dev/null +++ b/examples/08-enum/src/numbers.hob @@ -0,0 +1,6 @@ +/// A small number. +enum SmallNumber { + variant zero; + variant one; + variant two; +} diff --git a/examples/08-list/hobgoblin.json5 b/examples/08-list/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/08-list/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/08-list/output/java/.gitignore b/examples/08-list/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/08-list/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/08-list/output/java/pom.xml b/examples/08-list/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/08-list/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/08-list/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/08-list/output/java/src/test/java/org/zwobble/example/PointTests.java deleted file mode 100644 index e1528b5..0000000 --- a/examples/08-list/output/java/src/test/java/org/zwobble/example/PointTests.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import java.util.List; -import org.zwobble.example.types.point.Path; -import org.zwobble.example.types.point.Point; - -public class PointTests { - @Test - public void canCreatePathWithConstructor() { - Path path = new Path(List.of( - new Point(10, 25), - new Point(25, 10) - )); - - assertEquals(path.points().size(), 2); - } - - @Test - public void canCreatePathWithBuilder() { - Path path = Path.arbitrary() - .addPoint(new Point(10, 25)) - .addPoint(new Point(25, 10)) - .build(); - - assertEquals(path, new Path(List.of( - new Point(10, 25), - new Point(25, 10) - ))); - } -} diff --git a/examples/08-list/output/rust/.gitignore b/examples/08-list/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/08-list/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/08-list/output/rust/Cargo.lock b/examples/08-list/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/08-list/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/08-list/output/rust/Cargo.toml b/examples/08-list/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/08-list/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/08-list/output/rust/rust-toolchain.toml b/examples/08-list/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/08-list/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/08-list/output/rust/src/lib.rs b/examples/08-list/output/rust/src/lib.rs deleted file mode 100644 index 907ab8b..0000000 --- a/examples/08-list/output/rust/src/lib.rs +++ /dev/null @@ -1,16 +0,0 @@ -mod point; - -#[cfg(test)] -mod test { - use super::point::{Path, Point}; - - #[test] - fn can_create_path_directly() { - let path: Path = Path { - points: vec![ - Point { x: 10, y: 25 }, - Point { x: 25, y: 10 } - ], - }; - } -} diff --git a/examples/08-list/output/rust/src/point.rs b/examples/08-list/output/rust/src/point.rs deleted file mode 100644 index ebadf95..0000000 --- a/examples/08-list/output/rust/src/point.rs +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Path { - pub points: ::std::vec::Vec::, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Point { - pub x: ::core::primitive::i32, - pub y: ::core::primitive::i32, -} diff --git a/examples/08-list/src/point.hob b/examples/08-list/src/point.hob deleted file mode 100644 index 8dd438c..0000000 --- a/examples/08-list/src/point.hob +++ /dev/null @@ -1,8 +0,0 @@ -struct Path { - field points: List[Point]; -} - -struct Point { - field x: Int32; - field y: Int32; -} diff --git a/examples/09-list/hobgoblin.json5 b/examples/09-list/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/09-list/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/09-list/output/java/.gitignore b/examples/09-list/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/09-list/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/09-list/output/java/pom.xml b/examples/09-list/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/09-list/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/09-list/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/09-list/output/java/src/test/java/org/zwobble/example/PointTests.java new file mode 100644 index 0000000..e1528b5 --- /dev/null +++ b/examples/09-list/output/java/src/test/java/org/zwobble/example/PointTests.java @@ -0,0 +1,32 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import java.util.List; +import org.zwobble.example.types.point.Path; +import org.zwobble.example.types.point.Point; + +public class PointTests { + @Test + public void canCreatePathWithConstructor() { + Path path = new Path(List.of( + new Point(10, 25), + new Point(25, 10) + )); + + assertEquals(path.points().size(), 2); + } + + @Test + public void canCreatePathWithBuilder() { + Path path = Path.arbitrary() + .addPoint(new Point(10, 25)) + .addPoint(new Point(25, 10)) + .build(); + + assertEquals(path, new Path(List.of( + new Point(10, 25), + new Point(25, 10) + ))); + } +} diff --git a/examples/09-list/output/rust/.gitignore b/examples/09-list/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/09-list/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/09-list/output/rust/Cargo.lock b/examples/09-list/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/09-list/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/09-list/output/rust/Cargo.toml b/examples/09-list/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/09-list/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/09-list/output/rust/rust-toolchain.toml b/examples/09-list/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/09-list/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/09-list/output/rust/src/lib.rs b/examples/09-list/output/rust/src/lib.rs new file mode 100644 index 0000000..907ab8b --- /dev/null +++ b/examples/09-list/output/rust/src/lib.rs @@ -0,0 +1,16 @@ +mod point; + +#[cfg(test)] +mod test { + use super::point::{Path, Point}; + + #[test] + fn can_create_path_directly() { + let path: Path = Path { + points: vec![ + Point { x: 10, y: 25 }, + Point { x: 25, y: 10 } + ], + }; + } +} diff --git a/examples/09-list/output/rust/src/point.rs b/examples/09-list/output/rust/src/point.rs new file mode 100644 index 0000000..ebadf95 --- /dev/null +++ b/examples/09-list/output/rust/src/point.rs @@ -0,0 +1,12 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Path { + pub points: ::std::vec::Vec::, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Point { + pub x: ::core::primitive::i32, + pub y: ::core::primitive::i32, +} diff --git a/examples/09-list/src/point.hob b/examples/09-list/src/point.hob new file mode 100644 index 0000000..8dd438c --- /dev/null +++ b/examples/09-list/src/point.hob @@ -0,0 +1,8 @@ +struct Path { + field points: List[Point]; +} + +struct Point { + field x: Int32; + field y: Int32; +} diff --git a/examples/09-native-type/hobgoblin.json5 b/examples/09-native-type/hobgoblin.json5 deleted file mode 100644 index a0f60c3..0000000 --- a/examples/09-native-type/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src/gen", - }, - ], - }, -} diff --git a/examples/09-native-type/output/java/.gitignore b/examples/09-native-type/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/09-native-type/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/09-native-type/output/java/pom.xml b/examples/09-native-type/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/09-native-type/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java b/examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java deleted file mode 100644 index bdb5427..0000000 --- a/examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.zwobble.example.types.point; - -public class HobgoblinNativePoint { - public static Point arbitraryPoint() { - return new Point(0, 0); - } -} diff --git a/examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java b/examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java deleted file mode 100644 index cd26290..0000000 --- a/examples/09-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.zwobble.example.types.point; - -public record Point(int x, int y) { -} diff --git a/examples/09-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/09-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java deleted file mode 100644 index 8482673..0000000 --- a/examples/09-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.point.Line; -import org.zwobble.example.types.point.Point; - -public class PointTests { - @Test - public void canUseNativeTypes() { - Line line = new Line(new Point(10, 25), new Point(25, 10)); - } -} diff --git a/examples/09-native-type/output/rust/.gitignore b/examples/09-native-type/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/09-native-type/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/09-native-type/output/rust/Cargo.lock b/examples/09-native-type/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/09-native-type/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/09-native-type/output/rust/Cargo.toml b/examples/09-native-type/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/09-native-type/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/09-native-type/output/rust/rust-toolchain.toml b/examples/09-native-type/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/09-native-type/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/09-native-type/output/rust/src/gen/point.rs b/examples/09-native-type/output/rust/src/gen/point.rs deleted file mode 100644 index 8561605..0000000 --- a/examples/09-native-type/output/rust/src/gen/point.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Generated by hobgoblin. - -/// A straight line from one point to another. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Line { - pub start: crate::point::Point, - pub end: crate::point::Point, -} diff --git a/examples/09-native-type/output/rust/src/lib.rs b/examples/09-native-type/output/rust/src/lib.rs deleted file mode 100644 index 1179cff..0000000 --- a/examples/09-native-type/output/rust/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -mod point; - -#[cfg(test)] -mod test { - use super::point::{Line, Point}; - - #[test] - fn can_use_native_types() { - let line = Line { start: Point(10, 25), end: Point(25, 10) }; - } -} diff --git a/examples/09-native-type/output/rust/src/point.rs b/examples/09-native-type/output/rust/src/point.rs deleted file mode 100644 index 3c763e2..0000000 --- a/examples/09-native-type/output/rust/src/point.rs +++ /dev/null @@ -1,4 +0,0 @@ -include!("gen/point.rs"); - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Point(pub i32, pub i32); diff --git a/examples/09-native-type/src/point.hob b/examples/09-native-type/src/point.hob deleted file mode 100644 index 7178dcb..0000000 --- a/examples/09-native-type/src/point.hob +++ /dev/null @@ -1,8 +0,0 @@ -native Point { -} - -/// A straight line from one point to another. -struct Line { - field start: Point; - field end: Point; -} diff --git a/examples/10-native-type-custom-config/hobgoblin.json5 b/examples/10-native-type-custom-config/hobgoblin.json5 deleted file mode 100644 index f925903..0000000 --- a/examples/10-native-type-custom-config/hobgoblin.json5 +++ /dev/null @@ -1,33 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - nativeTypes: [ - { - hobgoblin: "point.Point", - java: "org.zwobble.example.Point", - }, - ], - }, - rust: { - nativeTypes: [ - { - hobgoblin: "point.Point", - rust: "crate::Point", - }, - ], - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/10-native-type-custom-config/output/java/.gitignore b/examples/10-native-type-custom-config/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/10-native-type-custom-config/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/10-native-type-custom-config/output/java/pom.xml b/examples/10-native-type-custom-config/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/10-native-type-custom-config/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java b/examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java deleted file mode 100644 index 8862a62..0000000 --- a/examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.zwobble.example; - -public record Point(int x, int y) { -} diff --git a/examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java b/examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java deleted file mode 100644 index 74ac856..0000000 --- a/examples/10-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.zwobble.example.types.point; - -import org.zwobble.example.Point; - -public class HobgoblinNativePoint { - public static Point arbitraryPoint() { - return new Point(0, 0); - } -} diff --git a/examples/10-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/10-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java deleted file mode 100644 index ea635ca..0000000 --- a/examples/10-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.point.Line; - -public class PointTests { - @Test - public void canUseNativeTypes() { - Line line = new Line(new Point(10, 25), new Point(25, 10)); - } -} diff --git a/examples/10-native-type-custom-config/output/rust/.gitignore b/examples/10-native-type-custom-config/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/10-native-type-custom-config/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/10-native-type-custom-config/output/rust/Cargo.lock b/examples/10-native-type-custom-config/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/10-native-type-custom-config/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/10-native-type-custom-config/output/rust/Cargo.toml b/examples/10-native-type-custom-config/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/10-native-type-custom-config/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/10-native-type-custom-config/output/rust/rust-toolchain.toml b/examples/10-native-type-custom-config/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/10-native-type-custom-config/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/10-native-type-custom-config/output/rust/src/main.rs b/examples/10-native-type-custom-config/output/rust/src/main.rs deleted file mode 100644 index fa127e8..0000000 --- a/examples/10-native-type-custom-config/output/rust/src/main.rs +++ /dev/null @@ -1,14 +0,0 @@ -mod point; - -#[derive(Clone, Debug, Hash, PartialEq)] -struct Point(i32, i32); - -#[cfg(test)] -mod test { - use super::{Point, point::Line}; - - #[test] - fn can_use_native_types() { - let line = Line { start: Point(10, 25), end: Point(25, 10) }; - } -} diff --git a/examples/10-native-type-custom-config/output/rust/src/point.rs b/examples/10-native-type-custom-config/output/rust/src/point.rs deleted file mode 100644 index f25a76f..0000000 --- a/examples/10-native-type-custom-config/output/rust/src/point.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Generated by hobgoblin. - -/// A straight line from one point to another. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Line { - pub start: crate::Point, - pub end: crate::Point, -} diff --git a/examples/10-native-type-custom-config/src/point.hob b/examples/10-native-type-custom-config/src/point.hob deleted file mode 100644 index 7178dcb..0000000 --- a/examples/10-native-type-custom-config/src/point.hob +++ /dev/null @@ -1,8 +0,0 @@ -native Point { -} - -/// A straight line from one point to another. -struct Line { - field start: Point; - field end: Point; -} diff --git a/examples/10-native-type/hobgoblin.json5 b/examples/10-native-type/hobgoblin.json5 new file mode 100644 index 0000000..a0f60c3 --- /dev/null +++ b/examples/10-native-type/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src/gen", + }, + ], + }, +} diff --git a/examples/10-native-type/output/java/.gitignore b/examples/10-native-type/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/10-native-type/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/10-native-type/output/java/pom.xml b/examples/10-native-type/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/10-native-type/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java b/examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java new file mode 100644 index 0000000..bdb5427 --- /dev/null +++ b/examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java @@ -0,0 +1,7 @@ +package org.zwobble.example.types.point; + +public class HobgoblinNativePoint { + public static Point arbitraryPoint() { + return new Point(0, 0); + } +} diff --git a/examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java b/examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java new file mode 100644 index 0000000..cd26290 --- /dev/null +++ b/examples/10-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java @@ -0,0 +1,4 @@ +package org.zwobble.example.types.point; + +public record Point(int x, int y) { +} diff --git a/examples/10-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/10-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java new file mode 100644 index 0000000..8482673 --- /dev/null +++ b/examples/10-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java @@ -0,0 +1,13 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.point.Line; +import org.zwobble.example.types.point.Point; + +public class PointTests { + @Test + public void canUseNativeTypes() { + Line line = new Line(new Point(10, 25), new Point(25, 10)); + } +} diff --git a/examples/10-native-type/output/rust/.gitignore b/examples/10-native-type/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/10-native-type/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/10-native-type/output/rust/Cargo.lock b/examples/10-native-type/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/10-native-type/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/10-native-type/output/rust/Cargo.toml b/examples/10-native-type/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/10-native-type/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/10-native-type/output/rust/rust-toolchain.toml b/examples/10-native-type/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/10-native-type/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/10-native-type/output/rust/src/gen/point.rs b/examples/10-native-type/output/rust/src/gen/point.rs new file mode 100644 index 0000000..8561605 --- /dev/null +++ b/examples/10-native-type/output/rust/src/gen/point.rs @@ -0,0 +1,8 @@ +// Generated by hobgoblin. + +/// A straight line from one point to another. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Line { + pub start: crate::point::Point, + pub end: crate::point::Point, +} diff --git a/examples/10-native-type/output/rust/src/lib.rs b/examples/10-native-type/output/rust/src/lib.rs new file mode 100644 index 0000000..1179cff --- /dev/null +++ b/examples/10-native-type/output/rust/src/lib.rs @@ -0,0 +1,11 @@ +mod point; + +#[cfg(test)] +mod test { + use super::point::{Line, Point}; + + #[test] + fn can_use_native_types() { + let line = Line { start: Point(10, 25), end: Point(25, 10) }; + } +} diff --git a/examples/10-native-type/output/rust/src/point.rs b/examples/10-native-type/output/rust/src/point.rs new file mode 100644 index 0000000..3c763e2 --- /dev/null +++ b/examples/10-native-type/output/rust/src/point.rs @@ -0,0 +1,4 @@ +include!("gen/point.rs"); + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Point(pub i32, pub i32); diff --git a/examples/10-native-type/src/point.hob b/examples/10-native-type/src/point.hob new file mode 100644 index 0000000..7178dcb --- /dev/null +++ b/examples/10-native-type/src/point.hob @@ -0,0 +1,8 @@ +native Point { +} + +/// A straight line from one point to another. +struct Line { + field start: Point; + field end: Point; +} diff --git a/examples/11-native-type-custom-config/hobgoblin.json5 b/examples/11-native-type-custom-config/hobgoblin.json5 new file mode 100644 index 0000000..f925903 --- /dev/null +++ b/examples/11-native-type-custom-config/hobgoblin.json5 @@ -0,0 +1,33 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + nativeTypes: [ + { + hobgoblin: "point.Point", + java: "org.zwobble.example.Point", + }, + ], + }, + rust: { + nativeTypes: [ + { + hobgoblin: "point.Point", + rust: "crate::Point", + }, + ], + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/11-native-type-custom-config/output/java/.gitignore b/examples/11-native-type-custom-config/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/11-native-type-custom-config/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/11-native-type-custom-config/output/java/pom.xml b/examples/11-native-type-custom-config/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/11-native-type-custom-config/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java b/examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java new file mode 100644 index 0000000..8862a62 --- /dev/null +++ b/examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java @@ -0,0 +1,4 @@ +package org.zwobble.example; + +public record Point(int x, int y) { +} diff --git a/examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java b/examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java new file mode 100644 index 0000000..74ac856 --- /dev/null +++ b/examples/11-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java @@ -0,0 +1,9 @@ +package org.zwobble.example.types.point; + +import org.zwobble.example.Point; + +public class HobgoblinNativePoint { + public static Point arbitraryPoint() { + return new Point(0, 0); + } +} diff --git a/examples/11-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/11-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java new file mode 100644 index 0000000..ea635ca --- /dev/null +++ b/examples/11-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java @@ -0,0 +1,12 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.point.Line; + +public class PointTests { + @Test + public void canUseNativeTypes() { + Line line = new Line(new Point(10, 25), new Point(25, 10)); + } +} diff --git a/examples/11-native-type-custom-config/output/rust/.gitignore b/examples/11-native-type-custom-config/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/11-native-type-custom-config/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/11-native-type-custom-config/output/rust/Cargo.lock b/examples/11-native-type-custom-config/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/11-native-type-custom-config/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/11-native-type-custom-config/output/rust/Cargo.toml b/examples/11-native-type-custom-config/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/11-native-type-custom-config/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/11-native-type-custom-config/output/rust/rust-toolchain.toml b/examples/11-native-type-custom-config/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/11-native-type-custom-config/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/11-native-type-custom-config/output/rust/src/main.rs b/examples/11-native-type-custom-config/output/rust/src/main.rs new file mode 100644 index 0000000..fa127e8 --- /dev/null +++ b/examples/11-native-type-custom-config/output/rust/src/main.rs @@ -0,0 +1,14 @@ +mod point; + +#[derive(Clone, Debug, Hash, PartialEq)] +struct Point(i32, i32); + +#[cfg(test)] +mod test { + use super::{Point, point::Line}; + + #[test] + fn can_use_native_types() { + let line = Line { start: Point(10, 25), end: Point(25, 10) }; + } +} diff --git a/examples/11-native-type-custom-config/output/rust/src/point.rs b/examples/11-native-type-custom-config/output/rust/src/point.rs new file mode 100644 index 0000000..f25a76f --- /dev/null +++ b/examples/11-native-type-custom-config/output/rust/src/point.rs @@ -0,0 +1,8 @@ +// Generated by hobgoblin. + +/// A straight line from one point to another. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Line { + pub start: crate::Point, + pub end: crate::Point, +} diff --git a/examples/11-native-type-custom-config/src/point.hob b/examples/11-native-type-custom-config/src/point.hob new file mode 100644 index 0000000..7178dcb --- /dev/null +++ b/examples/11-native-type-custom-config/src/point.hob @@ -0,0 +1,8 @@ +native Point { +} + +/// A straight line from one point to another. +struct Line { + field start: Point; + field end: Point; +} diff --git a/examples/11-native-type-generic/hobgoblin.json5 b/examples/11-native-type-generic/hobgoblin.json5 deleted file mode 100644 index ca81993..0000000 --- a/examples/11-native-type-generic/hobgoblin.json5 +++ /dev/null @@ -1,33 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - nativeTypes: [ - { - hobgoblin: "map.NativeMap", - java: "java.util.Map", - }, - ], - }, - rust: { - nativeTypes: [ - { - hobgoblin: "map.NativeMap", - rust: "::std::collections::BTreeMap", - }, - ], - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src/gen", - }, - ], - }, -} diff --git a/examples/11-native-type-generic/output/java/.gitignore b/examples/11-native-type-generic/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/11-native-type-generic/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/11-native-type-generic/output/java/pom.xml b/examples/11-native-type-generic/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/11-native-type-generic/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/11-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java b/examples/11-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java deleted file mode 100644 index 309ba0b..0000000 --- a/examples/11-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.zwobble.example.types.map; - -public class HobgoblinNativeMap { - private HobgoblinNativeMap() {} - - public static java.util.Map arbitraryNativeMap() { - return new java.util.HashMap<>(); - } -} diff --git a/examples/11-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java b/examples/11-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java deleted file mode 100644 index 5b6a764..0000000 --- a/examples/11-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.zwobble.example; - -import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.map.X; - -public class MapTests { - @Test - public void canUseGenericNativeTypes() { - var x = new X(Map.ofEntries(Map.entry("a", 1), Map.entry("b", 2))); - } -} diff --git a/examples/11-native-type-generic/output/rust/.gitignore b/examples/11-native-type-generic/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/11-native-type-generic/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/11-native-type-generic/output/rust/Cargo.lock b/examples/11-native-type-generic/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/11-native-type-generic/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/11-native-type-generic/output/rust/Cargo.toml b/examples/11-native-type-generic/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/11-native-type-generic/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/11-native-type-generic/output/rust/rust-toolchain.toml b/examples/11-native-type-generic/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/11-native-type-generic/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/11-native-type-generic/output/rust/src/gen/map.rs b/examples/11-native-type-generic/output/rust/src/gen/map.rs deleted file mode 100644 index 5d9c837..0000000 --- a/examples/11-native-type-generic/output/rust/src/gen/map.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct X { - pub map: ::std::collections::BTreeMap::<::std::string::String, ::core::primitive::i32>, -} diff --git a/examples/11-native-type-generic/output/rust/src/lib.rs b/examples/11-native-type-generic/output/rust/src/lib.rs deleted file mode 100644 index b0adf47..0000000 --- a/examples/11-native-type-generic/output/rust/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -mod map; - -#[cfg(test)] -mod test { - use std::collections::BTreeMap; - use super::map::X; - - #[test] - fn can_use_generic_native_types() { - let x = X { map: BTreeMap::from([("a".to_string(), 1), ("b".to_string(), 2)]) }; - } -} diff --git a/examples/11-native-type-generic/output/rust/src/map.rs b/examples/11-native-type-generic/output/rust/src/map.rs deleted file mode 100644 index 3dd0a72..0000000 --- a/examples/11-native-type-generic/output/rust/src/map.rs +++ /dev/null @@ -1 +0,0 @@ -include!("gen/map.rs"); diff --git a/examples/11-native-type-generic/src/map.hob b/examples/11-native-type-generic/src/map.hob deleted file mode 100644 index 0118889..0000000 --- a/examples/11-native-type-generic/src/map.hob +++ /dev/null @@ -1,6 +0,0 @@ -native NativeMap[K, V] { -} - -struct X { - field map: NativeMap[String, Int32]; -} diff --git a/examples/12-native-type-generic/hobgoblin.json5 b/examples/12-native-type-generic/hobgoblin.json5 new file mode 100644 index 0000000..ca81993 --- /dev/null +++ b/examples/12-native-type-generic/hobgoblin.json5 @@ -0,0 +1,33 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + nativeTypes: [ + { + hobgoblin: "map.NativeMap", + java: "java.util.Map", + }, + ], + }, + rust: { + nativeTypes: [ + { + hobgoblin: "map.NativeMap", + rust: "::std::collections::BTreeMap", + }, + ], + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src/gen", + }, + ], + }, +} diff --git a/examples/12-native-type-generic/output/java/.gitignore b/examples/12-native-type-generic/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/12-native-type-generic/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/12-native-type-generic/output/java/pom.xml b/examples/12-native-type-generic/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/12-native-type-generic/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java b/examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java new file mode 100644 index 0000000..309ba0b --- /dev/null +++ b/examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java @@ -0,0 +1,9 @@ +package org.zwobble.example.types.map; + +public class HobgoblinNativeMap { + private HobgoblinNativeMap() {} + + public static java.util.Map arbitraryNativeMap() { + return new java.util.HashMap<>(); + } +} diff --git a/examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java b/examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java new file mode 100644 index 0000000..5b6a764 --- /dev/null +++ b/examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java @@ -0,0 +1,13 @@ +package org.zwobble.example; + +import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.map.X; + +public class MapTests { + @Test + public void canUseGenericNativeTypes() { + var x = new X(Map.ofEntries(Map.entry("a", 1), Map.entry("b", 2))); + } +} diff --git a/examples/12-native-type-generic/output/rust/.gitignore b/examples/12-native-type-generic/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/12-native-type-generic/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/12-native-type-generic/output/rust/Cargo.lock b/examples/12-native-type-generic/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/12-native-type-generic/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/12-native-type-generic/output/rust/Cargo.toml b/examples/12-native-type-generic/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/12-native-type-generic/output/rust/rust-toolchain.toml b/examples/12-native-type-generic/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/12-native-type-generic/output/rust/src/gen/map.rs b/examples/12-native-type-generic/output/rust/src/gen/map.rs new file mode 100644 index 0000000..5d9c837 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/src/gen/map.rs @@ -0,0 +1,6 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct X { + pub map: ::std::collections::BTreeMap::<::std::string::String, ::core::primitive::i32>, +} diff --git a/examples/12-native-type-generic/output/rust/src/lib.rs b/examples/12-native-type-generic/output/rust/src/lib.rs new file mode 100644 index 0000000..b0adf47 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/src/lib.rs @@ -0,0 +1,12 @@ +mod map; + +#[cfg(test)] +mod test { + use std::collections::BTreeMap; + use super::map::X; + + #[test] + fn can_use_generic_native_types() { + let x = X { map: BTreeMap::from([("a".to_string(), 1), ("b".to_string(), 2)]) }; + } +} diff --git a/examples/12-native-type-generic/output/rust/src/map.rs b/examples/12-native-type-generic/output/rust/src/map.rs new file mode 100644 index 0000000..3dd0a72 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/src/map.rs @@ -0,0 +1 @@ +include!("gen/map.rs"); diff --git a/examples/12-native-type-generic/src/map.hob b/examples/12-native-type-generic/src/map.hob new file mode 100644 index 0000000..0118889 --- /dev/null +++ b/examples/12-native-type-generic/src/map.hob @@ -0,0 +1,6 @@ +native NativeMap[K, V] { +} + +struct X { + field map: NativeMap[String, Int32]; +} diff --git a/examples/12-shared/hobgoblin.json5 b/examples/12-shared/hobgoblin.json5 deleted file mode 100644 index 19e0f93..0000000 --- a/examples/12-shared/hobgoblin.json5 +++ /dev/null @@ -1,23 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "java-precisely-matchers", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - } -} diff --git a/examples/12-shared/output/java/.gitignore b/examples/12-shared/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/12-shared/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/12-shared/output/java/pom.xml b/examples/12-shared/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/12-shared/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/12-shared/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/12-shared/output/java/src/test/java/org/zwobble/example/PointTests.java deleted file mode 100644 index b4c140d..0000000 --- a/examples/12-shared/output/java/src/test/java/org/zwobble/example/PointTests.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.point.Line; -import org.zwobble.example.types.point.Point; - -public class PointTests { - @Test - public void line() { - var point = new Point(10, 25); - var line = new Line(point, point); - assertEquals(line.start().x(), 10); - } -} diff --git a/examples/12-shared/output/rust/.gitignore b/examples/12-shared/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/12-shared/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/12-shared/output/rust/Cargo.lock b/examples/12-shared/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/12-shared/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/12-shared/output/rust/Cargo.toml b/examples/12-shared/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/12-shared/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/12-shared/output/rust/rust-toolchain.toml b/examples/12-shared/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/12-shared/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/12-shared/output/rust/src/lib.rs b/examples/12-shared/output/rust/src/lib.rs deleted file mode 100644 index af2c87f..0000000 --- a/examples/12-shared/output/rust/src/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -mod point; - -#[cfg(test)] -mod test { - use std::sync::Arc; - use super::point::{Line, Point}; - - #[test] - fn line() { - let point = Arc::new(Point { x: 10, y: 25 }); - let line = Line { start: Arc::clone(&point), end: point }; - assert_eq!(line.start.x, 10); - } -} diff --git a/examples/12-shared/output/rust/src/point.rs b/examples/12-shared/output/rust/src/point.rs deleted file mode 100644 index 7bc470a..0000000 --- a/examples/12-shared/output/rust/src/point.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Generated by hobgoblin. - -/// A straight line from one point to another. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Line { - pub start: ::std::sync::Arc::, - pub end: ::std::sync::Arc::, -} - -/// A 2D point. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Point { - pub x: ::core::primitive::i32, - pub y: ::core::primitive::i32, -} diff --git a/examples/12-shared/src/point.hob b/examples/12-shared/src/point.hob deleted file mode 100644 index 7b9a8e6..0000000 --- a/examples/12-shared/src/point.hob +++ /dev/null @@ -1,11 +0,0 @@ -/// A straight line from one point to another. -struct Line { - field start: Shared[Point]; - field end: Shared[Point]; -} - -/// A 2D point. -struct Point { - field x: Int32; - field y: Int32; -} diff --git a/examples/13-custom-code/hobgoblin.json5 b/examples/13-custom-code/hobgoblin.json5 deleted file mode 100644 index 1d08a40..0000000 --- a/examples/13-custom-code/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/main/java", - }, - { - generator: "rust-types", - path: "output/rust/src/gen", - }, - ], - }, -} diff --git a/examples/13-custom-code/output/java/.gitignore b/examples/13-custom-code/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/13-custom-code/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/13-custom-code/output/java/pom.xml b/examples/13-custom-code/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/13-custom-code/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/13-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java b/examples/13-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java deleted file mode 100644 index 69a1ab1..0000000 --- a/examples/13-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java +++ /dev/null @@ -1,37 +0,0 @@ -// Generated by hobgoblin. - -package org.zwobble.example.types.shapes; - -// Custom area start: org.zwobble.example.types.shapes.Square imports -// Custom area end: org.zwobble.example.types.shapes.Square imports - -public record Square( - int width -) { - public static org.zwobble.example.types.shapes.Square.Builder arbitrary() { - return new org.zwobble.example.types.shapes.Square.Builder(0); - } - - public record Builder( - int width - ) { - public org.zwobble.example.types.shapes.Square build() { - return new org.zwobble.example.types.shapes.Square(width); - } - - public org.zwobble.example.types.shapes.Square.Builder withWidth(int width) { - return new org.zwobble.example.types.shapes.Square.Builder(width); - } - - // Custom area start: org.zwobble.example.types.shapes.Square.Builder body - // Custom area end: org.zwobble.example.types.shapes.Square.Builder body - } - - // Custom area start: org.zwobble.example.types.shapes.Square body - - public int area() { - return this.width * this.width; - } - - // Custom area end: org.zwobble.example.types.shapes.Square body -} diff --git a/examples/13-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java b/examples/13-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java deleted file mode 100644 index fba8e6c..0000000 --- a/examples/13-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.shapes.Square; - -public class ShapesTests { - @Test - public void canUseCustomCode() { - Square square = new Square(10); - assertEquals(square.area(), 100); - } -} diff --git a/examples/13-custom-code/output/rust/.gitignore b/examples/13-custom-code/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/13-custom-code/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/13-custom-code/output/rust/Cargo.lock b/examples/13-custom-code/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/13-custom-code/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/13-custom-code/output/rust/Cargo.toml b/examples/13-custom-code/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/13-custom-code/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/13-custom-code/output/rust/rust-toolchain.toml b/examples/13-custom-code/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/13-custom-code/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/13-custom-code/output/rust/src/gen/shapes.rs b/examples/13-custom-code/output/rust/src/gen/shapes.rs deleted file mode 100644 index d1582ad..0000000 --- a/examples/13-custom-code/output/rust/src/gen/shapes.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Square { - pub width: ::core::primitive::i32, -} diff --git a/examples/13-custom-code/output/rust/src/lib.rs b/examples/13-custom-code/output/rust/src/lib.rs deleted file mode 100644 index 1825d72..0000000 --- a/examples/13-custom-code/output/rust/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -mod shapes; - -#[cfg(test)] -mod test { - use super::shapes::Square; - - #[test] - fn can_use_custom_code() { - let square = Square { width: 10 }; - assert_eq!(square.area(), 100); - } -} diff --git a/examples/13-custom-code/output/rust/src/shapes.rs b/examples/13-custom-code/output/rust/src/shapes.rs deleted file mode 100644 index f806bbb..0000000 --- a/examples/13-custom-code/output/rust/src/shapes.rs +++ /dev/null @@ -1,7 +0,0 @@ -include!("gen/shapes.rs"); - -impl Square { - pub fn area(&self) -> i32 { - self.width * self.width - } -} diff --git a/examples/13-custom-code/src/shapes.hob b/examples/13-custom-code/src/shapes.hob deleted file mode 100644 index 5dfe833..0000000 --- a/examples/13-custom-code/src/shapes.hob +++ /dev/null @@ -1,3 +0,0 @@ -struct Square { - field width: Int32; -} diff --git a/examples/13-shared/hobgoblin.json5 b/examples/13-shared/hobgoblin.json5 new file mode 100644 index 0000000..19e0f93 --- /dev/null +++ b/examples/13-shared/hobgoblin.json5 @@ -0,0 +1,23 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "java-precisely-matchers", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + } +} diff --git a/examples/13-shared/output/java/.gitignore b/examples/13-shared/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/13-shared/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/13-shared/output/java/pom.xml b/examples/13-shared/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/13-shared/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/13-shared/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/13-shared/output/java/src/test/java/org/zwobble/example/PointTests.java new file mode 100644 index 0000000..b4c140d --- /dev/null +++ b/examples/13-shared/output/java/src/test/java/org/zwobble/example/PointTests.java @@ -0,0 +1,15 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.point.Line; +import org.zwobble.example.types.point.Point; + +public class PointTests { + @Test + public void line() { + var point = new Point(10, 25); + var line = new Line(point, point); + assertEquals(line.start().x(), 10); + } +} diff --git a/examples/13-shared/output/rust/.gitignore b/examples/13-shared/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/13-shared/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/13-shared/output/rust/Cargo.lock b/examples/13-shared/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/13-shared/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/13-shared/output/rust/Cargo.toml b/examples/13-shared/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/13-shared/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/13-shared/output/rust/rust-toolchain.toml b/examples/13-shared/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/13-shared/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/13-shared/output/rust/src/lib.rs b/examples/13-shared/output/rust/src/lib.rs new file mode 100644 index 0000000..af2c87f --- /dev/null +++ b/examples/13-shared/output/rust/src/lib.rs @@ -0,0 +1,14 @@ +mod point; + +#[cfg(test)] +mod test { + use std::sync::Arc; + use super::point::{Line, Point}; + + #[test] + fn line() { + let point = Arc::new(Point { x: 10, y: 25 }); + let line = Line { start: Arc::clone(&point), end: point }; + assert_eq!(line.start.x, 10); + } +} diff --git a/examples/13-shared/output/rust/src/point.rs b/examples/13-shared/output/rust/src/point.rs new file mode 100644 index 0000000..7bc470a --- /dev/null +++ b/examples/13-shared/output/rust/src/point.rs @@ -0,0 +1,15 @@ +// Generated by hobgoblin. + +/// A straight line from one point to another. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Line { + pub start: ::std::sync::Arc::, + pub end: ::std::sync::Arc::, +} + +/// A 2D point. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Point { + pub x: ::core::primitive::i32, + pub y: ::core::primitive::i32, +} diff --git a/examples/13-shared/src/point.hob b/examples/13-shared/src/point.hob new file mode 100644 index 0000000..7b9a8e6 --- /dev/null +++ b/examples/13-shared/src/point.hob @@ -0,0 +1,11 @@ +/// A straight line from one point to another. +struct Line { + field start: Shared[Point]; + field end: Shared[Point]; +} + +/// A 2D point. +struct Point { + field x: Int32; + field y: Int32; +} diff --git a/examples/14-custom-code/hobgoblin.json5 b/examples/14-custom-code/hobgoblin.json5 new file mode 100644 index 0000000..1d08a40 --- /dev/null +++ b/examples/14-custom-code/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/main/java", + }, + { + generator: "rust-types", + path: "output/rust/src/gen", + }, + ], + }, +} diff --git a/examples/14-custom-code/output/java/.gitignore b/examples/14-custom-code/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/14-custom-code/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/14-custom-code/output/java/pom.xml b/examples/14-custom-code/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/14-custom-code/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/14-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java b/examples/14-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java new file mode 100644 index 0000000..69a1ab1 --- /dev/null +++ b/examples/14-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java @@ -0,0 +1,37 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.shapes; + +// Custom area start: org.zwobble.example.types.shapes.Square imports +// Custom area end: org.zwobble.example.types.shapes.Square imports + +public record Square( + int width +) { + public static org.zwobble.example.types.shapes.Square.Builder arbitrary() { + return new org.zwobble.example.types.shapes.Square.Builder(0); + } + + public record Builder( + int width + ) { + public org.zwobble.example.types.shapes.Square build() { + return new org.zwobble.example.types.shapes.Square(width); + } + + public org.zwobble.example.types.shapes.Square.Builder withWidth(int width) { + return new org.zwobble.example.types.shapes.Square.Builder(width); + } + + // Custom area start: org.zwobble.example.types.shapes.Square.Builder body + // Custom area end: org.zwobble.example.types.shapes.Square.Builder body + } + + // Custom area start: org.zwobble.example.types.shapes.Square body + + public int area() { + return this.width * this.width; + } + + // Custom area end: org.zwobble.example.types.shapes.Square body +} diff --git a/examples/14-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java b/examples/14-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java new file mode 100644 index 0000000..fba8e6c --- /dev/null +++ b/examples/14-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java @@ -0,0 +1,13 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.shapes.Square; + +public class ShapesTests { + @Test + public void canUseCustomCode() { + Square square = new Square(10); + assertEquals(square.area(), 100); + } +} diff --git a/examples/14-custom-code/output/rust/.gitignore b/examples/14-custom-code/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/14-custom-code/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/14-custom-code/output/rust/Cargo.lock b/examples/14-custom-code/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/14-custom-code/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/14-custom-code/output/rust/Cargo.toml b/examples/14-custom-code/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/14-custom-code/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/14-custom-code/output/rust/rust-toolchain.toml b/examples/14-custom-code/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/14-custom-code/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/14-custom-code/output/rust/src/gen/shapes.rs b/examples/14-custom-code/output/rust/src/gen/shapes.rs new file mode 100644 index 0000000..d1582ad --- /dev/null +++ b/examples/14-custom-code/output/rust/src/gen/shapes.rs @@ -0,0 +1,6 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Square { + pub width: ::core::primitive::i32, +} diff --git a/examples/14-custom-code/output/rust/src/lib.rs b/examples/14-custom-code/output/rust/src/lib.rs new file mode 100644 index 0000000..1825d72 --- /dev/null +++ b/examples/14-custom-code/output/rust/src/lib.rs @@ -0,0 +1,12 @@ +mod shapes; + +#[cfg(test)] +mod test { + use super::shapes::Square; + + #[test] + fn can_use_custom_code() { + let square = Square { width: 10 }; + assert_eq!(square.area(), 100); + } +} diff --git a/examples/14-custom-code/output/rust/src/shapes.rs b/examples/14-custom-code/output/rust/src/shapes.rs new file mode 100644 index 0000000..f806bbb --- /dev/null +++ b/examples/14-custom-code/output/rust/src/shapes.rs @@ -0,0 +1,7 @@ +include!("gen/shapes.rs"); + +impl Square { + pub fn area(&self) -> i32 { + self.width * self.width + } +} diff --git a/examples/14-custom-code/src/shapes.hob b/examples/14-custom-code/src/shapes.hob new file mode 100644 index 0000000..5dfe833 --- /dev/null +++ b/examples/14-custom-code/src/shapes.hob @@ -0,0 +1,3 @@ +struct Square { + field width: Int32; +} diff --git a/examples/14-imports/hobgoblin.json5 b/examples/14-imports/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/14-imports/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/14-imports/output/java/.gitignore b/examples/14-imports/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/14-imports/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/14-imports/output/java/pom.xml b/examples/14-imports/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/14-imports/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/14-imports/output/java/src/test/java/org/zwobble/example/LineTests.java b/examples/14-imports/output/java/src/test/java/org/zwobble/example/LineTests.java deleted file mode 100644 index c376b19..0000000 --- a/examples/14-imports/output/java/src/test/java/org/zwobble/example/LineTests.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.line.Line; -import org.zwobble.example.types.point.Point; - -public class LineTests { - @Test - public void canConstructLine() { - Point start = new Point(10, 25); - Point end = new Point(25, 10); - Line line = new Line(start, end); - } -} diff --git a/examples/14-imports/output/rust/.gitignore b/examples/14-imports/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/14-imports/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/14-imports/output/rust/Cargo.lock b/examples/14-imports/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/14-imports/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/14-imports/output/rust/Cargo.toml b/examples/14-imports/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/14-imports/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/14-imports/output/rust/rust-toolchain.toml b/examples/14-imports/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/14-imports/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/14-imports/output/rust/src/lib.rs b/examples/14-imports/output/rust/src/lib.rs deleted file mode 100644 index ffbcbf4..0000000 --- a/examples/14-imports/output/rust/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -mod line; -mod point; - -#[cfg(test)] -mod test { - use super::line::Line; - use super::point::Point; - - #[test] - fn can_construct_line() { - let start = Point { x: 10, y: 25 }; - let end = Point { x: 10, y: 25 }; - let line = Line { start, end }; - } -} diff --git a/examples/14-imports/output/rust/src/line.rs b/examples/14-imports/output/rust/src/line.rs deleted file mode 100644 index 8561605..0000000 --- a/examples/14-imports/output/rust/src/line.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Generated by hobgoblin. - -/// A straight line from one point to another. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Line { - pub start: crate::point::Point, - pub end: crate::point::Point, -} diff --git a/examples/14-imports/output/rust/src/point.rs b/examples/14-imports/output/rust/src/point.rs deleted file mode 100644 index 6d9b010..0000000 --- a/examples/14-imports/output/rust/src/point.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Generated by hobgoblin. - -/// A 2D point. -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Point { - pub x: ::core::primitive::i32, - pub y: ::core::primitive::i32, -} diff --git a/examples/14-imports/src/line.hob b/examples/14-imports/src/line.hob deleted file mode 100644 index 562d77f..0000000 --- a/examples/14-imports/src/line.hob +++ /dev/null @@ -1,7 +0,0 @@ -import {Point} from ./point; - -/// A straight line from one point to another. -struct Line { - field start: Point; - field end: Point; -} diff --git a/examples/14-imports/src/point.hob b/examples/14-imports/src/point.hob deleted file mode 100644 index 87f9953..0000000 --- a/examples/14-imports/src/point.hob +++ /dev/null @@ -1,5 +0,0 @@ -/// A 2D point. -struct Point { - field x: Int32; - field y: Int32; -} diff --git a/examples/15-imports/hobgoblin.json5 b/examples/15-imports/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/15-imports/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src", + }, + ], + }, +} diff --git a/examples/15-imports/output/java/.gitignore b/examples/15-imports/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/15-imports/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/15-imports/output/java/pom.xml b/examples/15-imports/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/15-imports/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/15-imports/output/java/src/test/java/org/zwobble/example/LineTests.java b/examples/15-imports/output/java/src/test/java/org/zwobble/example/LineTests.java new file mode 100644 index 0000000..c376b19 --- /dev/null +++ b/examples/15-imports/output/java/src/test/java/org/zwobble/example/LineTests.java @@ -0,0 +1,15 @@ +package org.zwobble.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.line.Line; +import org.zwobble.example.types.point.Point; + +public class LineTests { + @Test + public void canConstructLine() { + Point start = new Point(10, 25); + Point end = new Point(25, 10); + Line line = new Line(start, end); + } +} diff --git a/examples/15-imports/output/rust/.gitignore b/examples/15-imports/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/15-imports/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/15-imports/output/rust/Cargo.lock b/examples/15-imports/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/15-imports/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/15-imports/output/rust/Cargo.toml b/examples/15-imports/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/15-imports/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/15-imports/output/rust/rust-toolchain.toml b/examples/15-imports/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/15-imports/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/15-imports/output/rust/src/lib.rs b/examples/15-imports/output/rust/src/lib.rs new file mode 100644 index 0000000..ffbcbf4 --- /dev/null +++ b/examples/15-imports/output/rust/src/lib.rs @@ -0,0 +1,15 @@ +mod line; +mod point; + +#[cfg(test)] +mod test { + use super::line::Line; + use super::point::Point; + + #[test] + fn can_construct_line() { + let start = Point { x: 10, y: 25 }; + let end = Point { x: 10, y: 25 }; + let line = Line { start, end }; + } +} diff --git a/examples/15-imports/output/rust/src/line.rs b/examples/15-imports/output/rust/src/line.rs new file mode 100644 index 0000000..8561605 --- /dev/null +++ b/examples/15-imports/output/rust/src/line.rs @@ -0,0 +1,8 @@ +// Generated by hobgoblin. + +/// A straight line from one point to another. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Line { + pub start: crate::point::Point, + pub end: crate::point::Point, +} diff --git a/examples/15-imports/output/rust/src/point.rs b/examples/15-imports/output/rust/src/point.rs new file mode 100644 index 0000000..6d9b010 --- /dev/null +++ b/examples/15-imports/output/rust/src/point.rs @@ -0,0 +1,8 @@ +// Generated by hobgoblin. + +/// A 2D point. +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Point { + pub x: ::core::primitive::i32, + pub y: ::core::primitive::i32, +} diff --git a/examples/15-imports/src/line.hob b/examples/15-imports/src/line.hob new file mode 100644 index 0000000..562d77f --- /dev/null +++ b/examples/15-imports/src/line.hob @@ -0,0 +1,7 @@ +import {Point} from ./point; + +/// A straight line from one point to another. +struct Line { + field start: Point; + field end: Point; +} diff --git a/examples/15-imports/src/point.hob b/examples/15-imports/src/point.hob new file mode 100644 index 0000000..87f9953 --- /dev/null +++ b/examples/15-imports/src/point.hob @@ -0,0 +1,5 @@ +/// A 2D point. +struct Point { + field x: Int32; + field y: Int32; +} diff --git a/examples/15-transient-0/hobgoblin.json5 b/examples/15-transient-0/hobgoblin.json5 deleted file mode 100644 index e632b0a..0000000 --- a/examples/15-transient-0/hobgoblin.json5 +++ /dev/null @@ -1,27 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "java-transient-0", - path: "output/java/src/main/java", - }, - { - generator: "rust-types", - path: "output/rust/src/gen", - }, - { - generator: "rust-transient-0", - path: "output/rust/src/gen", - } - ], - } -} diff --git a/examples/15-transient-0/output/java/.gitignore b/examples/15-transient-0/output/java/.gitignore deleted file mode 100644 index 2fcf0b8..0000000 --- a/examples/15-transient-0/output/java/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/src/gen/ -/target/ -/transient-0/ diff --git a/examples/15-transient-0/output/java/pom.xml b/examples/15-transient-0/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/15-transient-0/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java deleted file mode 100644 index cfd16d5..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java +++ /dev/null @@ -1,3 +0,0 @@ -package org.zwobble.example.types.data; - -public record GenericNative(A a, B b) {} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java deleted file mode 100644 index 32796b5..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.zwobble.example.types.data; - -public class HobgoblinNativeData { - private HobgoblinNativeData() {} - - public static Native arbitraryNative() { - return new Native(0, 0); - } - - public static GenericNative arbitraryGenericNative() { - throw new RuntimeException("TODO"); - } -} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java deleted file mode 100644 index 366dd74..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java +++ /dev/null @@ -1,3 +0,0 @@ -package org.zwobble.example.types.data; - -public record Native(int a, int b) {} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java deleted file mode 100644 index 1eea54c..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java +++ /dev/null @@ -1,581 +0,0 @@ -// Generated by hobgoblin. - -package org.zwobble.example.types.data.transient0; - -// Custom area start: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data imports -import java.io.InputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.List; -import java.util.Map; -import org.zwobble.example.types.data.GenericNative; -import org.zwobble.example.types.data.Native; -import org.zwobble.example.types.transient0.Decoder; -import org.zwobble.example.types.transient0.Encoder; -import org.zwobble.example.types.transient0.HobgoblinTransient0Builtins; -import org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue; -// Custom area end: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data imports - -public final class HobgoblinTransient0Data { - public static void encodeStructSingleton(org.zwobble.example.types.data.StructSingleton value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - } - - public static org.zwobble.example.types.data.StructSingleton decodeStructSingleton(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - return org.zwobble.example.types.data.StructSingleton.INSTANCE; - } - - public static void encodeStructWithBool(org.zwobble.example.types.data.StructWithBool value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.a(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.b(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithBool decodeStructWithBool(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); - var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithBool(a, b); - } - - public static void encodeStructWithInt8(org.zwobble.example.types.data.StructWithInt8 value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt8(value.a(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt8(value.b(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithInt8 decodeStructWithInt8(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt8(inputStream, sharedValues); - var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt8(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithInt8(a, b); - } - - public static void encodeStructWithInt32(org.zwobble.example.types.data.StructWithInt32 value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.a(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.b(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithInt32 decodeStructWithInt32(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithInt32(a, b); - } - - public static void encodeStructWithInt64(org.zwobble.example.types.data.StructWithInt64 value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.a(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.b(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithInt64 decodeStructWithInt64(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithInt64(a, b); - } - - public static void encodeStructWithString(org.zwobble.example.types.data.StructWithString value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeString(value.a(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeString(value.b(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithString decodeStructWithString(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues); - var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithString(a, b); - } - - public static void encodeStructWithStruct(org.zwobble.example.types.data.StructWithStruct value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.inner(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.c(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithStruct decodeStructWithStruct(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - var c = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithStruct(inner, c); - } - - public static void encodeStructWithList(org.zwobble.example.types.data.StructWithList value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.a().size(), outputStream, sharedValues); - for (var element : value.a()) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(element, outputStream, sharedValues); - } - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.b().size(), outputStream, sharedValues); - for (var element : value.b()) { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(element, outputStream, sharedValues); - } - } - - public static org.zwobble.example.types.data.StructWithList decodeStructWithList(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a$size = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (a$size > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Lists longer than Integer.MAX_VALUE are not supported"); - } - var a = new java.util.ArrayList((int) a$size); - for (long a$index = 0; a$index < a$size; a$index++) { - var a$element = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - a.add(a$element); - } - var b$size = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (b$size > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Lists longer than Integer.MAX_VALUE are not supported"); - } - var b = new java.util.ArrayList((int) b$size); - for (long b$index = 0; b$index < b$size; b$index++) { - var b$element = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - b.add(b$element); - } - return new org.zwobble.example.types.data.StructWithList(a, b); - } - - public static void encodeStructWithOption(org.zwobble.example.types.data.StructWithOption value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.a().isPresent(), outputStream, sharedValues); - if (value.a().isPresent()) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.a().get(), outputStream, sharedValues); - } - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.b().isPresent(), outputStream, sharedValues); - if (value.b().isPresent()) { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.b().get(), outputStream, sharedValues); - } - } - - public static org.zwobble.example.types.data.StructWithOption decodeStructWithOption(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a$isPresent = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); - java.util.Optional a; - if (a$isPresent) { - var a$element = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - a = java.util.Optional.of(a$element); - } else { - a = java.util.Optional.empty(); - } - var b$isPresent = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); - java.util.Optional b; - if (b$isPresent) { - var b$element = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - b = java.util.Optional.of(b$element); - } else { - b = java.util.Optional.empty(); - } - return new org.zwobble.example.types.data.StructWithOption(a, b); - } - - public static void encodeEnumWithVariants(org.zwobble.example.types.data.EnumWithVariants value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.ordinal(), outputStream, sharedValues); - } - - private static final org.zwobble.example.types.data.EnumWithVariants[] EnumWithVariants$values = org.zwobble.example.types.data.EnumWithVariants.values(); - - public static org.zwobble.example.types.data.EnumWithVariants decodeEnumWithVariants(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var ordinal = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return EnumWithVariants$values[ordinal]; - } - - public static void encodeStructWithEnum(org.zwobble.example.types.data.StructWithEnum value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeEnumWithVariants(value.inner(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.c(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithEnum decodeStructWithEnum(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeEnumWithVariants(inputStream, sharedValues); - var c = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithEnum(inner, c); - } - - public static void encodeSumWithVariants(org.zwobble.example.types.data.SumWithVariants value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - switch (value) { - case org.zwobble.example.types.data.VariantOne value$0 -> { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantOne(value$0, outputStream, sharedValues); - } - case org.zwobble.example.types.data.VariantTwo value$1 -> { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantTwo(value$1, outputStream, sharedValues); - } - } - } - - public static org.zwobble.example.types.data.SumWithVariants decodeSumWithVariants(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var variantTag = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - switch (variantTag) { - case 0 -> { - var value$0 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantOne(inputStream, sharedValues); - return value$0; - } - case 1 -> { - var value$1 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantTwo(inputStream, sharedValues); - return value$1; - } - default -> { - throw new java.lang.RuntimeException("unexpected data.SumWithVariants variant tag: " + variantTag); - } - } - } - - public static void encodeVariantOne(org.zwobble.example.types.data.VariantOne value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.a(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.VariantOne decodeVariantOne(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return new org.zwobble.example.types.data.VariantOne(a); - } - - public static void encodeVariantTwo(org.zwobble.example.types.data.VariantTwo value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.a(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.VariantTwo decodeVariantTwo(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - return new org.zwobble.example.types.data.VariantTwo(a); - } - - public static void encodeSumWithBoxedVariants(org.zwobble.example.types.data.SumWithBoxedVariants value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - switch (value) { - case org.zwobble.example.types.data.VariantOne value$0 -> { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantOne(value$0, outputStream, sharedValues); - } - case org.zwobble.example.types.data.VariantTwo value$1 -> { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantTwo(value$1, outputStream, sharedValues); - } - } - } - - public static org.zwobble.example.types.data.SumWithBoxedVariants decodeSumWithBoxedVariants(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var variantTag = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - switch (variantTag) { - case 0 -> { - var value$0 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantOne(inputStream, sharedValues); - return value$0; - } - case 1 -> { - var value$1 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantTwo(inputStream, sharedValues); - return value$1; - } - default -> { - throw new java.lang.RuntimeException("unexpected data.SumWithBoxedVariants variant tag: " + variantTag); - } - } - } - - public static void encodeStructWithSum(org.zwobble.example.types.data.StructWithSum value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeSumWithVariants(value.inner(), outputStream, sharedValues); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.b(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithSum decodeStructWithSum(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeSumWithVariants(inputStream, sharedValues); - var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithSum(inner, b); - } - - public static void encodeStructWithNative(org.zwobble.example.types.data.StructWithNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeNative(value.a(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithNative decodeStructWithNative(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeNative(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithNative(a); - } - - public static void encodeStructWithGenericNative(org.zwobble.example.types.data.StructWithGenericNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value.a(), outputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeInt32, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value.b(), outputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$1); - } - - public static org.zwobble.example.types.data.StructWithGenericNative decodeStructWithGenericNative(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeInt32, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString); - var b = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$1); - return new org.zwobble.example.types.data.StructWithGenericNative(a, b); - } - - public static void encodeStructWithBox(org.zwobble.example.types.data.StructWithBox value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.inner(), outputStream, sharedValues); - } - - public static org.zwobble.example.types.data.StructWithBox decodeStructWithBox(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - return new org.zwobble.example.types.data.StructWithBox(inner); - } - - public static void encodeStructWithListOfShared(org.zwobble.example.types.data.StructWithListOfShared value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.inner().size(), outputStream, sharedValues); - for (var element : value.inner()) { - { - var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, element)); - if (existingId != null) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); - } else { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); - sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, element), (long) sharedValues.size()); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(element, outputStream, sharedValues); - } - } - } - } - - public static org.zwobble.example.types.data.StructWithListOfShared decodeStructWithListOfShared(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var inner$size = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (inner$size > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Lists longer than Integer.MAX_VALUE are not supported"); - } - var inner = new java.util.ArrayList((int) inner$size); - for (long inner$index = 0; inner$index < inner$size; inner$index++) { - var inner$element$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (inner$element$id > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); - } - org.zwobble.example.types.data.StructWithInt32 inner$element; - if (inner$element$id < sharedValues.size()) { - inner$element = switch (sharedValues.get((int) inner$element$id)) { - case org.zwobble.example.types.data.StructWithInt32 inner$element$decodedValue -> { - yield inner$element$decodedValue; - } - default -> { - throw new java.io.IOException("Shared value was of the wrong type"); - } - }; - } else { - var inner$element$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - sharedValues.add(inner$element$decodedValue); - inner$element = inner$element$decodedValue; - } - inner.add(inner$element); - } - return new org.zwobble.example.types.data.StructWithListOfShared(inner); - } - - public static void encodeStructWithDifferentSharedTypes(org.zwobble.example.types.data.StructWithDifferentSharedTypes value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - { - var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.a())); - if (existingId != null) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); - } else { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); - sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.a()), (long) sharedValues.size()); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.a(), outputStream, sharedValues); - } - } - { - var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(1, value.b())); - if (existingId != null) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); - } else { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); - sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(1, value.b()), (long) sharedValues.size()); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt64(value.b(), outputStream, sharedValues); - } - } - { - var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.c())); - if (existingId != null) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); - } else { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); - sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.c()), (long) sharedValues.size()); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.c(), outputStream, sharedValues); - } - } - } - - public static org.zwobble.example.types.data.StructWithDifferentSharedTypes decodeStructWithDifferentSharedTypes(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (a$id > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); - } - org.zwobble.example.types.data.StructWithInt32 a; - if (a$id < sharedValues.size()) { - a = switch (sharedValues.get((int) a$id)) { - case org.zwobble.example.types.data.StructWithInt32 a$decodedValue -> { - yield a$decodedValue; - } - default -> { - throw new java.io.IOException("Shared value was of the wrong type"); - } - }; - } else { - var a$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - sharedValues.add(a$decodedValue); - a = a$decodedValue; - } - var b$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (b$id > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); - } - org.zwobble.example.types.data.StructWithInt64 b; - if (b$id < sharedValues.size()) { - b = switch (sharedValues.get((int) b$id)) { - case org.zwobble.example.types.data.StructWithInt64 b$decodedValue -> { - yield b$decodedValue; - } - default -> { - throw new java.io.IOException("Shared value was of the wrong type"); - } - }; - } else { - var b$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt64(inputStream, sharedValues); - sharedValues.add(b$decodedValue); - b = b$decodedValue; - } - var c$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (c$id > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); - } - org.zwobble.example.types.data.StructWithInt32 c; - if (c$id < sharedValues.size()) { - c = switch (sharedValues.get((int) c$id)) { - case org.zwobble.example.types.data.StructWithInt32 c$decodedValue -> { - yield c$decodedValue; - } - default -> { - throw new java.io.IOException("Shared value was of the wrong type"); - } - }; - } else { - var c$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); - sharedValues.add(c$decodedValue); - c = c$decodedValue; - } - return new org.zwobble.example.types.data.StructWithDifferentSharedTypes(a, b, c); - } - - public static void encodeStructWithSharedSumAndVariant(org.zwobble.example.types.data.StructWithSharedSumAndVariant value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - { - var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(2, value.a())); - if (existingId != null) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); - } else { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); - sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(2, value.a()), (long) sharedValues.size()); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeSumWithVariants(value.a(), outputStream, sharedValues); - } - } - { - var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(3, value.b())); - if (existingId != null) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); - } else { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); - sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(3, value.b()), (long) sharedValues.size()); - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantOne(value.b(), outputStream, sharedValues); - } - } - } - - public static org.zwobble.example.types.data.StructWithSharedSumAndVariant decodeStructWithSharedSumAndVariant(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var a$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (a$id > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); - } - org.zwobble.example.types.data.SumWithVariants a; - if (a$id < sharedValues.size()) { - a = switch (sharedValues.get((int) a$id)) { - case org.zwobble.example.types.data.SumWithVariants a$decodedValue -> { - yield a$decodedValue; - } - default -> { - throw new java.io.IOException("Shared value was of the wrong type"); - } - }; - } else { - var a$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeSumWithVariants(inputStream, sharedValues); - sharedValues.add(a$decodedValue); - a = a$decodedValue; - } - var b$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (b$id > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); - } - org.zwobble.example.types.data.VariantOne b; - if (b$id < sharedValues.size()) { - b = switch (sharedValues.get((int) b$id)) { - case org.zwobble.example.types.data.VariantOne b$decodedValue -> { - yield b$decodedValue; - } - default -> { - throw new java.io.IOException("Shared value was of the wrong type"); - } - }; - } else { - var b$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantOne(inputStream, sharedValues); - sharedValues.add(b$decodedValue); - b = b$decodedValue; - } - return new org.zwobble.example.types.data.StructWithSharedSumAndVariant(a, b); - } - - private static void encode$constructedType$0(java.util.Optional value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.isPresent(), outputStream, sharedValues); - if (value.isPresent()) { - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeString(value.get(), outputStream, sharedValues); - } - } - - private static java.util.Optional decode$constructedType$0(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var value$isPresent = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); - java.util.Optional value; - if (value$isPresent) { - var value$element = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues); - value = java.util.Optional.of(value$element); - } else { - value = java.util.Optional.empty(); - } - return value; - } - - private static void encode$constructedType$1(org.zwobble.example.types.data.GenericNative, org.zwobble.example.types.data.GenericNative> value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value, outputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$2); - } - - private static org.zwobble.example.types.data.GenericNative, org.zwobble.example.types.data.GenericNative> decode$constructedType$1(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var value = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$2); - return value; - } - - private static void encode$constructedType$2(org.zwobble.example.types.data.GenericNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value, outputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString); - } - - private static org.zwobble.example.types.data.GenericNative decode$constructedType$2(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var value = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString); - return value; - } - - // Custom area start: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data body - public static void encodeNative( - Native value, - OutputStream outputStream, - Map sharedValues - ) throws IOException { - HobgoblinTransient0Builtins.encodeInt32(value.a(), outputStream, sharedValues); - HobgoblinTransient0Builtins.encodeInt32(value.b(), outputStream, sharedValues); - } - - public static Native decodeNative( - InputStream inputStream, - List sharedValues - ) throws IOException { - var a = HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - var b = HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); - return new Native(a, b); - } - - public static void encodeGenericNative( - GenericNative value, - OutputStream outputStream, - Map sharedValues, - Encoder encoderA, - Encoder encoderB - ) throws IOException { - encoderA.encode(value.a(), outputStream, sharedValues); - encoderB.encode(value.b(), outputStream, sharedValues); - } - - public static GenericNative decodeGenericNative( - InputStream inputStream, - List sharedValues, - Decoder decoderA, - Decoder decoderB - ) throws IOException { - var a = decoderA.decode(inputStream, sharedValues); - var b = decoderB.decode(inputStream, sharedValues); - return new GenericNative(a, b); - } - // Custom area end: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data body -} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java deleted file mode 100644 index ad1a6d0..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by hobgoblin. - -package org.zwobble.example.types.transient0; - -// Custom area start: org.zwobble.example.types.transient0.Decoder imports -// Custom area end: org.zwobble.example.types.transient0.Decoder imports - -public interface Decoder { - public T decode(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException; - - // Custom area start: org.zwobble.example.types.transient0.Decoder body - // Custom area end: org.zwobble.example.types.transient0.Decoder body -} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java deleted file mode 100644 index 2ba43a6..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by hobgoblin. - -package org.zwobble.example.types.transient0; - -// Custom area start: org.zwobble.example.types.transient0.Encoder imports -// Custom area end: org.zwobble.example.types.transient0.Encoder imports - -public interface Encoder { - public void encode(T value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException; - - // Custom area start: org.zwobble.example.types.transient0.Encoder body - // Custom area end: org.zwobble.example.types.transient0.Encoder body -} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java deleted file mode 100644 index 293aee7..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java +++ /dev/null @@ -1,82 +0,0 @@ -// Generated by hobgoblin. - -package org.zwobble.example.types.transient0; - -// Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins imports -// Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins imports - -public final class HobgoblinTransient0Builtins { - public static void encodeBool(boolean value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - outputStream.write(value ? 1 : 0); - } - - public static boolean decodeBool(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - return inputStream.read() != 0; - } - - public static void encodeInt8(byte value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - outputStream.write(value); - } - - public static byte decodeInt8(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - return (byte) inputStream.read(); - } - - public static void encodeInt32(int value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - outputStream.write(value >>> 0 & 255); - outputStream.write(value >>> 8 & 255); - outputStream.write(value >>> 16 & 255); - outputStream.write(value >>> 24 & 255); - } - - public static int decodeInt32(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - int value = 0; - value = value | inputStream.read() << 0; - value = value | inputStream.read() << 8; - value = value | inputStream.read() << 16; - value = value | inputStream.read() << 24; - return value; - } - - public static void encodeInt64(long value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - outputStream.write((int) (value >>> 0 & 255)); - outputStream.write((int) (value >>> 8 & 255)); - outputStream.write((int) (value >>> 16 & 255)); - outputStream.write((int) (value >>> 24 & 255)); - outputStream.write((int) (value >>> 32 & 255)); - outputStream.write((int) (value >>> 40 & 255)); - outputStream.write((int) (value >>> 48 & 255)); - outputStream.write((int) (value >>> 56 & 255)); - } - - public static long decodeInt64(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - long value = 0; - value = value | inputStream.read() << 0; - value = value | inputStream.read() << 8; - value = value | inputStream.read() << 16; - value = value | inputStream.read() << 24; - value = value | inputStream.read() << 32; - value = value | inputStream.read() << 40; - value = value | inputStream.read() << 48; - value = value | inputStream.read() << 56; - return value; - } - - public static void encodeString(String value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { - var bytes = value.getBytes(java.nio.charset.StandardCharsets.UTF_8); - org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) bytes.length, outputStream, sharedValues); - outputStream.write(bytes); - } - - public static String decodeString(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { - var bytesLength = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); - if (bytesLength > java.lang.Integer.MAX_VALUE) { - throw new java.io.IOException("Strings longer than Integer.MAX_VALUE are not supported"); - } - var bytes = inputStream.readNBytes((int) bytesLength); - return new String(bytes, java.nio.charset.StandardCharsets.UTF_8); - } - - // Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins body - // Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins body -} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java deleted file mode 100644 index 6c5b520..0000000 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by hobgoblin. - -package org.zwobble.example.types.transient0; - -// Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue imports -// Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue imports - -public record HobgoblinTransient0TaggedSharedValue( - long typeId, - java.lang.Object value -) { - public boolean equals(java.lang.Object other) { - return other instanceof org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue otherSharedValue && this.typeId == otherSharedValue.typeId && this.value == otherSharedValue.value; - } - - public int hashCode() { - return 37 * (37 * 17 + java.lang.Long.hashCode(this.typeId)) + java.lang.System.identityHashCode(this.value); - } - - // Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue body - // Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue body -} diff --git a/examples/15-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/15-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java deleted file mode 100644 index ba43aed..0000000 --- a/examples/15-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java +++ /dev/null @@ -1,392 +0,0 @@ -package org.zwobble.example; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.data.EnumWithVariants; -import org.zwobble.example.types.data.GenericNative; -import org.zwobble.example.types.data.Native; -import org.zwobble.example.types.data.StructSingleton; -import org.zwobble.example.types.data.StructWithBool; -import org.zwobble.example.types.data.StructWithBox; -import org.zwobble.example.types.data.StructWithDifferentSharedTypes; -import org.zwobble.example.types.data.StructWithEnum; -import org.zwobble.example.types.data.StructWithGenericNative; -import org.zwobble.example.types.data.StructWithInt8; -import org.zwobble.example.types.data.StructWithInt32; -import org.zwobble.example.types.data.StructWithInt64; -import org.zwobble.example.types.data.StructWithList; -import org.zwobble.example.types.data.StructWithListOfShared; -import org.zwobble.example.types.data.StructWithNative; -import org.zwobble.example.types.data.StructWithOption; -import org.zwobble.example.types.data.StructWithSharedSumAndVariant; -import org.zwobble.example.types.data.StructWithString; -import org.zwobble.example.types.data.StructWithStruct; -import org.zwobble.example.types.data.StructWithSum; -import org.zwobble.example.types.data.VariantOne; -import org.zwobble.example.types.data.VariantTwo; -import org.zwobble.example.types.data.transient0.HobgoblinTransient0Data; -import org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue; - -public class Transient0Tests { - @Test - public void structSingleton() throws IOException { - var value = StructSingleton.INSTANCE; - - assertRoundTripEncoding( - "StructSingleton", - value, - HobgoblinTransient0Data::encodeStructSingleton, - HobgoblinTransient0Data::decodeStructSingleton - ); - } - - @Test - public void structWithBool() throws IOException { - var value = new StructWithBool(true, false); - - assertRoundTripEncoding( - "StructWithBool", - value, - HobgoblinTransient0Data::encodeStructWithBool, - HobgoblinTransient0Data::decodeStructWithBool - ); - } - - @Test - public void structWithInt8() throws IOException { - var value = new StructWithInt8((byte)10, (byte)25); - - assertRoundTripEncoding( - "StructWithInt8", - value, - HobgoblinTransient0Data::encodeStructWithInt8, - HobgoblinTransient0Data::decodeStructWithInt8 - ); - } - - @Test - public void structWithInt32() throws IOException { - var value = new StructWithInt32(10, 25); - - assertRoundTripEncoding( - "StructWithInt32", - value, - HobgoblinTransient0Data::encodeStructWithInt32, - HobgoblinTransient0Data::decodeStructWithInt32 - ); - } - - @Test - public void structWithInt64() throws IOException { - var value = new StructWithInt64(10, 25); - - assertRoundTripEncoding( - "StructWithInt64", - value, - HobgoblinTransient0Data::encodeStructWithInt64, - HobgoblinTransient0Data::decodeStructWithInt64 - ); - } - - @Test - public void structWithString() throws IOException { - var value = new StructWithString("abc", "def"); - - assertRoundTripEncoding( - "StructWithString", - value, - HobgoblinTransient0Data::encodeStructWithString, - HobgoblinTransient0Data::decodeStructWithString - ); - } - - @Test - public void structWithStruct() throws IOException { - var value = new StructWithStruct(new StructWithInt32(10, 25), 42); - - assertRoundTripEncoding( - "StructWithStruct", - value, - HobgoblinTransient0Data::encodeStructWithStruct, - HobgoblinTransient0Data::decodeStructWithStruct - ); - } - - @Test - public void structWithList() throws IOException { - var value = new StructWithList( - List.of(10L, 25L), - List.of( - new StructWithInt32(42, 47), - new StructWithInt32(52, 57), - new StructWithInt32(62, 67) - ) - ); - - assertRoundTripEncoding( - "StructWithList", - value, - HobgoblinTransient0Data::encodeStructWithList, - HobgoblinTransient0Data::decodeStructWithList - ); - } - - @Test - public void structWithOptionNone() throws IOException { - var value = new StructWithOption( - Optional.empty(), - Optional.empty() - ); - - assertRoundTripEncoding( - "StructWithOption_None", - value, - HobgoblinTransient0Data::encodeStructWithOption, - HobgoblinTransient0Data::decodeStructWithOption - ); - } - - @Test - public void structWithOptionSome() throws IOException { - var value = new StructWithOption( - Optional.of(10L), - Optional.of(new StructWithInt32(42, 47)) - ); - - assertRoundTripEncoding( - "StructWithOption_Some", - value, - HobgoblinTransient0Data::encodeStructWithOption, - HobgoblinTransient0Data::decodeStructWithOption - ); - } - - @Test - public void enumWithVariants() throws IOException { - assertRoundTripEncoding( - "EnumWithVariants_zero", - EnumWithVariants.ZERO, - HobgoblinTransient0Data::encodeEnumWithVariants, - HobgoblinTransient0Data::decodeEnumWithVariants - ); - - assertRoundTripEncoding( - "EnumWithVariants_one", - EnumWithVariants.ONE, - HobgoblinTransient0Data::encodeEnumWithVariants, - HobgoblinTransient0Data::decodeEnumWithVariants - ); - - assertRoundTripEncoding( - "EnumWithVariants_two", - EnumWithVariants.TWO, - HobgoblinTransient0Data::encodeEnumWithVariants, - HobgoblinTransient0Data::decodeEnumWithVariants - ); - } - - @Test - public void structWithEnum() throws IOException { - var value = new StructWithEnum( - EnumWithVariants.ONE, - 42 - ); - - assertRoundTripEncoding( - "StructWithEnum", - value, - HobgoblinTransient0Data::encodeStructWithEnum, - HobgoblinTransient0Data::decodeStructWithEnum - ); - } - - @Test - public void sumWithVariants() throws IOException { - assertRoundTripEncoding( - "SumWithVariants_VariantOne", - new VariantOne(10), - HobgoblinTransient0Data::encodeSumWithVariants, - HobgoblinTransient0Data::decodeSumWithVariants - ); - - assertRoundTripEncoding( - "SumWithVariants_VariantTwo", - new VariantTwo(25), - HobgoblinTransient0Data::encodeSumWithVariants, - HobgoblinTransient0Data::decodeSumWithVariants - ); - } - - @Test - public void sumWithBoxedVariants() throws IOException { - assertRoundTripEncoding( - "SumWithBoxedVariants_VariantOne", - new VariantOne(10), - HobgoblinTransient0Data::encodeSumWithBoxedVariants, - HobgoblinTransient0Data::decodeSumWithBoxedVariants - ); - - assertRoundTripEncoding( - "SumWithBoxedVariants_VariantTwo", - new VariantTwo(25), - HobgoblinTransient0Data::encodeSumWithBoxedVariants, - HobgoblinTransient0Data::decodeSumWithBoxedVariants - ); - } - - @Test - public void structWithSum() throws IOException { - var value = new StructWithSum( - new VariantTwo(25), - 42 - ); - - assertRoundTripEncoding( - "StructWithSum", - value, - HobgoblinTransient0Data::encodeStructWithSum, - HobgoblinTransient0Data::decodeStructWithSum - ); - } - - @Test - public void structWithNative() throws IOException { - var value = new StructWithNative( - new Native(10, 25) - ); - - assertRoundTripEncoding( - "StructWithNative", - value, - HobgoblinTransient0Data::encodeStructWithNative, - HobgoblinTransient0Data::decodeStructWithNative - ); - } - - @Test - public void structWithGenericNative() throws IOException { - var value = new StructWithGenericNative( - new GenericNative(10, "x1"), - new GenericNative( - Optional.of("x2"), - new GenericNative( - Optional.of("x3"), - new GenericNative("x4", "x5") - ) - ) - ); - - assertRoundTripEncoding( - "StructWithGenericNative", - value, - HobgoblinTransient0Data::encodeStructWithGenericNative, - HobgoblinTransient0Data::decodeStructWithGenericNative - ); - } - - @Test - public void structWithBox() throws IOException { - var value = new StructWithBox( - new StructWithInt32(10, 25) - ); - - assertRoundTripEncoding( - "StructWithBox", - value, - HobgoblinTransient0Data::encodeStructWithBox, - HobgoblinTransient0Data::decodeStructWithBox - ); - } - - @Test - public void structWithListOfShared() throws IOException { - var a = new StructWithInt32(10, 25); - var b = new StructWithInt32(42, 47); - - var value = new StructWithListOfShared(List.of(a, a, b, a, b)); - - var decodedValue = assertRoundTripEncoding( - "StructWithListOfShared", - value, - HobgoblinTransient0Data::encodeStructWithListOfShared, - HobgoblinTransient0Data::decodeStructWithListOfShared - ); - Assertions.assertSame(decodedValue.inner().get(0), decodedValue.inner().get(1)); - Assertions.assertSame(decodedValue.inner().get(0), decodedValue.inner().get(3)); - Assertions.assertSame(decodedValue.inner().get(2), decodedValue.inner().get(4)); - } - - @Test - public void structWithDifferentSharedTypes() throws IOException { - var a = new StructWithInt32(10, 25); - var b = new StructWithInt64(42, 47); - var c = new StructWithInt32(52, 57); - - var value = new StructWithDifferentSharedTypes(a, b, c); - - assertRoundTripEncoding( - "StructWithDifferentSharedTypes", - value, - HobgoblinTransient0Data::encodeStructWithDifferentSharedTypes, - HobgoblinTransient0Data::decodeStructWithDifferentSharedTypes - ); - } - - @Test - public void structWithSharedSumAndVariant() throws IOException { - var a = new VariantOne(10); - - var value = new StructWithSharedSumAndVariant(a, a); - - assertRoundTripEncoding( - "StructWithSharedSumAndVariant", - value, - HobgoblinTransient0Data::encodeStructWithSharedSumAndVariant, - HobgoblinTransient0Data::decodeStructWithSharedSumAndVariant - ); - } - - private T assertRoundTripEncoding( - String name, - T value, - Encoder encoder, - Decoder decoder - ) throws IOException { - var outputStream = new ByteArrayOutputStream(); - encoder.encode(value, outputStream, new HashMap<>()); - var bytes = outputStream.toByteArray(); - - var outputDir = System.getenv("HOBGOBLIN_OUTPUT_DIR"); - var transient0OutputDir = Path.of(outputDir).resolve("transient-0"); - Files.createDirectories(transient0OutputDir); - var transient0OutputPath = transient0OutputDir.resolve(name); - Files.write(transient0OutputPath, bytes); - - var inputStream = new ByteArrayInputStream(bytes); - var decodedValue = decoder.decode(inputStream, new ArrayList<>()); - - Assertions.assertEquals(value, decodedValue); - - return decodedValue; - } - - private interface Encoder { - void encode(T value, OutputStream outputStream, Map sharedValues) throws IOException; - } - - private interface Decoder { - T decode(InputStream inputStream, List sharedValues) throws IOException; - } -} diff --git a/examples/15-transient-0/output/rust/.gitignore b/examples/15-transient-0/output/rust/.gitignore deleted file mode 100644 index fc03479..0000000 --- a/examples/15-transient-0/output/rust/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -/transient-0/ diff --git a/examples/15-transient-0/output/rust/Cargo.lock b/examples/15-transient-0/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/15-transient-0/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/15-transient-0/output/rust/Cargo.toml b/examples/15-transient-0/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/15-transient-0/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/15-transient-0/output/rust/rust-toolchain.toml b/examples/15-transient-0/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/15-transient-0/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/15-transient-0/output/rust/src/data.rs b/examples/15-transient-0/output/rust/src/data.rs deleted file mode 100644 index 2b890c2..0000000 --- a/examples/15-transient-0/output/rust/src/data.rs +++ /dev/null @@ -1,66 +0,0 @@ -include!("./gen/data.rs"); - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct Native { - pub a: i32, - pub b: i32, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct GenericNative { - pub a: A, - pub b: B, -} - - -pub mod transient_0 { - use ::std::any::Any; - use ::std::sync::Arc; - use ::std::vec::Vec; - use crate::transient_0::{Decode, Encode}; - use super::{GenericNative, Native}; - - include!("./gen/data/transient_0.rs"); - - pub fn encode_native( - value: &Native, - writer: &mut impl std::io::Write, - shared_values: &mut ::std::collections::HashMap::, - ) -> std::io::Result<()> { - crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; - crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; - Ok(()) - } - - pub fn decode_native( - reader: &mut impl std::io::Read, - shared_values: &mut Vec>, - ) -> std::io::Result { - let a = crate::transient_0::decode_int_32(reader, shared_values)?; - let b = crate::transient_0::decode_int_32(reader, shared_values)?; - Ok(Native { a, b }) - } - - pub fn encode_generic_native( - value: &GenericNative, - writer: &mut TWrite, - shared_values: &mut ::std::collections::HashMap::, - encode_a: Encode, - encode_b: Encode, - ) -> std::io::Result<()> { - encode_a(&value.a, writer, shared_values)?; - encode_b(&value.b, writer, shared_values)?; - Ok(()) - } - - pub fn decode_generic_native( - reader: &mut TRead, - shared_values: &mut Vec>, - decode_a: Decode, - decode_b: Decode, - ) -> std::io::Result> { - let a = decode_a(reader, shared_values)?; - let b = decode_b(reader, shared_values)?; - Ok(GenericNative { a, b }) - } -} diff --git a/examples/15-transient-0/output/rust/src/gen/data.rs b/examples/15-transient-0/output/rust/src/gen/data.rs deleted file mode 100644 index 6f1d5b5..0000000 --- a/examples/15-transient-0/output/rust/src/gen/data.rs +++ /dev/null @@ -1,151 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructSingleton; - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithBool { - pub a: ::core::primitive::bool, - pub b: ::core::primitive::bool, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithInt8 { - pub a: ::core::primitive::i8, - pub b: ::core::primitive::i8, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithInt32 { - pub a: ::core::primitive::i32, - pub b: ::core::primitive::i32, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithInt64 { - pub a: ::core::primitive::i64, - pub b: ::core::primitive::i64, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithString { - pub a: ::std::string::String, - pub b: ::std::string::String, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithStruct { - pub inner: crate::data::StructWithInt32, - pub c: ::core::primitive::i32, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithList { - pub a: ::std::vec::Vec::<::core::primitive::i64>, - pub b: ::std::vec::Vec::, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithOption { - pub a: ::std::option::Option::<::core::primitive::i64>, - pub b: ::std::option::Option::, -} - -#[derive(Clone, Copy, Debug, Hash, PartialEq)] -pub enum EnumWithVariants { - Zero, - One, - Two, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithEnum { - pub inner: crate::data::EnumWithVariants, - pub c: ::core::primitive::i32, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub enum SumWithVariants { - VariantOne(crate::data::VariantOne), - VariantTwo(crate::data::VariantTwo), -} - -impl ::std::convert::From:: for crate::data::SumWithVariants { - fn from(value: crate::data::VariantOne) -> Self { - Self::VariantOne(value) - } -} - -impl ::std::convert::From:: for crate::data::SumWithVariants { - fn from(value: crate::data::VariantTwo) -> Self { - Self::VariantTwo(value) - } -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct VariantOne { - pub a: ::core::primitive::i32, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct VariantTwo { - pub a: ::core::primitive::i64, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub enum SumWithBoxedVariants { - VariantOne(::std::boxed::Box::), - VariantTwo(::std::boxed::Box::), -} - -impl ::std::convert::From:: for crate::data::SumWithBoxedVariants { - fn from(value: crate::data::VariantOne) -> Self { - Self::VariantOne(::std::boxed::Box::new(value)) - } -} - -impl ::std::convert::From:: for crate::data::SumWithBoxedVariants { - fn from(value: crate::data::VariantTwo) -> Self { - Self::VariantTwo(::std::boxed::Box::new(value)) - } -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithSum { - pub inner: crate::data::SumWithVariants, - pub b: ::core::primitive::i32, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithNative { - pub a: crate::data::Native, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithGenericNative { - pub a: crate::data::GenericNative::<::core::primitive::i32, ::std::string::String>, - pub b: crate::data::GenericNative::<::std::option::Option::<::std::string::String>, crate::data::GenericNative::<::std::option::Option::<::std::string::String>, crate::data::GenericNative::<::std::string::String, ::std::string::String>>>, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithBox { - pub inner: ::std::boxed::Box::, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithListOfShared { - pub inner: ::std::vec::Vec::<::std::sync::Arc::>, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithDifferentSharedTypes { - pub a: ::std::sync::Arc::, - pub b: ::std::sync::Arc::, - pub c: ::std::sync::Arc::, -} - -#[derive(Clone, Debug, Hash, PartialEq)] -pub struct StructWithSharedSumAndVariant { - pub a: ::std::sync::Arc::, - pub b: ::std::sync::Arc::, -} diff --git a/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs deleted file mode 100644 index b72964c..0000000 --- a/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs +++ /dev/null @@ -1,531 +0,0 @@ -// Generated by hobgoblin. - -pub fn encode_struct_singleton(value: &crate::data::StructSingleton, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_singleton(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - ::std::io::Result::Ok(crate::data::StructSingleton) -} - -pub fn encode_struct_with_bool(value: &crate::data::StructWithBool, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_bool(&value.a, writer, shared_values)?; - crate::transient_0::encode_bool(&value.b, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_bool(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_bool(reader, shared_values)?; - let b = crate::transient_0::decode_bool(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithBool { a: a, b: b }) -} - -pub fn encode_struct_with_int_8(value: &crate::data::StructWithInt8, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_8(&value.a, writer, shared_values)?; - crate::transient_0::encode_int_8(&value.b, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_int_8(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_int_8(reader, shared_values)?; - let b = crate::transient_0::decode_int_8(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithInt8 { a: a, b: b }) -} - -pub fn encode_struct_with_int_32(value: &crate::data::StructWithInt32, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; - crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_int_32(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_int_32(reader, shared_values)?; - let b = crate::transient_0::decode_int_32(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithInt32 { a: a, b: b }) -} - -pub fn encode_struct_with_int_64(value: &crate::data::StructWithInt64, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_64(&value.a, writer, shared_values)?; - crate::transient_0::encode_int_64(&value.b, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_int_64(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_int_64(reader, shared_values)?; - let b = crate::transient_0::decode_int_64(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithInt64 { a: a, b: b }) -} - -pub fn encode_struct_with_string(value: &crate::data::StructWithString, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_string(&value.a, writer, shared_values)?; - crate::transient_0::encode_string(&value.b, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_string(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_string(reader, shared_values)?; - let b = crate::transient_0::decode_string(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithString { a: a, b: b }) -} - -pub fn encode_struct_with_struct(value: &crate::data::StructWithStruct, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::data::transient_0::encode_struct_with_int_32(&value.inner, writer, shared_values)?; - crate::transient_0::encode_int_32(&value.c, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_struct(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let inner = crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?; - let c = crate::transient_0::decode_int_32(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithStruct { inner: inner, c: c }) -} - -pub fn encode_struct_with_list(value: &crate::data::StructWithList, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - { - crate::transient_0::encode_int_64(&(((&value.a).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; - for element in &value.a { - crate::transient_0::encode_int_64(element, writer, shared_values)?; - }; - }; - { - crate::transient_0::encode_int_64(&(((&value.b).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; - for element in &value.b { - crate::data::transient_0::encode_struct_with_int_32(element, writer, shared_values)?; - }; - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_list(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = { - let len = crate::transient_0::decode_int_64(reader, shared_values)?; - let mut elements = ::std::vec::Vec::with_capacity((len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?); - for _ in 0..len { - elements.push(crate::transient_0::decode_int_64(reader, shared_values)?); - }; - elements - }; - let b = { - let len = crate::transient_0::decode_int_64(reader, shared_values)?; - let mut elements = ::std::vec::Vec::with_capacity((len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?); - for _ in 0..len { - elements.push(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); - }; - elements - }; - ::std::io::Result::Ok(crate::data::StructWithList { a: a, b: b }) -} - -pub fn encode_struct_with_option(value: &crate::data::StructWithOption, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - match &value.a { - ::std::option::Option::Some(value) => { - crate::transient_0::encode_bool(&true, writer, shared_values)?; - crate::transient_0::encode_int_64(&value, writer, shared_values)?; - }, - ::std::option::Option::None => { - crate::transient_0::encode_bool(&false, writer, shared_values)?; - }, - }; - match &value.b { - ::std::option::Option::Some(value) => { - crate::transient_0::encode_bool(&true, writer, shared_values)?; - crate::data::transient_0::encode_struct_with_int_32(&value, writer, shared_values)?; - }, - ::std::option::Option::None => { - crate::transient_0::encode_bool(&false, writer, shared_values)?; - }, - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_option(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = { - let is_some = crate::transient_0::decode_bool(reader, shared_values)?; - if is_some { - ::std::option::Option::Some(crate::transient_0::decode_int_64(reader, shared_values)?) - } else { - ::std::option::Option::None - } - }; - let b = { - let is_some = crate::transient_0::decode_bool(reader, shared_values)?; - if is_some { - ::std::option::Option::Some(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?) - } else { - ::std::option::Option::None - } - }; - ::std::io::Result::Ok(crate::data::StructWithOption { a: a, b: b }) -} - -pub fn encode_enum_with_variants(value: &crate::data::EnumWithVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_32(&match value { - crate::data::EnumWithVariants::Zero => 0, - crate::data::EnumWithVariants::One => 1, - crate::data::EnumWithVariants::Two => 2, - }, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_enum_with_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? { - 0 => crate::data::EnumWithVariants::Zero, - 1 => crate::data::EnumWithVariants::One, - 2 => crate::data::EnumWithVariants::Two, - _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.EnumWithVariants"))?, - }) -} - -pub fn encode_struct_with_enum(value: &crate::data::StructWithEnum, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::data::transient_0::encode_enum_with_variants(&value.inner, writer, shared_values)?; - crate::transient_0::encode_int_32(&value.c, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_enum(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let inner = crate::data::transient_0::decode_enum_with_variants(reader, shared_values)?; - let c = crate::transient_0::decode_int_32(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithEnum { inner: inner, c: c }) -} - -pub fn encode_sum_with_variants(value: &crate::data::SumWithVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - match value { - crate::data::SumWithVariants::VariantOne(value) => { - crate::transient_0::encode_int_32(&0, writer, shared_values)?; - crate::data::transient_0::encode_variant_one(value, writer, shared_values)?; - }, - crate::data::SumWithVariants::VariantTwo(value) => { - crate::transient_0::encode_int_32(&1, writer, shared_values)?; - crate::data::transient_0::encode_variant_two(value, writer, shared_values)?; - }, - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_sum_with_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? { - 0 => crate::data::SumWithVariants::VariantOne(crate::data::transient_0::decode_variant_one(reader, shared_values)?), - 1 => crate::data::SumWithVariants::VariantTwo(crate::data::transient_0::decode_variant_two(reader, shared_values)?), - _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.SumWithVariants"))?, - }) -} - -pub fn encode_variant_one(value: &crate::data::VariantOne, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_variant_one(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_int_32(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::VariantOne { a: a }) -} - -pub fn encode_variant_two(value: &crate::data::VariantTwo, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_64(&value.a, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_variant_two(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::transient_0::decode_int_64(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::VariantTwo { a: a }) -} - -pub fn encode_sum_with_boxed_variants(value: &crate::data::SumWithBoxedVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - match value { - crate::data::SumWithBoxedVariants::VariantOne(value) => { - crate::transient_0::encode_int_32(&0, writer, shared_values)?; - crate::data::transient_0::encode_variant_one(value.as_ref(), writer, shared_values)?; - }, - crate::data::SumWithBoxedVariants::VariantTwo(value) => { - crate::transient_0::encode_int_32(&1, writer, shared_values)?; - crate::data::transient_0::encode_variant_two(value.as_ref(), writer, shared_values)?; - }, - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_sum_with_boxed_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? { - 0 => crate::data::SumWithBoxedVariants::VariantOne(::std::boxed::Box::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?)), - 1 => crate::data::SumWithBoxedVariants::VariantTwo(::std::boxed::Box::new(crate::data::transient_0::decode_variant_two(reader, shared_values)?)), - _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.SumWithBoxedVariants"))?, - }) -} - -pub fn encode_struct_with_sum(value: &crate::data::StructWithSum, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::data::transient_0::encode_sum_with_variants(&value.inner, writer, shared_values)?; - crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_sum(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let inner = crate::data::transient_0::decode_sum_with_variants(reader, shared_values)?; - let b = crate::transient_0::decode_int_32(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithSum { inner: inner, b: b }) -} - -pub fn encode_struct_with_native(value: &crate::data::StructWithNative, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::data::transient_0::encode_native(&value.a, writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_native(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::data::transient_0::decode_native(reader, shared_values)?; - ::std::io::Result::Ok(crate::data::StructWithNative { a: a }) -} - -pub fn encode_struct_with_generic_native(value: &crate::data::StructWithGenericNative, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::data::transient_0::encode_generic_native(&value.a, writer, shared_values, |value, writer, shared_values| { - crate::transient_0::encode_int_32(value, writer, shared_values)?; - ::std::io::Result::Ok(()) - }, |value, writer, shared_values| { - crate::transient_0::encode_string(value, writer, shared_values)?; - ::std::io::Result::Ok(()) - })?; - crate::data::transient_0::encode_generic_native(&value.b, writer, shared_values, |value, writer, shared_values| { - match value { - ::std::option::Option::Some(value) => { - crate::transient_0::encode_bool(&true, writer, shared_values)?; - crate::transient_0::encode_string(&value, writer, shared_values)?; - }, - ::std::option::Option::None => { - crate::transient_0::encode_bool(&false, writer, shared_values)?; - }, - }; - ::std::io::Result::Ok(()) - }, |value, writer, shared_values| { - crate::data::transient_0::encode_generic_native(value, writer, shared_values, |value, writer, shared_values| { - match value { - ::std::option::Option::Some(value) => { - crate::transient_0::encode_bool(&true, writer, shared_values)?; - crate::transient_0::encode_string(&value, writer, shared_values)?; - }, - ::std::option::Option::None => { - crate::transient_0::encode_bool(&false, writer, shared_values)?; - }, - }; - ::std::io::Result::Ok(()) - }, |value, writer, shared_values| { - crate::data::transient_0::encode_generic_native(value, writer, shared_values, |value, writer, shared_values| { - crate::transient_0::encode_string(value, writer, shared_values)?; - ::std::io::Result::Ok(()) - }, |value, writer, shared_values| { - crate::transient_0::encode_string(value, writer, shared_values)?; - ::std::io::Result::Ok(()) - })?; - ::std::io::Result::Ok(()) - })?; - ::std::io::Result::Ok(()) - })?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_generic_native(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_int_32(reader, shared_values)?), |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_string(reader, shared_values)?))?; - let b = crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok({ - let is_some = crate::transient_0::decode_bool(reader, shared_values)?; - if is_some { - ::std::option::Option::Some(crate::transient_0::decode_string(reader, shared_values)?) - } else { - ::std::option::Option::None - } - }), |reader, shared_values| ::std::io::Result::Ok(crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok({ - let is_some = crate::transient_0::decode_bool(reader, shared_values)?; - if is_some { - ::std::option::Option::Some(crate::transient_0::decode_string(reader, shared_values)?) - } else { - ::std::option::Option::None - } - }), |reader, shared_values| ::std::io::Result::Ok(crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_string(reader, shared_values)?), |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_string(reader, shared_values)?))?))?))?; - ::std::io::Result::Ok(crate::data::StructWithGenericNative { a: a, b: b }) -} - -pub fn encode_struct_with_box(value: &crate::data::StructWithBox, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::data::transient_0::encode_struct_with_int_32((&value.inner).as_ref(), writer, shared_values)?; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_box(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let inner = ::std::boxed::Box::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); - ::std::io::Result::Ok(crate::data::StructWithBox { inner: inner }) -} - -pub fn encode_struct_with_list_of_shared(value: &crate::data::StructWithListOfShared, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - { - crate::transient_0::encode_int_64(&(((&value.inner).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; - for element in &value.inner { - { - let ptr = ::std::sync::Arc::as_ptr(&element) as ::core::primitive::usize; - match (shared_values.get(&ptr)).copied() { - ::std::option::Option::Some(id) => { - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - }, - ::std::option::Option::None => { - let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - shared_values.insert(ptr, id); - crate::data::transient_0::encode_struct_with_int_32(element.as_ref(), writer, shared_values)?; - }, - }; - }; - }; - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_list_of_shared(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let inner = { - let len = crate::transient_0::decode_int_64(reader, shared_values)?; - let mut elements = ::std::vec::Vec::with_capacity((len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?); - for _ in 0..len { - elements.push({ - let id = crate::transient_0::decode_int_64(reader, shared_values)?; - if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? - } else { - let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); - shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); - decoded_value - } - }); - }; - elements - }; - ::std::io::Result::Ok(crate::data::StructWithListOfShared { inner: inner }) -} - -pub fn encode_struct_with_different_shared_types(value: &crate::data::StructWithDifferentSharedTypes, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - { - let ptr = ::std::sync::Arc::as_ptr(&&value.a) as ::core::primitive::usize; - match (shared_values.get(&ptr)).copied() { - ::std::option::Option::Some(id) => { - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - }, - ::std::option::Option::None => { - let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - shared_values.insert(ptr, id); - crate::data::transient_0::encode_struct_with_int_32((&value.a).as_ref(), writer, shared_values)?; - }, - }; - }; - { - let ptr = ::std::sync::Arc::as_ptr(&&value.b) as ::core::primitive::usize; - match (shared_values.get(&ptr)).copied() { - ::std::option::Option::Some(id) => { - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - }, - ::std::option::Option::None => { - let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - shared_values.insert(ptr, id); - crate::data::transient_0::encode_struct_with_int_64((&value.b).as_ref(), writer, shared_values)?; - }, - }; - }; - { - let ptr = ::std::sync::Arc::as_ptr(&&value.c) as ::core::primitive::usize; - match (shared_values.get(&ptr)).copied() { - ::std::option::Option::Some(id) => { - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - }, - ::std::option::Option::None => { - let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - shared_values.insert(ptr, id); - crate::data::transient_0::encode_struct_with_int_32((&value.c).as_ref(), writer, shared_values)?; - }, - }; - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_different_shared_types(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = { - let id = crate::transient_0::decode_int_64(reader, shared_values)?; - if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? - } else { - let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); - shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); - decoded_value - } - }; - let b = { - let id = crate::transient_0::decode_int_64(reader, shared_values)?; - if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? - } else { - let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_64(reader, shared_values)?); - shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); - decoded_value - } - }; - let c = { - let id = crate::transient_0::decode_int_64(reader, shared_values)?; - if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? - } else { - let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); - shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); - decoded_value - } - }; - ::std::io::Result::Ok(crate::data::StructWithDifferentSharedTypes { a: a, b: b, c: c }) -} - -pub fn encode_struct_with_shared_sum_and_variant(value: &crate::data::StructWithSharedSumAndVariant, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - { - let ptr = ::std::sync::Arc::as_ptr(&&value.a) as ::core::primitive::usize; - match (shared_values.get(&ptr)).copied() { - ::std::option::Option::Some(id) => { - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - }, - ::std::option::Option::None => { - let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - shared_values.insert(ptr, id); - crate::data::transient_0::encode_sum_with_variants((&value.a).as_ref(), writer, shared_values)?; - }, - }; - }; - { - let ptr = ::std::sync::Arc::as_ptr(&&value.b) as ::core::primitive::usize; - match (shared_values.get(&ptr)).copied() { - ::std::option::Option::Some(id) => { - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - }, - ::std::option::Option::None => { - let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; - crate::transient_0::encode_int_64(&id, writer, shared_values)?; - shared_values.insert(ptr, id); - crate::data::transient_0::encode_variant_one((&value.b).as_ref(), writer, shared_values)?; - }, - }; - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_struct_with_shared_sum_and_variant(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { - let a = { - let id = crate::transient_0::decode_int_64(reader, shared_values)?; - if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? - } else { - let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_sum_with_variants(reader, shared_values)?); - shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); - decoded_value - } - }; - let b = { - let id = crate::transient_0::decode_int_64(reader, shared_values)?; - if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? - } else { - let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?); - shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); - decoded_value - } - }; - ::std::io::Result::Ok(crate::data::StructWithSharedSumAndVariant { a: a, b: b }) -} diff --git a/examples/15-transient-0/output/rust/src/gen/transient_0.rs b/examples/15-transient-0/output/rust/src/gen/transient_0.rs deleted file mode 100644 index b65ab95..0000000 --- a/examples/15-transient-0/output/rust/src/gen/transient_0.rs +++ /dev/null @@ -1,88 +0,0 @@ -// Generated by hobgoblin. - -pub type Encode = fn(&T, &mut TWrite, &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()>; - -pub type Decode = fn(&mut TRead, &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::; - -pub fn encode_bool(value: &::core::primitive::bool, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - if *value { - writer.write_all(&1u8.to_le_bytes())?; - } else { - writer.write_all(&0u8.to_le_bytes())?; - }; - ::std::io::Result::Ok(()) -} - -pub fn decode_bool(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::bool> { - let int_value = { - let bytes = { - let mut bytes = [0; 1]; - reader.read_exact(&mut bytes)?; - bytes - }; - u8::from_le_bytes(bytes) - }; - ::std::io::Result::Ok(if int_value == 0 { - false - } else { - true - }) -} - -pub fn encode_int_8(value: &::core::primitive::i8, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - writer.write_all(&value.to_le_bytes())?; - ::std::io::Result::Ok(()) -} - -pub fn decode_int_8(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::i8> { - let bytes = { - let mut bytes = [0; 1]; - reader.read_exact(&mut bytes)?; - bytes - }; - ::std::io::Result::Ok(::core::primitive::i8::from_le_bytes(bytes)) -} - -pub fn encode_int_32(value: &::core::primitive::i32, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - writer.write_all(&value.to_le_bytes())?; - ::std::io::Result::Ok(()) -} - -pub fn decode_int_32(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::i32> { - let bytes = { - let mut bytes = [0; 4]; - reader.read_exact(&mut bytes)?; - bytes - }; - ::std::io::Result::Ok(::core::primitive::i32::from_le_bytes(bytes)) -} - -pub fn encode_int_64(value: &::core::primitive::i64, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - writer.write_all(&value.to_le_bytes())?; - ::std::io::Result::Ok(()) -} - -pub fn decode_int_64(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::i64> { - let bytes = { - let mut bytes = [0; 8]; - reader.read_exact(&mut bytes)?; - bytes - }; - ::std::io::Result::Ok(::core::primitive::i64::from_le_bytes(bytes)) -} - -pub fn encode_string(value: &::std::string::String, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { - crate::transient_0::encode_int_64(&((value.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; - writer.write_all(value.as_bytes())?; - ::std::io::Result::Ok(()) -} - -pub fn decode_string(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::std::string::String> { - let len = crate::transient_0::decode_int_64(reader, shared_values)?; - let bytes = { - let mut bytes = vec![0u8; (len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?]; - reader.read_exact(&mut bytes)?; - bytes - }; - ::std::io::Result::Ok((::std::string::String::from_utf8(bytes)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?) -} diff --git a/examples/15-transient-0/output/rust/src/lib.rs b/examples/15-transient-0/output/rust/src/lib.rs deleted file mode 100644 index a51afff..0000000 --- a/examples/15-transient-0/output/rust/src/lib.rs +++ /dev/null @@ -1,353 +0,0 @@ -pub mod data; -pub mod transient_0; - -#[cfg(test)] -mod test { - use std::any::Any; - use std::io::Cursor; - use std::path::PathBuf; - use std::sync::Arc; - use std::collections::HashMap; - use super::data::{EnumWithVariants, GenericNative, Native, StructSingleton, StructWithBool, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithGenericNative, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithNative, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; - - #[test] - fn struct_singleton() { - let value = StructSingleton; - - assert_round_trip_encoding( - "StructSingleton", - value, - super::data::transient_0::encode_struct_singleton, - super::data::transient_0::decode_struct_singleton, - ); - } - - #[test] - fn struct_with_bool() { - let value = StructWithBool { a: true, b: false }; - - assert_round_trip_encoding( - "StructWithBool", - value, - super::data::transient_0::encode_struct_with_bool, - super::data::transient_0::decode_struct_with_bool, - ); - } - - #[test] - fn struct_with_int_8() { - let value = StructWithInt8 { a: 10, b: 25 }; - - assert_round_trip_encoding( - "StructWithInt8", - value, - super::data::transient_0::encode_struct_with_int_8, - super::data::transient_0::decode_struct_with_int_8, - ); - } - - #[test] - fn struct_with_int_32() { - let value = StructWithInt32 { a: 10, b: 25 }; - - assert_round_trip_encoding( - "StructWithInt32", - value, - super::data::transient_0::encode_struct_with_int_32, - super::data::transient_0::decode_struct_with_int_32, - ); - } - - #[test] - fn struct_with_int_64() { - let value = StructWithInt64 { a: 10, b: 25 }; - - assert_round_trip_encoding( - "StructWithInt64", - value, - super::data::transient_0::encode_struct_with_int_64, - super::data::transient_0::decode_struct_with_int_64, - ); - } - - #[test] - fn struct_with_string() { - let value = StructWithString { a: "abc".to_string(), b: "def".to_string() }; - - assert_round_trip_encoding( - "StructWithString", - value, - super::data::transient_0::encode_struct_with_string, - super::data::transient_0::decode_struct_with_string, - ); - } - - #[test] - fn struct_with_struct() { - let value = StructWithStruct { inner: StructWithInt32 { a: 10, b: 25 }, c: 42 }; - - assert_round_trip_encoding( - "StructWithStruct", - value, - super::data::transient_0::encode_struct_with_struct, - super::data::transient_0::decode_struct_with_struct, - ); - } - - #[test] - fn struct_with_list() { - let value = StructWithList { - a: vec![10, 25], - b: vec![ - StructWithInt32 { a: 42, b: 47 }, - StructWithInt32 { a: 52, b: 57 }, - StructWithInt32 { a: 62, b: 67 }, - ], - }; - - assert_round_trip_encoding( - "StructWithList", - value, - super::data::transient_0::encode_struct_with_list, - super::data::transient_0::decode_struct_with_list, - ); - } - - #[test] - fn struct_with_option_none() { - let value = StructWithOption { - a: None, - b: None, - }; - - assert_round_trip_encoding( - "StructWithOption_None", - value, - super::data::transient_0::encode_struct_with_option, - super::data::transient_0::decode_struct_with_option, - ); - } - - #[test] - fn struct_with_option_some() { - let value = StructWithOption { - a: Some(10), - b: Some(StructWithInt32 { a: 42, b: 47 }), - }; - - assert_round_trip_encoding( - "StructWithOption_Some", - value, - super::data::transient_0::encode_struct_with_option, - super::data::transient_0::decode_struct_with_option, - ); - } - - #[test] - fn enum_with_variants() { - assert_round_trip_encoding( - "EnumWithVariants_zero", - EnumWithVariants::Zero, - super::data::transient_0::encode_enum_with_variants, - super::data::transient_0::decode_enum_with_variants, - ); - - assert_round_trip_encoding( - "EnumWithVariants_one", - EnumWithVariants::One, - super::data::transient_0::encode_enum_with_variants, - super::data::transient_0::decode_enum_with_variants, - ); - - assert_round_trip_encoding( - "EnumWithVariants_two", - EnumWithVariants::Two, - super::data::transient_0::encode_enum_with_variants, - super::data::transient_0::decode_enum_with_variants, - ); - } - - #[test] - fn struct_with_enum() { - let value = StructWithEnum { inner: EnumWithVariants::One, c: 42 }; - - assert_round_trip_encoding( - "StructWithEnum", - value, - super::data::transient_0::encode_struct_with_enum, - super::data::transient_0::decode_struct_with_enum, - ); - } - - #[test] - fn sum_with_variants() { - assert_round_trip_encoding( - "SumWithVariants_VariantOne", - SumWithVariants::VariantOne(VariantOne { a: 10 }), - super::data::transient_0::encode_sum_with_variants, - super::data::transient_0::decode_sum_with_variants, - ); - - assert_round_trip_encoding( - "SumWithVariants_VariantTwo", - SumWithVariants::VariantTwo(VariantTwo { a: 25 }), - super::data::transient_0::encode_sum_with_variants, - super::data::transient_0::decode_sum_with_variants, - ); - } - - #[test] - fn sum_with_boxed_variants() { - assert_round_trip_encoding( - "SumWithBoxedVariants_VariantOne", - SumWithBoxedVariants::VariantOne(Box::new(VariantOne { a: 10 })), - super::data::transient_0::encode_sum_with_boxed_variants, - super::data::transient_0::decode_sum_with_boxed_variants, - ); - - assert_round_trip_encoding( - "SumWithBoxedVariants_VariantTwo", - SumWithBoxedVariants::VariantTwo(Box::new(VariantTwo { a: 25 })), - super::data::transient_0::encode_sum_with_boxed_variants, - super::data::transient_0::decode_sum_with_boxed_variants, - ); - } - - #[test] - fn struct_with_sum() { - let value = StructWithSum { - inner: SumWithVariants::VariantTwo(VariantTwo { a: 25 }), - b: 42, - }; - - assert_round_trip_encoding( - "StructWithSum", - value, - super::data::transient_0::encode_struct_with_sum, - super::data::transient_0::decode_struct_with_sum, - ); - } - - #[test] - fn struct_with_native() { - let value = StructWithNative { - a: Native { a: 10, b: 25 }, - }; - - assert_round_trip_encoding( - "StructWithNative", - value, - super::data::transient_0::encode_struct_with_native, - super::data::transient_0::decode_struct_with_native, - ); - } - - #[test] - fn struct_with_generic_native() { - let value = StructWithGenericNative { - a: GenericNative { a: 10, b: "x1".to_string() }, - b: GenericNative { - a: Some("x2".to_string()), - b: GenericNative { - a: Some("x3".to_string()), - b: GenericNative { a: "x4".to_string(), b: "x5".to_string() }, - }, - }, - }; - - assert_round_trip_encoding( - "StructWithGenericNative", - value, - super::data::transient_0::encode_struct_with_generic_native, - super::data::transient_0::decode_struct_with_generic_native, - ); - } - - #[test] - fn struct_with_box() { - let value = StructWithBox { - inner: Box::new(StructWithInt32 { a: 10, b: 25 }), - }; - - assert_round_trip_encoding( - "StructWithBox", - value, - super::data::transient_0::encode_struct_with_box, - super::data::transient_0::decode_struct_with_box, - ); - } - - #[test] - fn struct_with_list_of_shared() { - let a = Arc::new(StructWithInt32 { a: 10, b: 25 }); - let b = Arc::new(StructWithInt32 { a: 42, b: 47 }); - - let value = StructWithListOfShared { - inner: vec![Arc::clone(&a), Arc::clone(&a), Arc::clone(&b), a, b], - }; - - let decoded_value = assert_round_trip_encoding( - "StructWithListOfShared", - value, - super::data::transient_0::encode_struct_with_list_of_shared, - super::data::transient_0::decode_struct_with_list_of_shared, - ); - assert!(Arc::ptr_eq(&decoded_value.inner[0], &decoded_value.inner[1])); - assert!(Arc::ptr_eq(&decoded_value.inner[0], &decoded_value.inner[3])); - assert!(Arc::ptr_eq(&decoded_value.inner[2], &decoded_value.inner[4])); - } - - #[test] - fn struct_with_different_shared_types() { - let a = Arc::new(StructWithInt32 { a: 10, b: 25 }); - let b = Arc::new(StructWithInt64 { a: 42, b: 47 }); - let c = Arc::new(StructWithInt32 { a: 52, b: 57 }); - - let value = StructWithDifferentSharedTypes { a, b, c }; - - assert_round_trip_encoding( - "StructWithDifferentSharedTypes", - value, - super::data::transient_0::encode_struct_with_different_shared_types, - super::data::transient_0::decode_struct_with_different_shared_types, - ); - } - - #[test] - fn struct_with_shared_sum_and_variant() { - let a = Arc::new(SumWithVariants::VariantOne(VariantOne { a: 10 })); - let b = Arc::new(VariantOne { a: 10 }); - - let value = StructWithSharedSumAndVariant { a, b }; - - assert_round_trip_encoding( - "StructWithSharedSumAndVariant", - value, - super::data::transient_0::encode_struct_with_shared_sum_and_variant, - super::data::transient_0::decode_struct_with_shared_sum_and_variant, - ); - } - - fn assert_round_trip_encoding( - name: &str, - value: T, - encode: impl Fn(&T, &mut Cursor>, &mut HashMap) -> std::io::Result<()>, - decode: impl Fn(&mut Cursor>, &mut Vec>) -> std::io::Result, - ) -> T { - let mut bytes = Cursor::new(Vec::new()); - encode(&value, &mut bytes, &mut HashMap::new()).unwrap(); - - let output_dir = std::env::var("HOBGOBLIN_OUTPUT_DIR").unwrap(); - let transient_0_output_dir = PathBuf::from(output_dir).join("transient-0"); - std::fs::create_dir_all(&transient_0_output_dir).unwrap(); - let transient_0_output_path = transient_0_output_dir.join(name); - std::fs::write(transient_0_output_path, bytes.get_ref()).unwrap(); - - bytes.set_position(0); - let decoded_value = decode(&mut bytes, &mut Vec::new()).unwrap(); - - assert_eq!(value, decoded_value); - - decoded_value - } -} diff --git a/examples/15-transient-0/output/rust/src/transient_0.rs b/examples/15-transient-0/output/rust/src/transient_0.rs deleted file mode 100644 index 8b2b800..0000000 --- a/examples/15-transient-0/output/rust/src/transient_0.rs +++ /dev/null @@ -1 +0,0 @@ -include!("./gen/transient_0.rs"); diff --git a/examples/15-transient-0/src/data.hob b/examples/15-transient-0/src/data.hob deleted file mode 100644 index df96916..0000000 --- a/examples/15-transient-0/src/data.hob +++ /dev/null @@ -1,111 +0,0 @@ -struct StructSingleton { - singleton; -} - -struct StructWithBool { - field a: Bool; - field b: Bool; -} - -struct StructWithInt8 { - field a: Int8; - field b: Int8; -} - -struct StructWithInt32 { - field a: Int32; - field b: Int32; -} - -struct StructWithInt64 { - field a: Int64; - field b: Int64; -} - -struct StructWithString { - field a: String; - field b: String; -} - -struct StructWithStruct { - field inner: StructWithInt32; - field c: Int32; -} - -struct StructWithList { - field a: List[Int64]; - field b: List[StructWithInt32]; -} - -struct StructWithOption { - field a: Option[Int64]; - field b: Option[StructWithInt32]; -} - -enum EnumWithVariants { - variant zero; - variant one; - variant two; -} - -struct StructWithEnum { - field inner: EnumWithVariants; - field c: Int32; -} - -sum SumWithVariants { - variant VariantOne; - variant VariantTwo; -} - -struct VariantOne { - field a: Int32; -} - -struct VariantTwo { - field a: Int64; -} - -sum SumWithBoxedVariants { - variant Box[VariantOne]; - variant Box[VariantTwo]; -} - -struct StructWithSum { - field inner: SumWithVariants; - field b: Int32; -} - -native Native { -} - -struct StructWithNative { - field a: Native; -} - -native GenericNative[A, B] { -} - -struct StructWithGenericNative { - field a: GenericNative[Int32, String]; - field b: GenericNative[Option[String], GenericNative[Option[String], GenericNative[String, String]]]; -} - -struct StructWithBox { - field inner: Box[StructWithInt32]; -} - -struct StructWithListOfShared { - field inner: List[Shared[StructWithInt32]]; -} - -struct StructWithDifferentSharedTypes { - field a: Shared[StructWithInt32]; - field b: Shared[StructWithInt64]; - field c: Shared[StructWithInt32]; -} - -struct StructWithSharedSumAndVariant { - field a: Shared[SumWithVariants]; - field b: Shared[VariantOne]; -} diff --git a/examples/16-transient-0/hobgoblin.json5 b/examples/16-transient-0/hobgoblin.json5 new file mode 100644 index 0000000..e632b0a --- /dev/null +++ b/examples/16-transient-0/hobgoblin.json5 @@ -0,0 +1,27 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "java-transient-0", + path: "output/java/src/main/java", + }, + { + generator: "rust-types", + path: "output/rust/src/gen", + }, + { + generator: "rust-transient-0", + path: "output/rust/src/gen", + } + ], + } +} diff --git a/examples/16-transient-0/output/java/.gitignore b/examples/16-transient-0/output/java/.gitignore new file mode 100644 index 0000000..2fcf0b8 --- /dev/null +++ b/examples/16-transient-0/output/java/.gitignore @@ -0,0 +1,3 @@ +/src/gen/ +/target/ +/transient-0/ diff --git a/examples/16-transient-0/output/java/pom.xml b/examples/16-transient-0/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/16-transient-0/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java new file mode 100644 index 0000000..cfd16d5 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/GenericNative.java @@ -0,0 +1,3 @@ +package org.zwobble.example.types.data; + +public record GenericNative(A a, B b) {} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java new file mode 100644 index 0000000..32796b5 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java @@ -0,0 +1,13 @@ +package org.zwobble.example.types.data; + +public class HobgoblinNativeData { + private HobgoblinNativeData() {} + + public static Native arbitraryNative() { + return new Native(0, 0); + } + + public static GenericNative arbitraryGenericNative() { + throw new RuntimeException("TODO"); + } +} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java new file mode 100644 index 0000000..366dd74 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/Native.java @@ -0,0 +1,3 @@ +package org.zwobble.example.types.data; + +public record Native(int a, int b) {} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java new file mode 100644 index 0000000..1eea54c --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java @@ -0,0 +1,581 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.data.transient0; + +// Custom area start: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data imports +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; +import java.util.Map; +import org.zwobble.example.types.data.GenericNative; +import org.zwobble.example.types.data.Native; +import org.zwobble.example.types.transient0.Decoder; +import org.zwobble.example.types.transient0.Encoder; +import org.zwobble.example.types.transient0.HobgoblinTransient0Builtins; +import org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue; +// Custom area end: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data imports + +public final class HobgoblinTransient0Data { + public static void encodeStructSingleton(org.zwobble.example.types.data.StructSingleton value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + } + + public static org.zwobble.example.types.data.StructSingleton decodeStructSingleton(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + return org.zwobble.example.types.data.StructSingleton.INSTANCE; + } + + public static void encodeStructWithBool(org.zwobble.example.types.data.StructWithBool value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.a(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithBool decodeStructWithBool(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithBool(a, b); + } + + public static void encodeStructWithInt8(org.zwobble.example.types.data.StructWithInt8 value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt8(value.a(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt8(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithInt8 decodeStructWithInt8(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt8(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt8(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithInt8(a, b); + } + + public static void encodeStructWithInt32(org.zwobble.example.types.data.StructWithInt32 value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.a(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithInt32 decodeStructWithInt32(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithInt32(a, b); + } + + public static void encodeStructWithInt64(org.zwobble.example.types.data.StructWithInt64 value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.a(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithInt64 decodeStructWithInt64(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithInt64(a, b); + } + + public static void encodeStructWithString(org.zwobble.example.types.data.StructWithString value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeString(value.a(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeString(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithString decodeStructWithString(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithString(a, b); + } + + public static void encodeStructWithStruct(org.zwobble.example.types.data.StructWithStruct value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.inner(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.c(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithStruct decodeStructWithStruct(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + var c = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithStruct(inner, c); + } + + public static void encodeStructWithList(org.zwobble.example.types.data.StructWithList value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.a().size(), outputStream, sharedValues); + for (var element : value.a()) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(element, outputStream, sharedValues); + } + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.b().size(), outputStream, sharedValues); + for (var element : value.b()) { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(element, outputStream, sharedValues); + } + } + + public static org.zwobble.example.types.data.StructWithList decodeStructWithList(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a$size = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (a$size > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Lists longer than Integer.MAX_VALUE are not supported"); + } + var a = new java.util.ArrayList((int) a$size); + for (long a$index = 0; a$index < a$size; a$index++) { + var a$element = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + a.add(a$element); + } + var b$size = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (b$size > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Lists longer than Integer.MAX_VALUE are not supported"); + } + var b = new java.util.ArrayList((int) b$size); + for (long b$index = 0; b$index < b$size; b$index++) { + var b$element = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + b.add(b$element); + } + return new org.zwobble.example.types.data.StructWithList(a, b); + } + + public static void encodeStructWithOption(org.zwobble.example.types.data.StructWithOption value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.a().isPresent(), outputStream, sharedValues); + if (value.a().isPresent()) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.a().get(), outputStream, sharedValues); + } + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.b().isPresent(), outputStream, sharedValues); + if (value.b().isPresent()) { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.b().get(), outputStream, sharedValues); + } + } + + public static org.zwobble.example.types.data.StructWithOption decodeStructWithOption(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a$isPresent = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); + java.util.Optional a; + if (a$isPresent) { + var a$element = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + a = java.util.Optional.of(a$element); + } else { + a = java.util.Optional.empty(); + } + var b$isPresent = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); + java.util.Optional b; + if (b$isPresent) { + var b$element = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + b = java.util.Optional.of(b$element); + } else { + b = java.util.Optional.empty(); + } + return new org.zwobble.example.types.data.StructWithOption(a, b); + } + + public static void encodeEnumWithVariants(org.zwobble.example.types.data.EnumWithVariants value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.ordinal(), outputStream, sharedValues); + } + + private static final org.zwobble.example.types.data.EnumWithVariants[] EnumWithVariants$values = org.zwobble.example.types.data.EnumWithVariants.values(); + + public static org.zwobble.example.types.data.EnumWithVariants decodeEnumWithVariants(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var ordinal = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return EnumWithVariants$values[ordinal]; + } + + public static void encodeStructWithEnum(org.zwobble.example.types.data.StructWithEnum value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeEnumWithVariants(value.inner(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.c(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithEnum decodeStructWithEnum(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeEnumWithVariants(inputStream, sharedValues); + var c = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithEnum(inner, c); + } + + public static void encodeSumWithVariants(org.zwobble.example.types.data.SumWithVariants value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + switch (value) { + case org.zwobble.example.types.data.VariantOne value$0 -> { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantOne(value$0, outputStream, sharedValues); + } + case org.zwobble.example.types.data.VariantTwo value$1 -> { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantTwo(value$1, outputStream, sharedValues); + } + } + } + + public static org.zwobble.example.types.data.SumWithVariants decodeSumWithVariants(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var variantTag = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + switch (variantTag) { + case 0 -> { + var value$0 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantOne(inputStream, sharedValues); + return value$0; + } + case 1 -> { + var value$1 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantTwo(inputStream, sharedValues); + return value$1; + } + default -> { + throw new java.lang.RuntimeException("unexpected data.SumWithVariants variant tag: " + variantTag); + } + } + } + + public static void encodeVariantOne(org.zwobble.example.types.data.VariantOne value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.a(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.VariantOne decodeVariantOne(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return new org.zwobble.example.types.data.VariantOne(a); + } + + public static void encodeVariantTwo(org.zwobble.example.types.data.VariantTwo value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(value.a(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.VariantTwo decodeVariantTwo(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + return new org.zwobble.example.types.data.VariantTwo(a); + } + + public static void encodeSumWithBoxedVariants(org.zwobble.example.types.data.SumWithBoxedVariants value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + switch (value) { + case org.zwobble.example.types.data.VariantOne value$0 -> { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantOne(value$0, outputStream, sharedValues); + } + case org.zwobble.example.types.data.VariantTwo value$1 -> { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantTwo(value$1, outputStream, sharedValues); + } + } + } + + public static org.zwobble.example.types.data.SumWithBoxedVariants decodeSumWithBoxedVariants(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var variantTag = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + switch (variantTag) { + case 0 -> { + var value$0 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantOne(inputStream, sharedValues); + return value$0; + } + case 1 -> { + var value$1 = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantTwo(inputStream, sharedValues); + return value$1; + } + default -> { + throw new java.lang.RuntimeException("unexpected data.SumWithBoxedVariants variant tag: " + variantTag); + } + } + } + + public static void encodeStructWithSum(org.zwobble.example.types.data.StructWithSum value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeSumWithVariants(value.inner(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt32(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithSum decodeStructWithSum(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeSumWithVariants(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithSum(inner, b); + } + + public static void encodeStructWithNative(org.zwobble.example.types.data.StructWithNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeNative(value.a(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithNative decodeStructWithNative(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeNative(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithNative(a); + } + + public static void encodeStructWithGenericNative(org.zwobble.example.types.data.StructWithGenericNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value.a(), outputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeInt32, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value.b(), outputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$1); + } + + public static org.zwobble.example.types.data.StructWithGenericNative decodeStructWithGenericNative(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeInt32, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString); + var b = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$1); + return new org.zwobble.example.types.data.StructWithGenericNative(a, b); + } + + public static void encodeStructWithBox(org.zwobble.example.types.data.StructWithBox value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.inner(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithBox decodeStructWithBox(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var inner = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithBox(inner); + } + + public static void encodeStructWithListOfShared(org.zwobble.example.types.data.StructWithListOfShared value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.inner().size(), outputStream, sharedValues); + for (var element : value.inner()) { + { + var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, element)); + if (existingId != null) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); + } else { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); + sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, element), (long) sharedValues.size()); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(element, outputStream, sharedValues); + } + } + } + } + + public static org.zwobble.example.types.data.StructWithListOfShared decodeStructWithListOfShared(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var inner$size = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (inner$size > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Lists longer than Integer.MAX_VALUE are not supported"); + } + var inner = new java.util.ArrayList((int) inner$size); + for (long inner$index = 0; inner$index < inner$size; inner$index++) { + var inner$element$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (inner$element$id > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); + } + org.zwobble.example.types.data.StructWithInt32 inner$element; + if (inner$element$id < sharedValues.size()) { + inner$element = switch (sharedValues.get((int) inner$element$id)) { + case org.zwobble.example.types.data.StructWithInt32 inner$element$decodedValue -> { + yield inner$element$decodedValue; + } + default -> { + throw new java.io.IOException("Shared value was of the wrong type"); + } + }; + } else { + var inner$element$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + sharedValues.add(inner$element$decodedValue); + inner$element = inner$element$decodedValue; + } + inner.add(inner$element); + } + return new org.zwobble.example.types.data.StructWithListOfShared(inner); + } + + public static void encodeStructWithDifferentSharedTypes(org.zwobble.example.types.data.StructWithDifferentSharedTypes value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + { + var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.a())); + if (existingId != null) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); + } else { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); + sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.a()), (long) sharedValues.size()); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.a(), outputStream, sharedValues); + } + } + { + var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(1, value.b())); + if (existingId != null) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); + } else { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); + sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(1, value.b()), (long) sharedValues.size()); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt64(value.b(), outputStream, sharedValues); + } + } + { + var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.c())); + if (existingId != null) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); + } else { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); + sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(0, value.c()), (long) sharedValues.size()); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.c(), outputStream, sharedValues); + } + } + } + + public static org.zwobble.example.types.data.StructWithDifferentSharedTypes decodeStructWithDifferentSharedTypes(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (a$id > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); + } + org.zwobble.example.types.data.StructWithInt32 a; + if (a$id < sharedValues.size()) { + a = switch (sharedValues.get((int) a$id)) { + case org.zwobble.example.types.data.StructWithInt32 a$decodedValue -> { + yield a$decodedValue; + } + default -> { + throw new java.io.IOException("Shared value was of the wrong type"); + } + }; + } else { + var a$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + sharedValues.add(a$decodedValue); + a = a$decodedValue; + } + var b$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (b$id > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); + } + org.zwobble.example.types.data.StructWithInt64 b; + if (b$id < sharedValues.size()) { + b = switch (sharedValues.get((int) b$id)) { + case org.zwobble.example.types.data.StructWithInt64 b$decodedValue -> { + yield b$decodedValue; + } + default -> { + throw new java.io.IOException("Shared value was of the wrong type"); + } + }; + } else { + var b$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt64(inputStream, sharedValues); + sharedValues.add(b$decodedValue); + b = b$decodedValue; + } + var c$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (c$id > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); + } + org.zwobble.example.types.data.StructWithInt32 c; + if (c$id < sharedValues.size()) { + c = switch (sharedValues.get((int) c$id)) { + case org.zwobble.example.types.data.StructWithInt32 c$decodedValue -> { + yield c$decodedValue; + } + default -> { + throw new java.io.IOException("Shared value was of the wrong type"); + } + }; + } else { + var c$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeStructWithInt32(inputStream, sharedValues); + sharedValues.add(c$decodedValue); + c = c$decodedValue; + } + return new org.zwobble.example.types.data.StructWithDifferentSharedTypes(a, b, c); + } + + public static void encodeStructWithSharedSumAndVariant(org.zwobble.example.types.data.StructWithSharedSumAndVariant value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + { + var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(2, value.a())); + if (existingId != null) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); + } else { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); + sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(2, value.a()), (long) sharedValues.size()); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeSumWithVariants(value.a(), outputStream, sharedValues); + } + } + { + var existingId = sharedValues.get(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(3, value.b())); + if (existingId != null) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues); + } else { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues); + sharedValues.put(new org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue(3, value.b()), (long) sharedValues.size()); + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeVariantOne(value.b(), outputStream, sharedValues); + } + } + } + + public static org.zwobble.example.types.data.StructWithSharedSumAndVariant decodeStructWithSharedSumAndVariant(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (a$id > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); + } + org.zwobble.example.types.data.SumWithVariants a; + if (a$id < sharedValues.size()) { + a = switch (sharedValues.get((int) a$id)) { + case org.zwobble.example.types.data.SumWithVariants a$decodedValue -> { + yield a$decodedValue; + } + default -> { + throw new java.io.IOException("Shared value was of the wrong type"); + } + }; + } else { + var a$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeSumWithVariants(inputStream, sharedValues); + sharedValues.add(a$decodedValue); + a = a$decodedValue; + } + var b$id = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (b$id > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Shared value IDs greater than Integer.MAX_VALUE are not supported"); + } + org.zwobble.example.types.data.VariantOne b; + if (b$id < sharedValues.size()) { + b = switch (sharedValues.get((int) b$id)) { + case org.zwobble.example.types.data.VariantOne b$decodedValue -> { + yield b$decodedValue; + } + default -> { + throw new java.io.IOException("Shared value was of the wrong type"); + } + }; + } else { + var b$decodedValue = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeVariantOne(inputStream, sharedValues); + sharedValues.add(b$decodedValue); + b = b$decodedValue; + } + return new org.zwobble.example.types.data.StructWithSharedSumAndVariant(a, b); + } + + private static void encode$constructedType$0(java.util.Optional value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeBool(value.isPresent(), outputStream, sharedValues); + if (value.isPresent()) { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeString(value.get(), outputStream, sharedValues); + } + } + + private static java.util.Optional decode$constructedType$0(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var value$isPresent = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues); + java.util.Optional value; + if (value$isPresent) { + var value$element = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues); + value = java.util.Optional.of(value$element); + } else { + value = java.util.Optional.empty(); + } + return value; + } + + private static void encode$constructedType$1(org.zwobble.example.types.data.GenericNative, org.zwobble.example.types.data.GenericNative> value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value, outputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::encode$constructedType$2); + } + + private static org.zwobble.example.types.data.GenericNative, org.zwobble.example.types.data.GenericNative> decode$constructedType$1(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var value = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$0, org.zwobble.example.types.data.transient0.HobgoblinTransient0Data::decode$constructedType$2); + return value; + } + + private static void encode$constructedType$2(org.zwobble.example.types.data.GenericNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value, outputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString); + } + + private static org.zwobble.example.types.data.GenericNative decode$constructedType$2(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var value = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString); + return value; + } + + // Custom area start: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data body + public static void encodeNative( + Native value, + OutputStream outputStream, + Map sharedValues + ) throws IOException { + HobgoblinTransient0Builtins.encodeInt32(value.a(), outputStream, sharedValues); + HobgoblinTransient0Builtins.encodeInt32(value.b(), outputStream, sharedValues); + } + + public static Native decodeNative( + InputStream inputStream, + List sharedValues + ) throws IOException { + var a = HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + var b = HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); + return new Native(a, b); + } + + public static void encodeGenericNative( + GenericNative value, + OutputStream outputStream, + Map sharedValues, + Encoder encoderA, + Encoder encoderB + ) throws IOException { + encoderA.encode(value.a(), outputStream, sharedValues); + encoderB.encode(value.b(), outputStream, sharedValues); + } + + public static GenericNative decodeGenericNative( + InputStream inputStream, + List sharedValues, + Decoder decoderA, + Decoder decoderB + ) throws IOException { + var a = decoderA.decode(inputStream, sharedValues); + var b = decoderB.decode(inputStream, sharedValues); + return new GenericNative(a, b); + } + // Custom area end: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data body +} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java new file mode 100644 index 0000000..ad1a6d0 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java @@ -0,0 +1,13 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.transient0; + +// Custom area start: org.zwobble.example.types.transient0.Decoder imports +// Custom area end: org.zwobble.example.types.transient0.Decoder imports + +public interface Decoder { + public T decode(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException; + + // Custom area start: org.zwobble.example.types.transient0.Decoder body + // Custom area end: org.zwobble.example.types.transient0.Decoder body +} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java new file mode 100644 index 0000000..2ba43a6 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java @@ -0,0 +1,13 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.transient0; + +// Custom area start: org.zwobble.example.types.transient0.Encoder imports +// Custom area end: org.zwobble.example.types.transient0.Encoder imports + +public interface Encoder { + public void encode(T value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException; + + // Custom area start: org.zwobble.example.types.transient0.Encoder body + // Custom area end: org.zwobble.example.types.transient0.Encoder body +} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java new file mode 100644 index 0000000..293aee7 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java @@ -0,0 +1,82 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.transient0; + +// Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins imports +// Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins imports + +public final class HobgoblinTransient0Builtins { + public static void encodeBool(boolean value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + outputStream.write(value ? 1 : 0); + } + + public static boolean decodeBool(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + return inputStream.read() != 0; + } + + public static void encodeInt8(byte value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + outputStream.write(value); + } + + public static byte decodeInt8(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + return (byte) inputStream.read(); + } + + public static void encodeInt32(int value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + outputStream.write(value >>> 0 & 255); + outputStream.write(value >>> 8 & 255); + outputStream.write(value >>> 16 & 255); + outputStream.write(value >>> 24 & 255); + } + + public static int decodeInt32(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + int value = 0; + value = value | inputStream.read() << 0; + value = value | inputStream.read() << 8; + value = value | inputStream.read() << 16; + value = value | inputStream.read() << 24; + return value; + } + + public static void encodeInt64(long value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + outputStream.write((int) (value >>> 0 & 255)); + outputStream.write((int) (value >>> 8 & 255)); + outputStream.write((int) (value >>> 16 & 255)); + outputStream.write((int) (value >>> 24 & 255)); + outputStream.write((int) (value >>> 32 & 255)); + outputStream.write((int) (value >>> 40 & 255)); + outputStream.write((int) (value >>> 48 & 255)); + outputStream.write((int) (value >>> 56 & 255)); + } + + public static long decodeInt64(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + long value = 0; + value = value | inputStream.read() << 0; + value = value | inputStream.read() << 8; + value = value | inputStream.read() << 16; + value = value | inputStream.read() << 24; + value = value | inputStream.read() << 32; + value = value | inputStream.read() << 40; + value = value | inputStream.read() << 48; + value = value | inputStream.read() << 56; + return value; + } + + public static void encodeString(String value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + var bytes = value.getBytes(java.nio.charset.StandardCharsets.UTF_8); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64((long) bytes.length, outputStream, sharedValues); + outputStream.write(bytes); + } + + public static String decodeString(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var bytesLength = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + if (bytesLength > java.lang.Integer.MAX_VALUE) { + throw new java.io.IOException("Strings longer than Integer.MAX_VALUE are not supported"); + } + var bytes = inputStream.readNBytes((int) bytesLength); + return new String(bytes, java.nio.charset.StandardCharsets.UTF_8); + } + + // Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins body + // Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0Builtins body +} diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java new file mode 100644 index 0000000..6c5b520 --- /dev/null +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0TaggedSharedValue.java @@ -0,0 +1,22 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.transient0; + +// Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue imports +// Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue imports + +public record HobgoblinTransient0TaggedSharedValue( + long typeId, + java.lang.Object value +) { + public boolean equals(java.lang.Object other) { + return other instanceof org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue otherSharedValue && this.typeId == otherSharedValue.typeId && this.value == otherSharedValue.value; + } + + public int hashCode() { + return 37 * (37 * 17 + java.lang.Long.hashCode(this.typeId)) + java.lang.System.identityHashCode(this.value); + } + + // Custom area start: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue body + // Custom area end: org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue body +} diff --git a/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java new file mode 100644 index 0000000..ba43aed --- /dev/null +++ b/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java @@ -0,0 +1,392 @@ +package org.zwobble.example; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.data.EnumWithVariants; +import org.zwobble.example.types.data.GenericNative; +import org.zwobble.example.types.data.Native; +import org.zwobble.example.types.data.StructSingleton; +import org.zwobble.example.types.data.StructWithBool; +import org.zwobble.example.types.data.StructWithBox; +import org.zwobble.example.types.data.StructWithDifferentSharedTypes; +import org.zwobble.example.types.data.StructWithEnum; +import org.zwobble.example.types.data.StructWithGenericNative; +import org.zwobble.example.types.data.StructWithInt8; +import org.zwobble.example.types.data.StructWithInt32; +import org.zwobble.example.types.data.StructWithInt64; +import org.zwobble.example.types.data.StructWithList; +import org.zwobble.example.types.data.StructWithListOfShared; +import org.zwobble.example.types.data.StructWithNative; +import org.zwobble.example.types.data.StructWithOption; +import org.zwobble.example.types.data.StructWithSharedSumAndVariant; +import org.zwobble.example.types.data.StructWithString; +import org.zwobble.example.types.data.StructWithStruct; +import org.zwobble.example.types.data.StructWithSum; +import org.zwobble.example.types.data.VariantOne; +import org.zwobble.example.types.data.VariantTwo; +import org.zwobble.example.types.data.transient0.HobgoblinTransient0Data; +import org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue; + +public class Transient0Tests { + @Test + public void structSingleton() throws IOException { + var value = StructSingleton.INSTANCE; + + assertRoundTripEncoding( + "StructSingleton", + value, + HobgoblinTransient0Data::encodeStructSingleton, + HobgoblinTransient0Data::decodeStructSingleton + ); + } + + @Test + public void structWithBool() throws IOException { + var value = new StructWithBool(true, false); + + assertRoundTripEncoding( + "StructWithBool", + value, + HobgoblinTransient0Data::encodeStructWithBool, + HobgoblinTransient0Data::decodeStructWithBool + ); + } + + @Test + public void structWithInt8() throws IOException { + var value = new StructWithInt8((byte)10, (byte)25); + + assertRoundTripEncoding( + "StructWithInt8", + value, + HobgoblinTransient0Data::encodeStructWithInt8, + HobgoblinTransient0Data::decodeStructWithInt8 + ); + } + + @Test + public void structWithInt32() throws IOException { + var value = new StructWithInt32(10, 25); + + assertRoundTripEncoding( + "StructWithInt32", + value, + HobgoblinTransient0Data::encodeStructWithInt32, + HobgoblinTransient0Data::decodeStructWithInt32 + ); + } + + @Test + public void structWithInt64() throws IOException { + var value = new StructWithInt64(10, 25); + + assertRoundTripEncoding( + "StructWithInt64", + value, + HobgoblinTransient0Data::encodeStructWithInt64, + HobgoblinTransient0Data::decodeStructWithInt64 + ); + } + + @Test + public void structWithString() throws IOException { + var value = new StructWithString("abc", "def"); + + assertRoundTripEncoding( + "StructWithString", + value, + HobgoblinTransient0Data::encodeStructWithString, + HobgoblinTransient0Data::decodeStructWithString + ); + } + + @Test + public void structWithStruct() throws IOException { + var value = new StructWithStruct(new StructWithInt32(10, 25), 42); + + assertRoundTripEncoding( + "StructWithStruct", + value, + HobgoblinTransient0Data::encodeStructWithStruct, + HobgoblinTransient0Data::decodeStructWithStruct + ); + } + + @Test + public void structWithList() throws IOException { + var value = new StructWithList( + List.of(10L, 25L), + List.of( + new StructWithInt32(42, 47), + new StructWithInt32(52, 57), + new StructWithInt32(62, 67) + ) + ); + + assertRoundTripEncoding( + "StructWithList", + value, + HobgoblinTransient0Data::encodeStructWithList, + HobgoblinTransient0Data::decodeStructWithList + ); + } + + @Test + public void structWithOptionNone() throws IOException { + var value = new StructWithOption( + Optional.empty(), + Optional.empty() + ); + + assertRoundTripEncoding( + "StructWithOption_None", + value, + HobgoblinTransient0Data::encodeStructWithOption, + HobgoblinTransient0Data::decodeStructWithOption + ); + } + + @Test + public void structWithOptionSome() throws IOException { + var value = new StructWithOption( + Optional.of(10L), + Optional.of(new StructWithInt32(42, 47)) + ); + + assertRoundTripEncoding( + "StructWithOption_Some", + value, + HobgoblinTransient0Data::encodeStructWithOption, + HobgoblinTransient0Data::decodeStructWithOption + ); + } + + @Test + public void enumWithVariants() throws IOException { + assertRoundTripEncoding( + "EnumWithVariants_zero", + EnumWithVariants.ZERO, + HobgoblinTransient0Data::encodeEnumWithVariants, + HobgoblinTransient0Data::decodeEnumWithVariants + ); + + assertRoundTripEncoding( + "EnumWithVariants_one", + EnumWithVariants.ONE, + HobgoblinTransient0Data::encodeEnumWithVariants, + HobgoblinTransient0Data::decodeEnumWithVariants + ); + + assertRoundTripEncoding( + "EnumWithVariants_two", + EnumWithVariants.TWO, + HobgoblinTransient0Data::encodeEnumWithVariants, + HobgoblinTransient0Data::decodeEnumWithVariants + ); + } + + @Test + public void structWithEnum() throws IOException { + var value = new StructWithEnum( + EnumWithVariants.ONE, + 42 + ); + + assertRoundTripEncoding( + "StructWithEnum", + value, + HobgoblinTransient0Data::encodeStructWithEnum, + HobgoblinTransient0Data::decodeStructWithEnum + ); + } + + @Test + public void sumWithVariants() throws IOException { + assertRoundTripEncoding( + "SumWithVariants_VariantOne", + new VariantOne(10), + HobgoblinTransient0Data::encodeSumWithVariants, + HobgoblinTransient0Data::decodeSumWithVariants + ); + + assertRoundTripEncoding( + "SumWithVariants_VariantTwo", + new VariantTwo(25), + HobgoblinTransient0Data::encodeSumWithVariants, + HobgoblinTransient0Data::decodeSumWithVariants + ); + } + + @Test + public void sumWithBoxedVariants() throws IOException { + assertRoundTripEncoding( + "SumWithBoxedVariants_VariantOne", + new VariantOne(10), + HobgoblinTransient0Data::encodeSumWithBoxedVariants, + HobgoblinTransient0Data::decodeSumWithBoxedVariants + ); + + assertRoundTripEncoding( + "SumWithBoxedVariants_VariantTwo", + new VariantTwo(25), + HobgoblinTransient0Data::encodeSumWithBoxedVariants, + HobgoblinTransient0Data::decodeSumWithBoxedVariants + ); + } + + @Test + public void structWithSum() throws IOException { + var value = new StructWithSum( + new VariantTwo(25), + 42 + ); + + assertRoundTripEncoding( + "StructWithSum", + value, + HobgoblinTransient0Data::encodeStructWithSum, + HobgoblinTransient0Data::decodeStructWithSum + ); + } + + @Test + public void structWithNative() throws IOException { + var value = new StructWithNative( + new Native(10, 25) + ); + + assertRoundTripEncoding( + "StructWithNative", + value, + HobgoblinTransient0Data::encodeStructWithNative, + HobgoblinTransient0Data::decodeStructWithNative + ); + } + + @Test + public void structWithGenericNative() throws IOException { + var value = new StructWithGenericNative( + new GenericNative(10, "x1"), + new GenericNative( + Optional.of("x2"), + new GenericNative( + Optional.of("x3"), + new GenericNative("x4", "x5") + ) + ) + ); + + assertRoundTripEncoding( + "StructWithGenericNative", + value, + HobgoblinTransient0Data::encodeStructWithGenericNative, + HobgoblinTransient0Data::decodeStructWithGenericNative + ); + } + + @Test + public void structWithBox() throws IOException { + var value = new StructWithBox( + new StructWithInt32(10, 25) + ); + + assertRoundTripEncoding( + "StructWithBox", + value, + HobgoblinTransient0Data::encodeStructWithBox, + HobgoblinTransient0Data::decodeStructWithBox + ); + } + + @Test + public void structWithListOfShared() throws IOException { + var a = new StructWithInt32(10, 25); + var b = new StructWithInt32(42, 47); + + var value = new StructWithListOfShared(List.of(a, a, b, a, b)); + + var decodedValue = assertRoundTripEncoding( + "StructWithListOfShared", + value, + HobgoblinTransient0Data::encodeStructWithListOfShared, + HobgoblinTransient0Data::decodeStructWithListOfShared + ); + Assertions.assertSame(decodedValue.inner().get(0), decodedValue.inner().get(1)); + Assertions.assertSame(decodedValue.inner().get(0), decodedValue.inner().get(3)); + Assertions.assertSame(decodedValue.inner().get(2), decodedValue.inner().get(4)); + } + + @Test + public void structWithDifferentSharedTypes() throws IOException { + var a = new StructWithInt32(10, 25); + var b = new StructWithInt64(42, 47); + var c = new StructWithInt32(52, 57); + + var value = new StructWithDifferentSharedTypes(a, b, c); + + assertRoundTripEncoding( + "StructWithDifferentSharedTypes", + value, + HobgoblinTransient0Data::encodeStructWithDifferentSharedTypes, + HobgoblinTransient0Data::decodeStructWithDifferentSharedTypes + ); + } + + @Test + public void structWithSharedSumAndVariant() throws IOException { + var a = new VariantOne(10); + + var value = new StructWithSharedSumAndVariant(a, a); + + assertRoundTripEncoding( + "StructWithSharedSumAndVariant", + value, + HobgoblinTransient0Data::encodeStructWithSharedSumAndVariant, + HobgoblinTransient0Data::decodeStructWithSharedSumAndVariant + ); + } + + private T assertRoundTripEncoding( + String name, + T value, + Encoder encoder, + Decoder decoder + ) throws IOException { + var outputStream = new ByteArrayOutputStream(); + encoder.encode(value, outputStream, new HashMap<>()); + var bytes = outputStream.toByteArray(); + + var outputDir = System.getenv("HOBGOBLIN_OUTPUT_DIR"); + var transient0OutputDir = Path.of(outputDir).resolve("transient-0"); + Files.createDirectories(transient0OutputDir); + var transient0OutputPath = transient0OutputDir.resolve(name); + Files.write(transient0OutputPath, bytes); + + var inputStream = new ByteArrayInputStream(bytes); + var decodedValue = decoder.decode(inputStream, new ArrayList<>()); + + Assertions.assertEquals(value, decodedValue); + + return decodedValue; + } + + private interface Encoder { + void encode(T value, OutputStream outputStream, Map sharedValues) throws IOException; + } + + private interface Decoder { + T decode(InputStream inputStream, List sharedValues) throws IOException; + } +} diff --git a/examples/16-transient-0/output/rust/.gitignore b/examples/16-transient-0/output/rust/.gitignore new file mode 100644 index 0000000..fc03479 --- /dev/null +++ b/examples/16-transient-0/output/rust/.gitignore @@ -0,0 +1,2 @@ +/target +/transient-0/ diff --git a/examples/16-transient-0/output/rust/Cargo.lock b/examples/16-transient-0/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/16-transient-0/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "example" +version = "0.1.0" diff --git a/examples/16-transient-0/output/rust/Cargo.toml b/examples/16-transient-0/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/16-transient-0/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/16-transient-0/output/rust/rust-toolchain.toml b/examples/16-transient-0/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/16-transient-0/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/16-transient-0/output/rust/src/data.rs b/examples/16-transient-0/output/rust/src/data.rs new file mode 100644 index 0000000..2b890c2 --- /dev/null +++ b/examples/16-transient-0/output/rust/src/data.rs @@ -0,0 +1,66 @@ +include!("./gen/data.rs"); + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Native { + pub a: i32, + pub b: i32, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct GenericNative { + pub a: A, + pub b: B, +} + + +pub mod transient_0 { + use ::std::any::Any; + use ::std::sync::Arc; + use ::std::vec::Vec; + use crate::transient_0::{Decode, Encode}; + use super::{GenericNative, Native}; + + include!("./gen/data/transient_0.rs"); + + pub fn encode_native( + value: &Native, + writer: &mut impl std::io::Write, + shared_values: &mut ::std::collections::HashMap::, + ) -> std::io::Result<()> { + crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; + crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; + Ok(()) + } + + pub fn decode_native( + reader: &mut impl std::io::Read, + shared_values: &mut Vec>, + ) -> std::io::Result { + let a = crate::transient_0::decode_int_32(reader, shared_values)?; + let b = crate::transient_0::decode_int_32(reader, shared_values)?; + Ok(Native { a, b }) + } + + pub fn encode_generic_native( + value: &GenericNative, + writer: &mut TWrite, + shared_values: &mut ::std::collections::HashMap::, + encode_a: Encode, + encode_b: Encode, + ) -> std::io::Result<()> { + encode_a(&value.a, writer, shared_values)?; + encode_b(&value.b, writer, shared_values)?; + Ok(()) + } + + pub fn decode_generic_native( + reader: &mut TRead, + shared_values: &mut Vec>, + decode_a: Decode, + decode_b: Decode, + ) -> std::io::Result> { + let a = decode_a(reader, shared_values)?; + let b = decode_b(reader, shared_values)?; + Ok(GenericNative { a, b }) + } +} diff --git a/examples/16-transient-0/output/rust/src/gen/data.rs b/examples/16-transient-0/output/rust/src/gen/data.rs new file mode 100644 index 0000000..6f1d5b5 --- /dev/null +++ b/examples/16-transient-0/output/rust/src/gen/data.rs @@ -0,0 +1,151 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructSingleton; + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithBool { + pub a: ::core::primitive::bool, + pub b: ::core::primitive::bool, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithInt8 { + pub a: ::core::primitive::i8, + pub b: ::core::primitive::i8, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithInt32 { + pub a: ::core::primitive::i32, + pub b: ::core::primitive::i32, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithInt64 { + pub a: ::core::primitive::i64, + pub b: ::core::primitive::i64, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithString { + pub a: ::std::string::String, + pub b: ::std::string::String, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithStruct { + pub inner: crate::data::StructWithInt32, + pub c: ::core::primitive::i32, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithList { + pub a: ::std::vec::Vec::<::core::primitive::i64>, + pub b: ::std::vec::Vec::, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithOption { + pub a: ::std::option::Option::<::core::primitive::i64>, + pub b: ::std::option::Option::, +} + +#[derive(Clone, Copy, Debug, Hash, PartialEq)] +pub enum EnumWithVariants { + Zero, + One, + Two, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithEnum { + pub inner: crate::data::EnumWithVariants, + pub c: ::core::primitive::i32, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub enum SumWithVariants { + VariantOne(crate::data::VariantOne), + VariantTwo(crate::data::VariantTwo), +} + +impl ::std::convert::From:: for crate::data::SumWithVariants { + fn from(value: crate::data::VariantOne) -> Self { + Self::VariantOne(value) + } +} + +impl ::std::convert::From:: for crate::data::SumWithVariants { + fn from(value: crate::data::VariantTwo) -> Self { + Self::VariantTwo(value) + } +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct VariantOne { + pub a: ::core::primitive::i32, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct VariantTwo { + pub a: ::core::primitive::i64, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub enum SumWithBoxedVariants { + VariantOne(::std::boxed::Box::), + VariantTwo(::std::boxed::Box::), +} + +impl ::std::convert::From:: for crate::data::SumWithBoxedVariants { + fn from(value: crate::data::VariantOne) -> Self { + Self::VariantOne(::std::boxed::Box::new(value)) + } +} + +impl ::std::convert::From:: for crate::data::SumWithBoxedVariants { + fn from(value: crate::data::VariantTwo) -> Self { + Self::VariantTwo(::std::boxed::Box::new(value)) + } +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithSum { + pub inner: crate::data::SumWithVariants, + pub b: ::core::primitive::i32, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithNative { + pub a: crate::data::Native, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithGenericNative { + pub a: crate::data::GenericNative::<::core::primitive::i32, ::std::string::String>, + pub b: crate::data::GenericNative::<::std::option::Option::<::std::string::String>, crate::data::GenericNative::<::std::option::Option::<::std::string::String>, crate::data::GenericNative::<::std::string::String, ::std::string::String>>>, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithBox { + pub inner: ::std::boxed::Box::, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithListOfShared { + pub inner: ::std::vec::Vec::<::std::sync::Arc::>, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithDifferentSharedTypes { + pub a: ::std::sync::Arc::, + pub b: ::std::sync::Arc::, + pub c: ::std::sync::Arc::, +} + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithSharedSumAndVariant { + pub a: ::std::sync::Arc::, + pub b: ::std::sync::Arc::, +} diff --git a/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs new file mode 100644 index 0000000..b72964c --- /dev/null +++ b/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs @@ -0,0 +1,531 @@ +// Generated by hobgoblin. + +pub fn encode_struct_singleton(value: &crate::data::StructSingleton, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_singleton(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + ::std::io::Result::Ok(crate::data::StructSingleton) +} + +pub fn encode_struct_with_bool(value: &crate::data::StructWithBool, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_bool(&value.a, writer, shared_values)?; + crate::transient_0::encode_bool(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_bool(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_bool(reader, shared_values)?; + let b = crate::transient_0::decode_bool(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithBool { a: a, b: b }) +} + +pub fn encode_struct_with_int_8(value: &crate::data::StructWithInt8, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_8(&value.a, writer, shared_values)?; + crate::transient_0::encode_int_8(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_int_8(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_int_8(reader, shared_values)?; + let b = crate::transient_0::decode_int_8(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithInt8 { a: a, b: b }) +} + +pub fn encode_struct_with_int_32(value: &crate::data::StructWithInt32, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; + crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_int_32(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_int_32(reader, shared_values)?; + let b = crate::transient_0::decode_int_32(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithInt32 { a: a, b: b }) +} + +pub fn encode_struct_with_int_64(value: &crate::data::StructWithInt64, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_64(&value.a, writer, shared_values)?; + crate::transient_0::encode_int_64(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_int_64(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_int_64(reader, shared_values)?; + let b = crate::transient_0::decode_int_64(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithInt64 { a: a, b: b }) +} + +pub fn encode_struct_with_string(value: &crate::data::StructWithString, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_string(&value.a, writer, shared_values)?; + crate::transient_0::encode_string(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_string(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_string(reader, shared_values)?; + let b = crate::transient_0::decode_string(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithString { a: a, b: b }) +} + +pub fn encode_struct_with_struct(value: &crate::data::StructWithStruct, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::data::transient_0::encode_struct_with_int_32(&value.inner, writer, shared_values)?; + crate::transient_0::encode_int_32(&value.c, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_struct(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let inner = crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?; + let c = crate::transient_0::decode_int_32(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithStruct { inner: inner, c: c }) +} + +pub fn encode_struct_with_list(value: &crate::data::StructWithList, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + { + crate::transient_0::encode_int_64(&(((&value.a).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; + for element in &value.a { + crate::transient_0::encode_int_64(element, writer, shared_values)?; + }; + }; + { + crate::transient_0::encode_int_64(&(((&value.b).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; + for element in &value.b { + crate::data::transient_0::encode_struct_with_int_32(element, writer, shared_values)?; + }; + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_list(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = { + let len = crate::transient_0::decode_int_64(reader, shared_values)?; + let mut elements = ::std::vec::Vec::with_capacity((len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?); + for _ in 0..len { + elements.push(crate::transient_0::decode_int_64(reader, shared_values)?); + }; + elements + }; + let b = { + let len = crate::transient_0::decode_int_64(reader, shared_values)?; + let mut elements = ::std::vec::Vec::with_capacity((len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?); + for _ in 0..len { + elements.push(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); + }; + elements + }; + ::std::io::Result::Ok(crate::data::StructWithList { a: a, b: b }) +} + +pub fn encode_struct_with_option(value: &crate::data::StructWithOption, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + match &value.a { + ::std::option::Option::Some(value) => { + crate::transient_0::encode_bool(&true, writer, shared_values)?; + crate::transient_0::encode_int_64(&value, writer, shared_values)?; + }, + ::std::option::Option::None => { + crate::transient_0::encode_bool(&false, writer, shared_values)?; + }, + }; + match &value.b { + ::std::option::Option::Some(value) => { + crate::transient_0::encode_bool(&true, writer, shared_values)?; + crate::data::transient_0::encode_struct_with_int_32(&value, writer, shared_values)?; + }, + ::std::option::Option::None => { + crate::transient_0::encode_bool(&false, writer, shared_values)?; + }, + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_option(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = { + let is_some = crate::transient_0::decode_bool(reader, shared_values)?; + if is_some { + ::std::option::Option::Some(crate::transient_0::decode_int_64(reader, shared_values)?) + } else { + ::std::option::Option::None + } + }; + let b = { + let is_some = crate::transient_0::decode_bool(reader, shared_values)?; + if is_some { + ::std::option::Option::Some(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?) + } else { + ::std::option::Option::None + } + }; + ::std::io::Result::Ok(crate::data::StructWithOption { a: a, b: b }) +} + +pub fn encode_enum_with_variants(value: &crate::data::EnumWithVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_32(&match value { + crate::data::EnumWithVariants::Zero => 0, + crate::data::EnumWithVariants::One => 1, + crate::data::EnumWithVariants::Two => 2, + }, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_enum_with_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? { + 0 => crate::data::EnumWithVariants::Zero, + 1 => crate::data::EnumWithVariants::One, + 2 => crate::data::EnumWithVariants::Two, + _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.EnumWithVariants"))?, + }) +} + +pub fn encode_struct_with_enum(value: &crate::data::StructWithEnum, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::data::transient_0::encode_enum_with_variants(&value.inner, writer, shared_values)?; + crate::transient_0::encode_int_32(&value.c, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_enum(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let inner = crate::data::transient_0::decode_enum_with_variants(reader, shared_values)?; + let c = crate::transient_0::decode_int_32(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithEnum { inner: inner, c: c }) +} + +pub fn encode_sum_with_variants(value: &crate::data::SumWithVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + match value { + crate::data::SumWithVariants::VariantOne(value) => { + crate::transient_0::encode_int_32(&0, writer, shared_values)?; + crate::data::transient_0::encode_variant_one(value, writer, shared_values)?; + }, + crate::data::SumWithVariants::VariantTwo(value) => { + crate::transient_0::encode_int_32(&1, writer, shared_values)?; + crate::data::transient_0::encode_variant_two(value, writer, shared_values)?; + }, + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_sum_with_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? { + 0 => crate::data::SumWithVariants::VariantOne(crate::data::transient_0::decode_variant_one(reader, shared_values)?), + 1 => crate::data::SumWithVariants::VariantTwo(crate::data::transient_0::decode_variant_two(reader, shared_values)?), + _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.SumWithVariants"))?, + }) +} + +pub fn encode_variant_one(value: &crate::data::VariantOne, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_variant_one(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_int_32(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::VariantOne { a: a }) +} + +pub fn encode_variant_two(value: &crate::data::VariantTwo, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_64(&value.a, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_variant_two(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::transient_0::decode_int_64(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::VariantTwo { a: a }) +} + +pub fn encode_sum_with_boxed_variants(value: &crate::data::SumWithBoxedVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + match value { + crate::data::SumWithBoxedVariants::VariantOne(value) => { + crate::transient_0::encode_int_32(&0, writer, shared_values)?; + crate::data::transient_0::encode_variant_one(value.as_ref(), writer, shared_values)?; + }, + crate::data::SumWithBoxedVariants::VariantTwo(value) => { + crate::transient_0::encode_int_32(&1, writer, shared_values)?; + crate::data::transient_0::encode_variant_two(value.as_ref(), writer, shared_values)?; + }, + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_sum_with_boxed_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? { + 0 => crate::data::SumWithBoxedVariants::VariantOne(::std::boxed::Box::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?)), + 1 => crate::data::SumWithBoxedVariants::VariantTwo(::std::boxed::Box::new(crate::data::transient_0::decode_variant_two(reader, shared_values)?)), + _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.SumWithBoxedVariants"))?, + }) +} + +pub fn encode_struct_with_sum(value: &crate::data::StructWithSum, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::data::transient_0::encode_sum_with_variants(&value.inner, writer, shared_values)?; + crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_sum(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let inner = crate::data::transient_0::decode_sum_with_variants(reader, shared_values)?; + let b = crate::transient_0::decode_int_32(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithSum { inner: inner, b: b }) +} + +pub fn encode_struct_with_native(value: &crate::data::StructWithNative, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::data::transient_0::encode_native(&value.a, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_native(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::data::transient_0::decode_native(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithNative { a: a }) +} + +pub fn encode_struct_with_generic_native(value: &crate::data::StructWithGenericNative, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::data::transient_0::encode_generic_native(&value.a, writer, shared_values, |value, writer, shared_values| { + crate::transient_0::encode_int_32(value, writer, shared_values)?; + ::std::io::Result::Ok(()) + }, |value, writer, shared_values| { + crate::transient_0::encode_string(value, writer, shared_values)?; + ::std::io::Result::Ok(()) + })?; + crate::data::transient_0::encode_generic_native(&value.b, writer, shared_values, |value, writer, shared_values| { + match value { + ::std::option::Option::Some(value) => { + crate::transient_0::encode_bool(&true, writer, shared_values)?; + crate::transient_0::encode_string(&value, writer, shared_values)?; + }, + ::std::option::Option::None => { + crate::transient_0::encode_bool(&false, writer, shared_values)?; + }, + }; + ::std::io::Result::Ok(()) + }, |value, writer, shared_values| { + crate::data::transient_0::encode_generic_native(value, writer, shared_values, |value, writer, shared_values| { + match value { + ::std::option::Option::Some(value) => { + crate::transient_0::encode_bool(&true, writer, shared_values)?; + crate::transient_0::encode_string(&value, writer, shared_values)?; + }, + ::std::option::Option::None => { + crate::transient_0::encode_bool(&false, writer, shared_values)?; + }, + }; + ::std::io::Result::Ok(()) + }, |value, writer, shared_values| { + crate::data::transient_0::encode_generic_native(value, writer, shared_values, |value, writer, shared_values| { + crate::transient_0::encode_string(value, writer, shared_values)?; + ::std::io::Result::Ok(()) + }, |value, writer, shared_values| { + crate::transient_0::encode_string(value, writer, shared_values)?; + ::std::io::Result::Ok(()) + })?; + ::std::io::Result::Ok(()) + })?; + ::std::io::Result::Ok(()) + })?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_generic_native(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_int_32(reader, shared_values)?), |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_string(reader, shared_values)?))?; + let b = crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok({ + let is_some = crate::transient_0::decode_bool(reader, shared_values)?; + if is_some { + ::std::option::Option::Some(crate::transient_0::decode_string(reader, shared_values)?) + } else { + ::std::option::Option::None + } + }), |reader, shared_values| ::std::io::Result::Ok(crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok({ + let is_some = crate::transient_0::decode_bool(reader, shared_values)?; + if is_some { + ::std::option::Option::Some(crate::transient_0::decode_string(reader, shared_values)?) + } else { + ::std::option::Option::None + } + }), |reader, shared_values| ::std::io::Result::Ok(crate::data::transient_0::decode_generic_native(reader, shared_values, |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_string(reader, shared_values)?), |reader, shared_values| ::std::io::Result::Ok(crate::transient_0::decode_string(reader, shared_values)?))?))?))?; + ::std::io::Result::Ok(crate::data::StructWithGenericNative { a: a, b: b }) +} + +pub fn encode_struct_with_box(value: &crate::data::StructWithBox, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::data::transient_0::encode_struct_with_int_32((&value.inner).as_ref(), writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_box(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let inner = ::std::boxed::Box::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); + ::std::io::Result::Ok(crate::data::StructWithBox { inner: inner }) +} + +pub fn encode_struct_with_list_of_shared(value: &crate::data::StructWithListOfShared, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + { + crate::transient_0::encode_int_64(&(((&value.inner).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; + for element in &value.inner { + { + let ptr = ::std::sync::Arc::as_ptr(&element) as ::core::primitive::usize; + match (shared_values.get(&ptr)).copied() { + ::std::option::Option::Some(id) => { + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + }, + ::std::option::Option::None => { + let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + shared_values.insert(ptr, id); + crate::data::transient_0::encode_struct_with_int_32(element.as_ref(), writer, shared_values)?; + }, + }; + }; + }; + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_list_of_shared(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let inner = { + let len = crate::transient_0::decode_int_64(reader, shared_values)?; + let mut elements = ::std::vec::Vec::with_capacity((len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?); + for _ in 0..len { + elements.push({ + let id = crate::transient_0::decode_int_64(reader, shared_values)?; + if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { + ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? + } else { + let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); + shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); + decoded_value + } + }); + }; + elements + }; + ::std::io::Result::Ok(crate::data::StructWithListOfShared { inner: inner }) +} + +pub fn encode_struct_with_different_shared_types(value: &crate::data::StructWithDifferentSharedTypes, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + { + let ptr = ::std::sync::Arc::as_ptr(&&value.a) as ::core::primitive::usize; + match (shared_values.get(&ptr)).copied() { + ::std::option::Option::Some(id) => { + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + }, + ::std::option::Option::None => { + let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + shared_values.insert(ptr, id); + crate::data::transient_0::encode_struct_with_int_32((&value.a).as_ref(), writer, shared_values)?; + }, + }; + }; + { + let ptr = ::std::sync::Arc::as_ptr(&&value.b) as ::core::primitive::usize; + match (shared_values.get(&ptr)).copied() { + ::std::option::Option::Some(id) => { + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + }, + ::std::option::Option::None => { + let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + shared_values.insert(ptr, id); + crate::data::transient_0::encode_struct_with_int_64((&value.b).as_ref(), writer, shared_values)?; + }, + }; + }; + { + let ptr = ::std::sync::Arc::as_ptr(&&value.c) as ::core::primitive::usize; + match (shared_values.get(&ptr)).copied() { + ::std::option::Option::Some(id) => { + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + }, + ::std::option::Option::None => { + let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + shared_values.insert(ptr, id); + crate::data::transient_0::encode_struct_with_int_32((&value.c).as_ref(), writer, shared_values)?; + }, + }; + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_different_shared_types(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = { + let id = crate::transient_0::decode_int_64(reader, shared_values)?; + if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { + ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? + } else { + let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); + shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); + decoded_value + } + }; + let b = { + let id = crate::transient_0::decode_int_64(reader, shared_values)?; + if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { + ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? + } else { + let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_64(reader, shared_values)?); + shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); + decoded_value + } + }; + let c = { + let id = crate::transient_0::decode_int_64(reader, shared_values)?; + if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { + ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? + } else { + let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); + shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); + decoded_value + } + }; + ::std::io::Result::Ok(crate::data::StructWithDifferentSharedTypes { a: a, b: b, c: c }) +} + +pub fn encode_struct_with_shared_sum_and_variant(value: &crate::data::StructWithSharedSumAndVariant, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + { + let ptr = ::std::sync::Arc::as_ptr(&&value.a) as ::core::primitive::usize; + match (shared_values.get(&ptr)).copied() { + ::std::option::Option::Some(id) => { + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + }, + ::std::option::Option::None => { + let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + shared_values.insert(ptr, id); + crate::data::transient_0::encode_sum_with_variants((&value.a).as_ref(), writer, shared_values)?; + }, + }; + }; + { + let ptr = ::std::sync::Arc::as_ptr(&&value.b) as ::core::primitive::usize; + match (shared_values.get(&ptr)).copied() { + ::std::option::Option::Some(id) => { + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + }, + ::std::option::Option::None => { + let id = ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?; + crate::transient_0::encode_int_64(&id, writer, shared_values)?; + shared_values.insert(ptr, id); + crate::data::transient_0::encode_variant_one((&value.b).as_ref(), writer, shared_values)?; + }, + }; + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_shared_sum_and_variant(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = { + let id = crate::transient_0::decode_int_64(reader, shared_values)?; + if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { + ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? + } else { + let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_sum_with_variants(reader, shared_values)?); + shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); + decoded_value + } + }; + let b = { + let id = crate::transient_0::decode_int_64(reader, shared_values)?; + if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { + ((::std::sync::Arc::clone(&shared_values[(::core::primitive::usize::try_from(id)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? + } else { + let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?); + shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); + decoded_value + } + }; + ::std::io::Result::Ok(crate::data::StructWithSharedSumAndVariant { a: a, b: b }) +} diff --git a/examples/16-transient-0/output/rust/src/gen/transient_0.rs b/examples/16-transient-0/output/rust/src/gen/transient_0.rs new file mode 100644 index 0000000..b65ab95 --- /dev/null +++ b/examples/16-transient-0/output/rust/src/gen/transient_0.rs @@ -0,0 +1,88 @@ +// Generated by hobgoblin. + +pub type Encode = fn(&T, &mut TWrite, &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()>; + +pub type Decode = fn(&mut TRead, &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::; + +pub fn encode_bool(value: &::core::primitive::bool, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + if *value { + writer.write_all(&1u8.to_le_bytes())?; + } else { + writer.write_all(&0u8.to_le_bytes())?; + }; + ::std::io::Result::Ok(()) +} + +pub fn decode_bool(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::bool> { + let int_value = { + let bytes = { + let mut bytes = [0; 1]; + reader.read_exact(&mut bytes)?; + bytes + }; + u8::from_le_bytes(bytes) + }; + ::std::io::Result::Ok(if int_value == 0 { + false + } else { + true + }) +} + +pub fn encode_int_8(value: &::core::primitive::i8, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + writer.write_all(&value.to_le_bytes())?; + ::std::io::Result::Ok(()) +} + +pub fn decode_int_8(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::i8> { + let bytes = { + let mut bytes = [0; 1]; + reader.read_exact(&mut bytes)?; + bytes + }; + ::std::io::Result::Ok(::core::primitive::i8::from_le_bytes(bytes)) +} + +pub fn encode_int_32(value: &::core::primitive::i32, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + writer.write_all(&value.to_le_bytes())?; + ::std::io::Result::Ok(()) +} + +pub fn decode_int_32(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::i32> { + let bytes = { + let mut bytes = [0; 4]; + reader.read_exact(&mut bytes)?; + bytes + }; + ::std::io::Result::Ok(::core::primitive::i32::from_le_bytes(bytes)) +} + +pub fn encode_int_64(value: &::core::primitive::i64, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + writer.write_all(&value.to_le_bytes())?; + ::std::io::Result::Ok(()) +} + +pub fn decode_int_64(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::core::primitive::i64> { + let bytes = { + let mut bytes = [0; 8]; + reader.read_exact(&mut bytes)?; + bytes + }; + ::std::io::Result::Ok(::core::primitive::i64::from_le_bytes(bytes)) +} + +pub fn encode_string(value: &::std::string::String, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_64(&((value.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; + writer.write_all(value.as_bytes())?; + ::std::io::Result::Ok(()) +} + +pub fn decode_string(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result::<::std::string::String> { + let len = crate::transient_0::decode_int_64(reader, shared_values)?; + let bytes = { + let mut bytes = vec![0u8; (len.try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?]; + reader.read_exact(&mut bytes)?; + bytes + }; + ::std::io::Result::Ok((::std::string::String::from_utf8(bytes)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?) +} diff --git a/examples/16-transient-0/output/rust/src/lib.rs b/examples/16-transient-0/output/rust/src/lib.rs new file mode 100644 index 0000000..a51afff --- /dev/null +++ b/examples/16-transient-0/output/rust/src/lib.rs @@ -0,0 +1,353 @@ +pub mod data; +pub mod transient_0; + +#[cfg(test)] +mod test { + use std::any::Any; + use std::io::Cursor; + use std::path::PathBuf; + use std::sync::Arc; + use std::collections::HashMap; + use super::data::{EnumWithVariants, GenericNative, Native, StructSingleton, StructWithBool, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithGenericNative, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithNative, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; + + #[test] + fn struct_singleton() { + let value = StructSingleton; + + assert_round_trip_encoding( + "StructSingleton", + value, + super::data::transient_0::encode_struct_singleton, + super::data::transient_0::decode_struct_singleton, + ); + } + + #[test] + fn struct_with_bool() { + let value = StructWithBool { a: true, b: false }; + + assert_round_trip_encoding( + "StructWithBool", + value, + super::data::transient_0::encode_struct_with_bool, + super::data::transient_0::decode_struct_with_bool, + ); + } + + #[test] + fn struct_with_int_8() { + let value = StructWithInt8 { a: 10, b: 25 }; + + assert_round_trip_encoding( + "StructWithInt8", + value, + super::data::transient_0::encode_struct_with_int_8, + super::data::transient_0::decode_struct_with_int_8, + ); + } + + #[test] + fn struct_with_int_32() { + let value = StructWithInt32 { a: 10, b: 25 }; + + assert_round_trip_encoding( + "StructWithInt32", + value, + super::data::transient_0::encode_struct_with_int_32, + super::data::transient_0::decode_struct_with_int_32, + ); + } + + #[test] + fn struct_with_int_64() { + let value = StructWithInt64 { a: 10, b: 25 }; + + assert_round_trip_encoding( + "StructWithInt64", + value, + super::data::transient_0::encode_struct_with_int_64, + super::data::transient_0::decode_struct_with_int_64, + ); + } + + #[test] + fn struct_with_string() { + let value = StructWithString { a: "abc".to_string(), b: "def".to_string() }; + + assert_round_trip_encoding( + "StructWithString", + value, + super::data::transient_0::encode_struct_with_string, + super::data::transient_0::decode_struct_with_string, + ); + } + + #[test] + fn struct_with_struct() { + let value = StructWithStruct { inner: StructWithInt32 { a: 10, b: 25 }, c: 42 }; + + assert_round_trip_encoding( + "StructWithStruct", + value, + super::data::transient_0::encode_struct_with_struct, + super::data::transient_0::decode_struct_with_struct, + ); + } + + #[test] + fn struct_with_list() { + let value = StructWithList { + a: vec![10, 25], + b: vec![ + StructWithInt32 { a: 42, b: 47 }, + StructWithInt32 { a: 52, b: 57 }, + StructWithInt32 { a: 62, b: 67 }, + ], + }; + + assert_round_trip_encoding( + "StructWithList", + value, + super::data::transient_0::encode_struct_with_list, + super::data::transient_0::decode_struct_with_list, + ); + } + + #[test] + fn struct_with_option_none() { + let value = StructWithOption { + a: None, + b: None, + }; + + assert_round_trip_encoding( + "StructWithOption_None", + value, + super::data::transient_0::encode_struct_with_option, + super::data::transient_0::decode_struct_with_option, + ); + } + + #[test] + fn struct_with_option_some() { + let value = StructWithOption { + a: Some(10), + b: Some(StructWithInt32 { a: 42, b: 47 }), + }; + + assert_round_trip_encoding( + "StructWithOption_Some", + value, + super::data::transient_0::encode_struct_with_option, + super::data::transient_0::decode_struct_with_option, + ); + } + + #[test] + fn enum_with_variants() { + assert_round_trip_encoding( + "EnumWithVariants_zero", + EnumWithVariants::Zero, + super::data::transient_0::encode_enum_with_variants, + super::data::transient_0::decode_enum_with_variants, + ); + + assert_round_trip_encoding( + "EnumWithVariants_one", + EnumWithVariants::One, + super::data::transient_0::encode_enum_with_variants, + super::data::transient_0::decode_enum_with_variants, + ); + + assert_round_trip_encoding( + "EnumWithVariants_two", + EnumWithVariants::Two, + super::data::transient_0::encode_enum_with_variants, + super::data::transient_0::decode_enum_with_variants, + ); + } + + #[test] + fn struct_with_enum() { + let value = StructWithEnum { inner: EnumWithVariants::One, c: 42 }; + + assert_round_trip_encoding( + "StructWithEnum", + value, + super::data::transient_0::encode_struct_with_enum, + super::data::transient_0::decode_struct_with_enum, + ); + } + + #[test] + fn sum_with_variants() { + assert_round_trip_encoding( + "SumWithVariants_VariantOne", + SumWithVariants::VariantOne(VariantOne { a: 10 }), + super::data::transient_0::encode_sum_with_variants, + super::data::transient_0::decode_sum_with_variants, + ); + + assert_round_trip_encoding( + "SumWithVariants_VariantTwo", + SumWithVariants::VariantTwo(VariantTwo { a: 25 }), + super::data::transient_0::encode_sum_with_variants, + super::data::transient_0::decode_sum_with_variants, + ); + } + + #[test] + fn sum_with_boxed_variants() { + assert_round_trip_encoding( + "SumWithBoxedVariants_VariantOne", + SumWithBoxedVariants::VariantOne(Box::new(VariantOne { a: 10 })), + super::data::transient_0::encode_sum_with_boxed_variants, + super::data::transient_0::decode_sum_with_boxed_variants, + ); + + assert_round_trip_encoding( + "SumWithBoxedVariants_VariantTwo", + SumWithBoxedVariants::VariantTwo(Box::new(VariantTwo { a: 25 })), + super::data::transient_0::encode_sum_with_boxed_variants, + super::data::transient_0::decode_sum_with_boxed_variants, + ); + } + + #[test] + fn struct_with_sum() { + let value = StructWithSum { + inner: SumWithVariants::VariantTwo(VariantTwo { a: 25 }), + b: 42, + }; + + assert_round_trip_encoding( + "StructWithSum", + value, + super::data::transient_0::encode_struct_with_sum, + super::data::transient_0::decode_struct_with_sum, + ); + } + + #[test] + fn struct_with_native() { + let value = StructWithNative { + a: Native { a: 10, b: 25 }, + }; + + assert_round_trip_encoding( + "StructWithNative", + value, + super::data::transient_0::encode_struct_with_native, + super::data::transient_0::decode_struct_with_native, + ); + } + + #[test] + fn struct_with_generic_native() { + let value = StructWithGenericNative { + a: GenericNative { a: 10, b: "x1".to_string() }, + b: GenericNative { + a: Some("x2".to_string()), + b: GenericNative { + a: Some("x3".to_string()), + b: GenericNative { a: "x4".to_string(), b: "x5".to_string() }, + }, + }, + }; + + assert_round_trip_encoding( + "StructWithGenericNative", + value, + super::data::transient_0::encode_struct_with_generic_native, + super::data::transient_0::decode_struct_with_generic_native, + ); + } + + #[test] + fn struct_with_box() { + let value = StructWithBox { + inner: Box::new(StructWithInt32 { a: 10, b: 25 }), + }; + + assert_round_trip_encoding( + "StructWithBox", + value, + super::data::transient_0::encode_struct_with_box, + super::data::transient_0::decode_struct_with_box, + ); + } + + #[test] + fn struct_with_list_of_shared() { + let a = Arc::new(StructWithInt32 { a: 10, b: 25 }); + let b = Arc::new(StructWithInt32 { a: 42, b: 47 }); + + let value = StructWithListOfShared { + inner: vec![Arc::clone(&a), Arc::clone(&a), Arc::clone(&b), a, b], + }; + + let decoded_value = assert_round_trip_encoding( + "StructWithListOfShared", + value, + super::data::transient_0::encode_struct_with_list_of_shared, + super::data::transient_0::decode_struct_with_list_of_shared, + ); + assert!(Arc::ptr_eq(&decoded_value.inner[0], &decoded_value.inner[1])); + assert!(Arc::ptr_eq(&decoded_value.inner[0], &decoded_value.inner[3])); + assert!(Arc::ptr_eq(&decoded_value.inner[2], &decoded_value.inner[4])); + } + + #[test] + fn struct_with_different_shared_types() { + let a = Arc::new(StructWithInt32 { a: 10, b: 25 }); + let b = Arc::new(StructWithInt64 { a: 42, b: 47 }); + let c = Arc::new(StructWithInt32 { a: 52, b: 57 }); + + let value = StructWithDifferentSharedTypes { a, b, c }; + + assert_round_trip_encoding( + "StructWithDifferentSharedTypes", + value, + super::data::transient_0::encode_struct_with_different_shared_types, + super::data::transient_0::decode_struct_with_different_shared_types, + ); + } + + #[test] + fn struct_with_shared_sum_and_variant() { + let a = Arc::new(SumWithVariants::VariantOne(VariantOne { a: 10 })); + let b = Arc::new(VariantOne { a: 10 }); + + let value = StructWithSharedSumAndVariant { a, b }; + + assert_round_trip_encoding( + "StructWithSharedSumAndVariant", + value, + super::data::transient_0::encode_struct_with_shared_sum_and_variant, + super::data::transient_0::decode_struct_with_shared_sum_and_variant, + ); + } + + fn assert_round_trip_encoding( + name: &str, + value: T, + encode: impl Fn(&T, &mut Cursor>, &mut HashMap) -> std::io::Result<()>, + decode: impl Fn(&mut Cursor>, &mut Vec>) -> std::io::Result, + ) -> T { + let mut bytes = Cursor::new(Vec::new()); + encode(&value, &mut bytes, &mut HashMap::new()).unwrap(); + + let output_dir = std::env::var("HOBGOBLIN_OUTPUT_DIR").unwrap(); + let transient_0_output_dir = PathBuf::from(output_dir).join("transient-0"); + std::fs::create_dir_all(&transient_0_output_dir).unwrap(); + let transient_0_output_path = transient_0_output_dir.join(name); + std::fs::write(transient_0_output_path, bytes.get_ref()).unwrap(); + + bytes.set_position(0); + let decoded_value = decode(&mut bytes, &mut Vec::new()).unwrap(); + + assert_eq!(value, decoded_value); + + decoded_value + } +} diff --git a/examples/16-transient-0/output/rust/src/transient_0.rs b/examples/16-transient-0/output/rust/src/transient_0.rs new file mode 100644 index 0000000..8b2b800 --- /dev/null +++ b/examples/16-transient-0/output/rust/src/transient_0.rs @@ -0,0 +1 @@ +include!("./gen/transient_0.rs"); diff --git a/examples/16-transient-0/src/data.hob b/examples/16-transient-0/src/data.hob new file mode 100644 index 0000000..df96916 --- /dev/null +++ b/examples/16-transient-0/src/data.hob @@ -0,0 +1,111 @@ +struct StructSingleton { + singleton; +} + +struct StructWithBool { + field a: Bool; + field b: Bool; +} + +struct StructWithInt8 { + field a: Int8; + field b: Int8; +} + +struct StructWithInt32 { + field a: Int32; + field b: Int32; +} + +struct StructWithInt64 { + field a: Int64; + field b: Int64; +} + +struct StructWithString { + field a: String; + field b: String; +} + +struct StructWithStruct { + field inner: StructWithInt32; + field c: Int32; +} + +struct StructWithList { + field a: List[Int64]; + field b: List[StructWithInt32]; +} + +struct StructWithOption { + field a: Option[Int64]; + field b: Option[StructWithInt32]; +} + +enum EnumWithVariants { + variant zero; + variant one; + variant two; +} + +struct StructWithEnum { + field inner: EnumWithVariants; + field c: Int32; +} + +sum SumWithVariants { + variant VariantOne; + variant VariantTwo; +} + +struct VariantOne { + field a: Int32; +} + +struct VariantTwo { + field a: Int64; +} + +sum SumWithBoxedVariants { + variant Box[VariantOne]; + variant Box[VariantTwo]; +} + +struct StructWithSum { + field inner: SumWithVariants; + field b: Int32; +} + +native Native { +} + +struct StructWithNative { + field a: Native; +} + +native GenericNative[A, B] { +} + +struct StructWithGenericNative { + field a: GenericNative[Int32, String]; + field b: GenericNative[Option[String], GenericNative[Option[String], GenericNative[String, String]]]; +} + +struct StructWithBox { + field inner: Box[StructWithInt32]; +} + +struct StructWithListOfShared { + field inner: List[Shared[StructWithInt32]]; +} + +struct StructWithDifferentSharedTypes { + field a: Shared[StructWithInt32]; + field b: Shared[StructWithInt64]; + field c: Shared[StructWithInt32]; +} + +struct StructWithSharedSumAndVariant { + field a: Shared[SumWithVariants]; + field b: Shared[VariantOne]; +} -- cgit v1.2.3