From 55dd00f5182d929b98810ce0306e430a41623c81 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Fri, 15 Nov 2024 16:54:55 -0600 Subject: [PATCH 1/6] [Rust] updated LibRsDef.generate() to add "#![allow(clippy::all)]" --- .../java/uk/co/real_logic/sbe/generation/rust/LibRsDef.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f62aebe2d0..46897829cd 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 @@ -60,7 +60,7 @@ void generate(final Ir ir) throws IOException try (Writer libRs = outputManager.createOutput("lib")) { indent(libRs, 0, "#![forbid(unsafe_code)]\n"); - indent(libRs, 0, "#![allow(clippy::upper_case_acronyms)]\n"); + indent(libRs, 0, "#![allow(clippy::all)]\n"); indent(libRs, 0, "#![allow(non_camel_case_types)]\n\n"); indent(libRs, 0, "#![allow(ambiguous_glob_reexports)]\n\n"); indent(libRs, 0, "use ::core::{convert::TryInto};\n\n"); From 5a14a1b3ddb02f75fa982841207f959436a580de Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Fri, 15 Nov 2024 17:45:38 -0600 Subject: [PATCH 2/6] [Rust] generating 'From for PRIMITIVE' instead of 'Into for ENUM' to satisfy 'from_over_into' lint --- .../sbe/generation/rust/RustGenerator.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 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 29fd0da752..ffbfd4203e 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 @@ -1265,10 +1265,10 @@ private static void generateEnum( indent(writer, 0, "}\n"); // From impl - generateFromImplForEnum(enumRustName, primitiveType, messageBody, writer); + generateFromPrimitiveForEnum(enumRustName, primitiveType, messageBody, writer); // Into impl - generateIntoImplForEnum(enumRustName, primitiveType, messageBody, writer); + generateFromEnumForPrimitive(enumRustName, primitiveType, messageBody, writer); // FromStr impl generateFromStrImplForEnum(enumRustName, primitiveType, messageBody, writer); @@ -1277,7 +1277,7 @@ private static void generateEnum( generateDisplayImplForEnum(enumRustName, primitiveType, messageBody, writer); } - private static void generateFromImplForEnum( + private static void generateFromPrimitiveForEnum( final String enumRustName, final String primitiveType, final List messageBody, @@ -1302,27 +1302,29 @@ private static void generateFromImplForEnum( indent(writer, 0, "}\n"); } - private static void generateIntoImplForEnum( + private static void generateFromEnumForPrimitive( final String enumRustName, final String primitiveType, final List messageBody, final Appendable writer) throws IOException { - indent(writer, 0, "impl Into<%s> for %s {\n", primitiveType, enumRustName); + indent(writer, 0, "impl From<%s> for %s {\n", enumRustName, primitiveType); indent(writer, 1, "#[inline]\n"); - indent(writer, 1, "fn into(self) -> %s {\n", primitiveType); - indent(writer, 2, "match self {\n"); + indent(writer, 1, "fn from(v: %s) -> Self {\n", enumRustName); + indent(writer, 2, "match v {\n"); + for (final Token token : messageBody) { final Encoding encoding = token.encoding(); final String literal = generateRustLiteral(encoding.primitiveType(), encoding.constValue().toString()); - indent(writer, 3, "Self::%s => %s, \n", token.name(), literal); + indent(writer, 3, "%s::%s => %s, \n", enumRustName, token.name(), literal); } + { final Encoding encoding = messageBody.get(0).encoding(); final CharSequence nullVal = generateRustLiteral(encoding.primitiveType(), - encoding.applicableNullValue().toString()); - indent(writer, 3, "Self::NullVal => %s,\n", nullVal); + encoding.applicableNullValue().toString()); + indent(writer, 3, "%s::NullVal => %s,\n", enumRustName, nullVal); } indent(writer, 2, "}\n"); indent(writer, 1, "}\n"); @@ -1342,10 +1344,10 @@ private static void generateFromStrImplForEnum( indent(writer, 2, "match v {\n"); for (final Token token : messageBody) { - indent(writer, 3, "\"%1$s\" => core::result::Result::Ok(Self::%1$s), \n", token.name()); + indent(writer, 3, "\"%1$s\" => Ok(Self::%1$s), \n", token.name()); } // default => NullVal - indent(writer, 3, "_ => core::result::Result::Ok(Self::NullVal),\n"); + indent(writer, 3, "_ => Ok(Self::NullVal),\n"); indent(writer, 2, "}\n"); indent(writer, 1, "}\n"); indent(writer, 0, "}\n"); From e8bb09ef4283b7c26600cb8631bc3c99b9450da1 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Fri, 15 Nov 2024 17:46:59 -0600 Subject: [PATCH 3/6] [Rust] removed unused method parameter --- .../uk/co/real_logic/sbe/generation/rust/RustGenerator.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 ffbfd4203e..d291e20cd0 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 @@ -1271,7 +1271,7 @@ private static void generateEnum( generateFromEnumForPrimitive(enumRustName, primitiveType, messageBody, writer); // FromStr impl - generateFromStrImplForEnum(enumRustName, primitiveType, messageBody, writer); + generateFromStrImplForEnum(enumRustName, messageBody, writer); // Display impl generateDisplayImplForEnum(enumRustName, primitiveType, messageBody, writer); @@ -1333,7 +1333,6 @@ private static void generateFromEnumForPrimitive( private static void generateFromStrImplForEnum( final String enumRustName, - final String primitiveType, final List messageBody, final Appendable writer) throws IOException { From e2903a84cc41532b1f55107dfcdac65f3d7dcbf2 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Mon, 18 Nov 2024 09:25:54 -0600 Subject: [PATCH 4/6] fixed formatting --- .../uk/co/real_logic/sbe/generation/rust/RustGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d291e20cd0..0c03766553 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 @@ -1323,7 +1323,7 @@ private static void generateFromEnumForPrimitive( { final Encoding encoding = messageBody.get(0).encoding(); final CharSequence nullVal = generateRustLiteral(encoding.primitiveType(), - encoding.applicableNullValue().toString()); + encoding.applicableNullValue().toString()); indent(writer, 3, "%s::NullVal => %s,\n", enumRustName, nullVal); } indent(writer, 2, "}\n"); From 3e61c441046e4bf06beedf505d03baad09dd7b65 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Thu, 12 Dec 2024 11:46:27 -0600 Subject: [PATCH 5/6] [Rust] Updated code generator to resolve Issue #1022 --- build.gradle | 3 +- rust/Cargo.toml | 1 + .../sbe/generation/rust/RustGenerator.java | 2 +- sbe-tool/src/test/resources/issue1022.xml | 30 +++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 sbe-tool/src/test/resources/issue1022.xml diff --git a/build.gradle b/build.gradle index 9641c9972f..7d4d1b713c 100644 --- a/build.gradle +++ b/build.gradle @@ -653,6 +653,7 @@ tasks.register('generateRustTestCodecs', JavaExec) { 'sbe-tool/src/test/resources/issue972.xml', 'sbe-tool/src/test/resources/issue984.xml', 'sbe-tool/src/test/resources/issue987.xml', + 'sbe-tool/src/test/resources/issue1022.xml', 'sbe-tool/src/test/resources/example-bigendian-test-schema.xml', 'sbe-tool/src/test/resources/nested-composite-name.xml', ] @@ -866,7 +867,7 @@ tasks.register('generateGolangCodecs') { 'generateGolangFlyweightCodecTestComposite', 'generateGolangFlyweightCodecsWithXIncludes', 'generateGolangFlyweightCodecsWithXSD', - 'generateIrCodecs', + 'generateIrCodecs', ':sbe-all:jar' } diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 6b265a3020..59706db18e 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -16,6 +16,7 @@ issue_895 = { path = "../generated/rust/issue895" } issue_972 = { path = "../generated/rust/issue972" } issue_984 = { path = "../generated/rust/issue984" } issue_987 = { path = "../generated/rust/issue987" } +issue_1022 = { path = "../generated/rust/issue1022" } baseline_bigendian = { path = "../generated/rust/baseline-bigendian" } nested_composite_name = { path = "../generated/rust/nested-composite-name" } 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 0c03766553..f78899cb4b 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 @@ -1580,7 +1580,7 @@ private static void generateCompositeDecoder( indent(out, 2, "offset: usize,\n"); indent(out, 1, "}\n\n"); - final int version = tokens.stream().findFirst().get().version(); + final int version = tokens.get(1).version(); // skip BEGIN_COMPOSITE appendImplReaderForComposite(schemaVersionType, version, out, 1, decoderName); // impl<'a, P> start diff --git a/sbe-tool/src/test/resources/issue1022.xml b/sbe-tool/src/test/resources/issue1022.xml new file mode 100644 index 0000000000..81c943369c --- /dev/null +++ b/sbe-tool/src/test/resources/issue1022.xml @@ -0,0 +1,30 @@ + + + + 0 + + + + + + + + + + + + + + + + \ No newline at end of file From ebeb05087f887e536475c1fdc9476534d6fdf118 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Thu, 12 Dec 2024 12:16:37 -0600 Subject: [PATCH 6/6] [Rust] meant issue #1028 not 1022 (renamed files accordingly) --- build.gradle | 2 +- rust/Cargo.toml | 2 +- sbe-tool/src/test/resources/{issue1022.xml => issue1028.xml} | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename sbe-tool/src/test/resources/{issue1022.xml => issue1028.xml} (98%) diff --git a/build.gradle b/build.gradle index 7d4d1b713c..6a20ee7201 100644 --- a/build.gradle +++ b/build.gradle @@ -653,7 +653,7 @@ tasks.register('generateRustTestCodecs', JavaExec) { 'sbe-tool/src/test/resources/issue972.xml', 'sbe-tool/src/test/resources/issue984.xml', 'sbe-tool/src/test/resources/issue987.xml', - 'sbe-tool/src/test/resources/issue1022.xml', + 'sbe-tool/src/test/resources/issue1028.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 59706db18e..f15d4d2f6d 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -16,7 +16,7 @@ issue_895 = { path = "../generated/rust/issue895" } issue_972 = { path = "../generated/rust/issue972" } issue_984 = { path = "../generated/rust/issue984" } issue_987 = { path = "../generated/rust/issue987" } -issue_1022 = { path = "../generated/rust/issue1022" } +issue_1028 = { path = "../generated/rust/issue1028" } baseline_bigendian = { path = "../generated/rust/baseline-bigendian" } nested_composite_name = { path = "../generated/rust/nested-composite-name" } diff --git a/sbe-tool/src/test/resources/issue1022.xml b/sbe-tool/src/test/resources/issue1028.xml similarity index 98% rename from sbe-tool/src/test/resources/issue1022.xml rename to sbe-tool/src/test/resources/issue1028.xml index 81c943369c..2a88c59c1b 100644 --- a/sbe-tool/src/test/resources/issue1022.xml +++ b/sbe-tool/src/test/resources/issue1028.xml @@ -2,8 +2,8 @@ xmlns:ns2="http://www.fixprotocol.org/ns/simple/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sbe="http://fixprotocol.io/2016/sbe" - package="issue1022" - id="1022" + package="issue1028" + id="1028" version="4" semanticVersion="8.2.3" description="B3 Binary Entrypoint FIXP messages"