Skip to content

Commit b82c10e

Browse files
adam-talossuremarc
authored andcommitted
Fixed several issues:
aeron-io#1: LibRsDef explicitly us crate:: to disambiguate from built in mods like bool aeron-io#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. aeron-io#3: fixed primitiveArrayDecoder to return an empty array of the right size if less than version required.
1 parent 0150476 commit b82c10e

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
@@ -542,7 +542,7 @@ private static void generateCompositeDecoder(
542542
decoderName,
543543
decoderTypeName);
544544

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

@@ -576,7 +576,7 @@ private static void generateBitSetDecoder(
576576

577577
if (bitsetToken.version() > 0)
578578
{
579-
indent(sb, level + 1, "if self.acting_version < %d {\n", bitsetToken.version());
579+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", bitsetToken.version());
580580
indent(sb, level + 2, "return %s::default();\n", structTypeName);
581581
indent(sb, level + 1, "}\n\n");
582582
}
@@ -636,8 +636,8 @@ private static void generatePrimitiveArrayDecoder(
636636

637637
if (fieldToken.version() > 0)
638638
{
639-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
640-
indent(sb, level + 2, "return [%s, %d];\n", encoding.applicableNullValue(), arrayLength);
639+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
640+
indent(sb, level + 2, "return [%s; %d];\n", encoding.applicableNullValue(), arrayLength);
641641
indent(sb, level + 1, "}\n\n");
642642
}
643643

@@ -737,7 +737,7 @@ private static void generatePrimitiveOptionalDecoder(
737737

738738
if (fieldToken.version() > 0)
739739
{
740-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
740+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
741741
indent(sb, level + 2, "return None;\n");
742742
indent(sb, level + 1, "}\n\n");
743743
}
@@ -790,7 +790,7 @@ private static void generatePrimitiveRequiredDecoder(
790790

791791
if (fieldToken.version() > 0)
792792
{
793-
indent(sb, level + 1, "if self.acting_version < %d {\n", fieldToken.version());
793+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", fieldToken.version());
794794
indent(sb, level + 2, "return %s;\n",
795795
generateRustLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString()));
796796
indent(sb, level + 1, "}\n\n");
@@ -939,7 +939,7 @@ static void generateDecoderVarData(
939939
{
940940
if (varDataToken.version() > 0)
941941
{
942-
indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version());
942+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version());
943943
indent(sb, level + 2, "return (self.parent.as_ref().unwrap().get_limit(), 0);\n");
944944
indent(sb, level + 1, "}\n\n");
945945
}
@@ -954,7 +954,7 @@ static void generateDecoderVarData(
954954
{
955955
if (varDataToken.version() > 0)
956956
{
957-
indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version());
957+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version());
958958
indent(sb, level + 2, "return (self.get_limit(), 0);\n");
959959
indent(sb, level + 1, "}\n\n");
960960
}
@@ -973,7 +973,7 @@ static void generateDecoderVarData(
973973

974974
if (varDataToken.version() > 0)
975975
{
976-
indent(sb, level + 1, "if self.acting_version < %d {\n", varDataToken.version());
976+
indent(sb, level + 1, "if self.acting_version > 0 && self.acting_version < %d {\n", varDataToken.version());
977977
indent(sb, level + 2, "return &[] as &[u8];\n");
978978
indent(sb, level + 1, "}\n\n");
979979
}
@@ -1354,6 +1354,7 @@ private static void generateCompositeEncoder(
13541354
indent(out, 1, "pub struct %s<P> {\n", encoderName);
13551355
indent(out, 2, "parent: Option<P>,\n");
13561356
indent(out, 2, "offset: usize,\n");
1357+
indent(out, 2, "acting_version: usize,\n");
13571358
indent(out, 1, "}\n\n");
13581359

13591360
appendImplWriterForComposite(out, 1, encoderName);
@@ -1413,6 +1414,7 @@ private static void generateCompositeDecoder(
14131414
indent(out, 1, "pub struct %s<P> {\n", decoderName);
14141415
indent(out, 2, "parent: Option<P>,\n");
14151416
indent(out, 2, "offset: usize,\n");
1417+
indent(out, 2, "acting_version: usize,\n");
14161418
indent(out, 1, "}\n\n");
14171419

14181420
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)