From dee1fb5482a3d1e348e589fab216f939e699cade Mon Sep 17 00:00:00 2001 From: Adam Krieg Date: Sat, 17 Dec 2022 22:04:22 -0500 Subject: [PATCH 1/2] Fixed several issues: #1: LibRsDef explicitly us crate:: to disambiguate from built in mods like bool #2: Added acting_version field to Composite structs to fix compilation errors when using Composite structs. This is an incomplete implementation because the parent doesn't pass the acting_version to the composite because you need to change the signature of wrap(parent, offset) to include the acting_version, so this version just ensures that if the acting_version isn't set on the composite, it disregards the version check. #3: fixed primitiveArrayDecoder to return an empty array of the right size if less than version required. --- .../sbe/generation/rust/LibRsDef.java | 2 +- .../sbe/generation/rust/RustGenerator.java | 20 ++++++++++--------- .../sbe/generation/rust/RustUtil.java | 4 ++-- .../sbe/generation/rust/RustUtilTest.java | 2 ++ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/LibRsDef.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/LibRsDef.java index 419f155e48..3c1c85926a 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/LibRsDef.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/LibRsDef.java @@ -81,7 +81,7 @@ void generate() throws IOException // add re-export of modules for (final String module : modules) { - indent(libRs, 0, "pub use %s::*;\n", toLowerSnakeCase(module)); + indent(libRs, 0, "pub use crate::%s::*;\n", toLowerSnakeCase(module)); } indent(libRs, 0, "\n"); 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 fe58ce4874..0f68867f65 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 @@ -544,7 +544,7 @@ private static void generateCompositeDecoder( decoderName, decoderTypeName); - indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version()); indent(sb, level + 2, "return Either::Left(self);\n"); indent(sb, level + 1, "}\n\n"); @@ -578,7 +578,7 @@ private static void generateBitSetDecoder( if (bitsetToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", bitsetToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", bitsetToken.version()); indent(sb, level + 2, "return %s::default();\n", structTypeName); indent(sb, level + 1, "}\n\n"); } @@ -638,8 +638,8 @@ private static void generatePrimitiveArrayDecoder( if (fieldToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version()); - indent(sb, level + 2, "return [%s, %d];\n", encoding.applicableNullValue(), arrayLength); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version()); + indent(sb, level + 2, "return [%s; %d];\n", encoding.applicableNullValue(), arrayLength); indent(sb, level + 1, "}\n\n"); } @@ -739,7 +739,7 @@ private static void generatePrimitiveOptionalDecoder( if (fieldToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version()); + 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"); } @@ -792,7 +792,7 @@ private static void generatePrimitiveRequiredDecoder( if (fieldToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version()); indent(sb, level + 2, "return %s;\n", generateRustLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString())); indent(sb, level + 1, "}\n\n"); @@ -941,7 +941,7 @@ static void generateDecoderVarData( { if (varDataToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version()); indent(sb, level + 2, "return (self.parent.as_ref().unwrap().get_limit(), 0);\n"); indent(sb, level + 1, "}\n\n"); } @@ -956,7 +956,7 @@ static void generateDecoderVarData( { if (varDataToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version()); indent(sb, level + 2, "return (self.get_limit(), 0);\n"); indent(sb, level + 1, "}\n\n"); } @@ -975,7 +975,7 @@ static void generateDecoderVarData( if (varDataToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version()); indent(sb, level + 2, "return &[] as &[u8];\n"); indent(sb, level + 1, "}\n\n"); } @@ -1356,6 +1356,7 @@ private static void generateCompositeEncoder( indent(out, 1, "pub struct %s

{\n", encoderName); indent(out, 2, "parent: Option

,\n"); indent(out, 2, "offset: usize,\n"); + indent(out, 2, "acting_version: usize,\n"); indent(out, 1, "}\n\n"); appendImplWriterForComposite(out, 1, encoderName); @@ -1417,6 +1418,7 @@ private static void generateCompositeDecoder( indent(out, 1, "pub struct %s

{\n", decoderName); indent(out, 2, "parent: Option

,\n"); indent(out, 2, "offset: usize,\n"); + indent(out, 2, "acting_version: usize,\n"); indent(out, 1, "}\n\n"); appendImplReaderForComposite(out, 1, decoderName); diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustUtil.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustUtil.java index 4f71f0de84..13fa241a40 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustUtil.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustUtil.java @@ -260,7 +260,7 @@ private static String sanitizeMethodOrProperty(final String name) { if (shadowsKeyword(name)) { - return name + "_"; + return "r#" + name; } else { @@ -310,7 +310,7 @@ enum ReservedKeyword { for (final ReservedKeyword value : ReservedKeyword.values()) { - LOWER_CASE_NAMES.add(value.name()); + LOWER_CASE_NAMES.add(value.name().toLowerCase()); } } diff --git a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/rust/RustUtilTest.java b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/rust/RustUtilTest.java index 33f3a876d4..f7dcc14c28 100644 --- a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/rust/RustUtilTest.java +++ b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/rust/RustUtilTest.java @@ -136,6 +136,8 @@ void functionNameCasing() assertEquals("pricenull_9", formatFunctionName("PRICENULL9")); assertEquals("price_9_book", formatFunctionName("PRICE9Book")); assertEquals("issue_435", formatFunctionName("issue435")); + assertEquals("r#type", formatFunctionName("type")); + assertEquals("upper_case", formatFunctionName("UPPERCase")); assertEquals("no_md_entries", formatFunctionName("NoMDEntries")); assertEquals("md_entry_type_book", formatFunctionName("MD_EntryTYPEBook")); From 709302495fc48db167521645c787db07420eadd1 Mon Sep 17 00:00:00 2001 From: "seongmin.kim" Date: Tue, 21 Feb 2023 15:47:06 +0900 Subject: [PATCH 2/2] lint: line length --- .../co/real_logic/sbe/generation/rust/RustGenerator.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 0f68867f65..1bd1836eec 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 @@ -941,7 +941,8 @@ static void generateDecoderVarData( { if (varDataToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", + varDataToken.version()); indent(sb, level + 2, "return (self.parent.as_ref().unwrap().get_limit(), 0);\n"); indent(sb, level + 1, "}\n\n"); } @@ -956,7 +957,8 @@ static void generateDecoderVarData( { if (varDataToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", + varDataToken.version()); indent(sb, level + 2, "return (self.get_limit(), 0);\n"); indent(sb, level + 1, "}\n\n"); } @@ -975,7 +977,8 @@ static void generateDecoderVarData( if (varDataToken.version() > 0) { - indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version()); + indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", + varDataToken.version()); indent(sb, level + 2, "return &[] as &[u8];\n"); indent(sb, level + 1, "}\n\n"); }