Skip to content

Commit dee1fb5

Browse files
adam-talosSeanKim
authored andcommitted
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.
1 parent 7186909 commit dee1fb5

File tree

4 files changed

+16
-12
lines changed

4 files changed

+16
-12
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/LibRsDef.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void generate() throws IOException
8181
// add re-export of modules
8282
for (final String module : modules)
8383
{
84-
indent(libRs, 0, "pub use %s::*;\n", toLowerSnakeCase(module));
84+
indent(libRs, 0, "pub use crate::%s::*;\n", toLowerSnakeCase(module));
8585
}
8686
indent(libRs, 0, "\n");
8787

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ private static void generateCompositeDecoder(
544544
decoderName,
545545
decoderTypeName);
546546

547-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
547+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
548548
indent(sb, level + 2, "return Either::Left(self);\n");
549549
indent(sb, level + 1, "}\n\n");
550550

@@ -578,7 +578,7 @@ private static void generateBitSetDecoder(
578578

579579
if (bitsetToken.version() > 0)
580580
{
581-
indent(sb, level + 1, "if self.acting_version < %d {\n", bitsetToken.version());
581+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", bitsetToken.version());
582582
indent(sb, level + 2, "return %s::default();\n", structTypeName);
583583
indent(sb, level + 1, "}\n\n");
584584
}
@@ -638,8 +638,8 @@ private static void generatePrimitiveArrayDecoder(
638638

639639
if (fieldToken.version() > 0)
640640
{
641-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
642-
indent(sb, level + 2, "return [%s, %d];\n", encoding.applicableNullValue(), arrayLength);
641+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
642+
indent(sb, level + 2, "return [%s; %d];\n", encoding.applicableNullValue(), arrayLength);
643643
indent(sb, level + 1, "}\n\n");
644644
}
645645

@@ -739,7 +739,7 @@ private static void generatePrimitiveOptionalDecoder(
739739

740740
if (fieldToken.version() > 0)
741741
{
742-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
742+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
743743
indent(sb, level + 2, "return None;\n");
744744
indent(sb, level + 1, "}\n\n");
745745
}
@@ -792,7 +792,7 @@ private static void generatePrimitiveRequiredDecoder(
792792

793793
if (fieldToken.version() > 0)
794794
{
795-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
795+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
796796
indent(sb, level + 2, "return %s;\n",
797797
generateRustLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString()));
798798
indent(sb, level + 1, "}\n\n");
@@ -941,7 +941,7 @@ static void generateDecoderVarData(
941941
{
942942
if (varDataToken.version() > 0)
943943
{
944-
indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version());
944+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version());
945945
indent(sb, level + 2, "return (self.parent.as_ref().unwrap().get_limit(), 0);\n");
946946
indent(sb, level + 1, "}\n\n");
947947
}
@@ -956,7 +956,7 @@ static void generateDecoderVarData(
956956
{
957957
if (varDataToken.version() > 0)
958958
{
959-
indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version());
959+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version());
960960
indent(sb, level + 2, "return (self.get_limit(), 0);\n");
961961
indent(sb, level + 1, "}\n\n");
962962
}
@@ -975,7 +975,7 @@ static void generateDecoderVarData(
975975

976976
if (varDataToken.version() > 0)
977977
{
978-
indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version());
978+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version());
979979
indent(sb, level + 2, "return &[] as &[u8];\n");
980980
indent(sb, level + 1, "}\n\n");
981981
}
@@ -1356,6 +1356,7 @@ private static void generateCompositeEncoder(
13561356
indent(out, 1, "pub struct %s<P> {\n", encoderName);
13571357
indent(out, 2, "parent: Option<P>,\n");
13581358
indent(out, 2, "offset: usize,\n");
1359+
indent(out, 2, "acting_version: usize,\n");
13591360
indent(out, 1, "}\n\n");
13601361

13611362
appendImplWriterForComposite(out, 1, encoderName);
@@ -1417,6 +1418,7 @@ private static void generateCompositeDecoder(
14171418
indent(out, 1, "pub struct %s<P> {\n", decoderName);
14181419
indent(out, 2, "parent: Option<P>,\n");
14191420
indent(out, 2, "offset: usize,\n");
1421+
indent(out, 2, "acting_version: usize,\n");
14201422
indent(out, 1, "}\n\n");
14211423

14221424
appendImplReaderForComposite(out, 1, decoderName);

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ private static String sanitizeMethodOrProperty(final String name)
260260
{
261261
if (shadowsKeyword(name))
262262
{
263-
return name + "_";
263+
return "r#" + name;
264264
}
265265
else
266266
{
@@ -310,7 +310,7 @@ enum ReservedKeyword
310310
{
311311
for (final ReservedKeyword value : ReservedKeyword.values())
312312
{
313-
LOWER_CASE_NAMES.add(value.name());
313+
LOWER_CASE_NAMES.add(value.name().toLowerCase());
314314
}
315315
}
316316

sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/rust/RustUtilTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ void functionNameCasing()
136136
assertEquals("pricenull_9", formatFunctionName("PRICENULL9"));
137137
assertEquals("price_9_book", formatFunctionName("PRICE9Book"));
138138
assertEquals("issue_435", formatFunctionName("issue435"));
139+
assertEquals("r#type", formatFunctionName("type"));
140+
139141
assertEquals("upper_case", formatFunctionName("UPPERCase"));
140142
assertEquals("no_md_entries", formatFunctionName("NoMDEntries"));
141143
assertEquals("md_entry_type_book", formatFunctionName("MD_EntryTYPEBook"));

0 commit comments

Comments
 (0)