From 6d3f6b629ddef538839a684451ee4e6ce9b0cd70 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Thu, 21 Mar 2024 10:47:20 -0500 Subject: [PATCH] [Rust] Updated RustGenerator.generatePrimitiveOptionalDecoder() to resolve Issue #972 (#981) Co-authored-by: Michael Ward --- build.gradle | 1 + rust/Cargo.toml | 1 + rust/tests/issue_972_test.rs | 37 +++++++++++++++++++ .../sbe/generation/rust/RustGenerator.java | 8 ---- sbe-tool/src/test/resources/issue972.xml | 25 +++++++++++++ 5 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 rust/tests/issue_972_test.rs create mode 100644 sbe-tool/src/test/resources/issue972.xml diff --git a/build.gradle b/build.gradle index bb0605be01..a8d9b00dfb 100644 --- a/build.gradle +++ b/build.gradle @@ -587,6 +587,7 @@ tasks.register('generateRustTestCodecs', JavaExec) { 'sbe.validation.xsd': validationXsdPath) args = ['sbe-tool/src/test/resources/issue435.xml', 'sbe-tool/src/test/resources/issue895.xml', + 'sbe-tool/src/test/resources/issue972.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 020747c06d..6d47fc3746 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -13,6 +13,7 @@ examples_uk_co_real_logic_sbe_benchmarks_fix = { path = "../generated/rust/uk_co issue_435 = { path = "../generated/rust/issue435" } issue_895 = { path = "../generated/rust/issue895" } +issue_972 = { path = "../generated/rust/issue972" } baseline_bigendian = { path = "../generated/rust/baseline-bigendian" } nested_composite_name = { path = "../generated/rust/nested-composite-name" } diff --git a/rust/tests/issue_972_test.rs b/rust/tests/issue_972_test.rs new file mode 100644 index 0000000000..bc3a938247 --- /dev/null +++ b/rust/tests/issue_972_test.rs @@ -0,0 +1,37 @@ +use issue_972::*; + +fn create_encoder(buffer: &mut Vec) -> Issue972Encoder { + let issue_972 = Issue972Encoder::default().wrap( + WriteBuf::new(buffer.as_mut_slice()), + message_header_codec::ENCODED_LENGTH, + ); + let mut header = issue_972.header(0); + header.parent().unwrap() +} + +#[test] +fn round_trip() -> SbeResult<()> { + // encode... + let mut buffer = vec![0u8; 256]; + let encoder = create_encoder(&mut buffer); + let mut new_composite_encoder = encoder.new_field_encoder(); + new_composite_encoder.f1(2007); + new_composite_encoder.f2(2012); + + // decode... + let buf = ReadBuf::new(buffer.as_slice()); + let header = MessageHeaderDecoder::default().wrap(buf, 0); + assert_eq!(SBE_BLOCK_LENGTH, header.block_length()); + assert_eq!(SBE_SCHEMA_VERSION, header.version()); + assert_eq!(SBE_TEMPLATE_ID, header.template_id()); + assert_eq!(SBE_SCHEMA_ID, header.schema_id()); + + let decoder = Issue972Decoder::default().header(header); + if let Either::Right(composite) = decoder.new_field_decoder() { + assert_eq!(2007, composite.f1().unwrap()); + assert_eq!(2012, composite.f2().unwrap()); + } else { + panic!() + } + Ok(()) +} 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 b1620446a2..d30bd318f6 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 @@ -766,18 +766,10 @@ private static void generatePrimitiveOptionalDecoder( formatFunctionName(name), rustPrimitiveType); - if (fieldToken.version() > 0) - { - indent(sb, level + 1, "if self.acting_version > 0 && 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)); - final String literal = generateRustLiteral(primitiveType, encoding.applicableNullValue().toString()); if (literal.endsWith("::NAN")) { diff --git a/sbe-tool/src/test/resources/issue972.xml b/sbe-tool/src/test/resources/issue972.xml new file mode 100644 index 0000000000..f64bd616be --- /dev/null +++ b/sbe-tool/src/test/resources/issue972.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file