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 4913e30b9d..7fbecbb514 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 e7e26bcc31..189473779b 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 @@ -542,7 +542,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"); @@ -576,7 +576,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"); } @@ -636,8 +636,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"); } @@ -737,7 +737,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"); } @@ -790,7 +790,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"); @@ -939,7 +939,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"); } @@ -954,7 +954,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"); } @@ -973,7 +973,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"); } @@ -1354,6 +1354,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); @@ -1413,6 +1414,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 731f57199d..3cc69fda4e 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 cab7fc9f10..2132b75ba2 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"));