diff --git a/build.gradle b/build.gradle index b0ac62184a..d1642d37b1 100644 --- a/build.gradle +++ b/build.gradle @@ -672,6 +672,7 @@ tasks.register('generateRustTestCodecs', JavaExec) { 'sbe-tool/src/test/resources/issue984.xml', 'sbe-tool/src/test/resources/issue987.xml', 'sbe-tool/src/test/resources/issue1028.xml', + 'sbe-tool/src/test/resources/issue1057.xml', 'sbe-tool/src/test/resources/fixed-sized-primitive-array-types.xml', 'sbe-tool/src/test/resources/example-bigendian-test-schema.xml', 'sbe-tool/src/test/resources/nested-composite-name.xml', diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 2d4f3d4a49..e09cacf21c 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -17,6 +17,7 @@ issue_972 = { path = "../generated/rust/issue972" } issue_984 = { path = "../generated/rust/issue984" } issue_987 = { path = "../generated/rust/issue987" } issue_1028 = { path = "../generated/rust/issue1028" } +issue_1057 = { path = "../generated/rust/issue1057" } baseline_bigendian = { path = "../generated/rust/baseline-bigendian" } nested_composite_name = { path = "../generated/rust/nested-composite-name" } fixed_sized_primitive_array = { path = "../generated/rust/fixed_sized_primitive_array" } diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java index 32f1633178..3ec237e247 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java @@ -1674,7 +1674,9 @@ private static void generateCompositeDecoder( indent(out, 2, "offset: usize,\n"); indent(out, 1, "}\n\n"); - final int version = tokens.get(1).version(); // skip BEGIN_COMPOSITE + // The version of the composite type is the greatest version of its fields. + final int version = tokens.stream().mapToInt(Token::version).max().orElse(0); + appendImplReaderForComposite(schemaVersionType, version, out, 1, decoderName); // impl<'a, P> start diff --git a/sbe-tool/src/test/resources/issue1057.xml b/sbe-tool/src/test/resources/issue1057.xml new file mode 100644 index 0000000000..8e89fcfade --- /dev/null +++ b/sbe-tool/src/test/resources/issue1057.xml @@ -0,0 +1,32 @@ + + + + 0 + + + + + + + + + + + + + + + + + + \ No newline at end of file