From f7b24ab27873f4abe3dc2df01450586206a4c6ac Mon Sep 17 00:00:00 2001 From: "marcio.andrade" Date: Wed, 9 Apr 2025 10:21:06 -0300 Subject: [PATCH 1/3] Fix optional primitive decoder. --- .../co/real_logic/sbe/generation/rust/RustGenerator.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 16f6e40cb..23247723e 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 @@ -894,6 +894,13 @@ private static void generatePrimitiveOptionalDecoder( formatFunctionName(name), rustPrimitiveType); + if (fieldToken.version() > 0) + { + indent(sb, level + 1, "if self.acting_version() < %d {\n", fieldToken.version()); + indent(sb, level + 2, "return None;\n"); + indent(sb, level + 1, "}\n\n"); + } + indent(sb, level + 1, "let value = self.get_buf().get_%s_at(self.%s);\n", rustPrimitiveType, getBufOffset(fieldToken)); From 2703c9bee504daec13b86ba5d13399a89759b16c Mon Sep 17 00:00:00 2001 From: "marcio.andrade" Date: Thu, 10 Apr 2025 12:06:31 -0300 Subject: [PATCH 2/3] Add tests. --- build.gradle | 1 + rust/Cargo.toml | 1 + rust/tests/issue_1060_test.rs | 40 +++++++++++++++++++++++ sbe-tool/src/test/resources/issue1060.xml | 18 ++++++++++ 4 files changed, 60 insertions(+) create mode 100644 rust/tests/issue_1060_test.rs create mode 100644 sbe-tool/src/test/resources/issue1060.xml diff --git a/build.gradle b/build.gradle index b0ac62184..51f93e13e 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/issue1060.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 2d4f3d4a4..a4311addb 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_1060 = { path = "../generated/rust/issue1060" } 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/rust/tests/issue_1060_test.rs b/rust/tests/issue_1060_test.rs new file mode 100644 index 000000000..c42062ba6 --- /dev/null +++ b/rust/tests/issue_1060_test.rs @@ -0,0 +1,40 @@ +use issue_1060::{ + issue_1060_codec, + issue_1060_codec::{Issue1060Decoder, Issue1060Encoder}, + *, +}; + +#[test] +fn decode_optional_primitive_field() { + let mut buffer = vec![0u8; 256]; + + // Create a message with `field` set. + let mut encoder = Issue1060Encoder::default().wrap( + WriteBuf::new(&mut buffer), + message_header_codec::ENCODED_LENGTH, + ); + encoder.field(10); + + // Drop encoder to drop the mut reference for the buffer. + drop(encoder); + + // Create a decoder for the message, but stating that the version is 1, instead of 2 + // which is the acting version for `field`. Thus, `field()` must return `None`. + let decoder = Issue1060Decoder::default().wrap( + ReadBuf::new(&mut buffer), + message_header_codec::ENCODED_LENGTH, + issue_1060_codec::SBE_BLOCK_LENGTH, + 1, + ); + assert!(decoder.field().is_none()); + + // Create a decoder for the message, but stating that the version is 1, instead of 2 + // which is the acting version for `field`. Thus, `field()` must return `None`. + let decoder = Issue1060Decoder::default().wrap( + ReadBuf::new(&mut buffer), + message_header_codec::ENCODED_LENGTH, + issue_1060_codec::SBE_BLOCK_LENGTH, + 2, + ); + assert_eq!(decoder.field(), Some(10)); +} diff --git a/sbe-tool/src/test/resources/issue1060.xml b/sbe-tool/src/test/resources/issue1060.xml new file mode 100644 index 000000000..6f4bd8009 --- /dev/null +++ b/sbe-tool/src/test/resources/issue1060.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + \ No newline at end of file From 912373cb791e5fcb8a6560bb183a5cb3652e0c97 Mon Sep 17 00:00:00 2001 From: "marcio.andrade" Date: Thu, 10 Apr 2025 12:51:48 -0300 Subject: [PATCH 3/3] Update issue number. --- build.gradle | 2 +- rust/Cargo.toml | 2 +- .../{issue_1060_test.rs => issue_1066_test.rs} | 16 ++++++++-------- .../resources/{issue1060.xml => issue1066.xml} | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) rename rust/tests/{issue_1060_test.rs => issue_1066_test.rs} (73%) rename sbe-tool/src/test/resources/{issue1060.xml => issue1066.xml} (91%) diff --git a/build.gradle b/build.gradle index 51f93e13e..1ca1df255 100644 --- a/build.gradle +++ b/build.gradle @@ -672,7 +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/issue1060.xml', + 'sbe-tool/src/test/resources/issue1066.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 a4311addb..65def2751 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -17,7 +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_1060 = { path = "../generated/rust/issue1060" } +issue_1066 = { path = "../generated/rust/issue1066" } 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/rust/tests/issue_1060_test.rs b/rust/tests/issue_1066_test.rs similarity index 73% rename from rust/tests/issue_1060_test.rs rename to rust/tests/issue_1066_test.rs index c42062ba6..43f7278eb 100644 --- a/rust/tests/issue_1060_test.rs +++ b/rust/tests/issue_1066_test.rs @@ -1,6 +1,6 @@ -use issue_1060::{ - issue_1060_codec, - issue_1060_codec::{Issue1060Decoder, Issue1060Encoder}, +use issue_1066::{ + issue_1066_codec, + issue_1066_codec::{Issue1066Decoder, Issue1066Encoder}, *, }; @@ -9,7 +9,7 @@ fn decode_optional_primitive_field() { let mut buffer = vec![0u8; 256]; // Create a message with `field` set. - let mut encoder = Issue1060Encoder::default().wrap( + let mut encoder = Issue1066Encoder::default().wrap( WriteBuf::new(&mut buffer), message_header_codec::ENCODED_LENGTH, ); @@ -20,20 +20,20 @@ fn decode_optional_primitive_field() { // Create a decoder for the message, but stating that the version is 1, instead of 2 // which is the acting version for `field`. Thus, `field()` must return `None`. - let decoder = Issue1060Decoder::default().wrap( + let decoder = Issue1066Decoder::default().wrap( ReadBuf::new(&mut buffer), message_header_codec::ENCODED_LENGTH, - issue_1060_codec::SBE_BLOCK_LENGTH, + issue_1066_codec::SBE_BLOCK_LENGTH, 1, ); assert!(decoder.field().is_none()); // Create a decoder for the message, but stating that the version is 1, instead of 2 // which is the acting version for `field`. Thus, `field()` must return `None`. - let decoder = Issue1060Decoder::default().wrap( + let decoder = Issue1066Decoder::default().wrap( ReadBuf::new(&mut buffer), message_header_codec::ENCODED_LENGTH, - issue_1060_codec::SBE_BLOCK_LENGTH, + issue_1066_codec::SBE_BLOCK_LENGTH, 2, ); assert_eq!(decoder.field(), Some(10)); diff --git a/sbe-tool/src/test/resources/issue1060.xml b/sbe-tool/src/test/resources/issue1066.xml similarity index 91% rename from sbe-tool/src/test/resources/issue1060.xml rename to sbe-tool/src/test/resources/issue1066.xml index 6f4bd8009..a24e45b03 100644 --- a/sbe-tool/src/test/resources/issue1060.xml +++ b/sbe-tool/src/test/resources/issue1066.xml @@ -1,4 +1,4 @@ - @@ -11,7 +11,7 @@ - +