From a29ea3e4ea581aacdf7cceff67540f12bcb1bf34 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Fri, 22 Mar 2024 04:03:52 -0500 Subject: [PATCH] [Rust] updated code generator to prevent rust warning for "ambiguous glob re-exports" (#982) Co-authored-by: Michael Ward --- rust/benches/car_benchmark.rs | 2 +- rust/tests/baseline_test.rs | 19 ++++++++---- rust/tests/big_endian_test.rs | 15 ++++++++-- rust/tests/extension_test.rs | 19 ++++++++---- rust/tests/issue_435_test.rs | 4 +++ rust/tests/issue_895_test.rs | 6 +--- rust/tests/issue_972_test.rs | 2 +- .../sbe/generation/rust/LibRsDef.java | 8 +---- .../sbe/generation/rust/MessageCoderDef.java | 3 +- .../sbe/generation/rust/RustGenerator.java | 30 ++++++++++++++----- 10 files changed, 74 insertions(+), 34 deletions(-) diff --git a/rust/benches/car_benchmark.rs b/rust/benches/car_benchmark.rs index 92b964147a..06b542452a 100644 --- a/rust/benches/car_benchmark.rs +++ b/rust/benches/car_benchmark.rs @@ -1,6 +1,6 @@ +use car_codec::encoder::*; use criterion::{black_box, criterion_group, criterion_main, Criterion}; use examples_uk_co_real_logic_sbe_benchmarks::*; -use car_codec::encoder::*; const MANUFACTURER: &[u8] = b"MANUFACTURER"; const MODEL: &[u8] = b"MODEL"; diff --git a/rust/tests/baseline_test.rs b/rust/tests/baseline_test.rs index bff75170c4..58a8503d20 100644 --- a/rust/tests/baseline_test.rs +++ b/rust/tests/baseline_test.rs @@ -1,8 +1,17 @@ -use std::fs::File; -use std::io::prelude::*; - -use examples_baseline::*; -use car_codec::encoder::*; +use examples_baseline::{ + boolean_type::BooleanType, + boost_type::BoostType, + car_codec::{ + encoder::{AccelerationEncoder, FuelFiguresEncoder, PerformanceFiguresEncoder}, + *, + }, + message_header_codec, + message_header_codec::MessageHeaderDecoder, + model::Model, + optional_extras::OptionalExtras, + Encoder, ReadBuf, SbeResult, WriteBuf, +}; +use std::{fs::File, io::prelude::*}; fn read_sbe_file_generated_from_java_example() -> std::io::Result> { // Generated by the generateCarExampleDataFile gradle task. diff --git a/rust/tests/big_endian_test.rs b/rust/tests/big_endian_test.rs index a5a749c94a..aabea63ce2 100644 --- a/rust/tests/big_endian_test.rs +++ b/rust/tests/big_endian_test.rs @@ -1,5 +1,16 @@ -use baseline_bigendian::*; -use car_codec::encoder::*; +use baseline_bigendian::{ + boolean_type::BooleanType, + boost_type::BoostType, + car_codec::{ + encoder::{AccelerationEncoder, FuelFiguresEncoder, PerformanceFiguresEncoder}, + *, + }, + message_header_codec, + message_header_codec::MessageHeaderDecoder, + model::Model, + optional_extras::OptionalExtras, + Encoder, ReadBuf, SbeResult, WriteBuf, +}; #[test] fn big_endian_baseline_example() -> SbeResult<()> { diff --git a/rust/tests/extension_test.rs b/rust/tests/extension_test.rs index 07c81e9fb7..072b9b8baa 100644 --- a/rust/tests/extension_test.rs +++ b/rust/tests/extension_test.rs @@ -1,8 +1,17 @@ -use std::fs::File; -use std::io::prelude::*; - -use examples_extension::*; -use car_codec::encoder::*; +use examples_extension::{ + boolean_type::BooleanType, + boost_type::BoostType, + car_codec::{ + encoder::{AccelerationEncoder, FuelFiguresEncoder, PerformanceFiguresEncoder}, + *, + }, + message_header_codec, + message_header_codec::MessageHeaderDecoder, + model::Model, + optional_extras::OptionalExtras, + Encoder, ReadBuf, SbeResult, WriteBuf, +}; +use std::{fs::File, io::prelude::*}; fn read_sbe_file_generated_from_java_example() -> std::io::Result> { // Generated by the generateCarExampleDataFile gradle task. diff --git a/rust/tests/issue_435_test.rs b/rust/tests/issue_435_test.rs index 87bd9a075e..8ac9ce8a50 100644 --- a/rust/tests/issue_435_test.rs +++ b/rust/tests/issue_435_test.rs @@ -1,4 +1,8 @@ use ::issue_435::*; +use issue_435::{ + enum_ref::EnumRef, issue_435_codec::*, message_header_codec::MessageHeaderDecoder, + set_ref::SetRef, +}; fn create_encoder(buffer: &mut Vec) -> Issue435Encoder { let issue_435 = Issue435Encoder::default().wrap( diff --git a/rust/tests/issue_895_test.rs b/rust/tests/issue_895_test.rs index dd9b19fa04..96968d2459 100644 --- a/rust/tests/issue_895_test.rs +++ b/rust/tests/issue_895_test.rs @@ -1,8 +1,4 @@ -use issue_895::{ - issue_895_codec::{decoder::Issue895Decoder, encoder::Issue895Encoder}, - MessageHeaderDecoder, ReadBuf, SbeResult, WriteBuf, ENCODED_LENGTH, SBE_BLOCK_LENGTH, - SBE_SCHEMA_ID, SBE_SCHEMA_VERSION, SBE_TEMPLATE_ID, -}; +use issue_895::{issue_895_codec::*, message_header_codec::*, *}; fn create_encoder(buffer: &mut Vec) -> Issue895Encoder { let issue_895 = diff --git a/rust/tests/issue_972_test.rs b/rust/tests/issue_972_test.rs index bc3a938247..2cbab324d0 100644 --- a/rust/tests/issue_972_test.rs +++ b/rust/tests/issue_972_test.rs @@ -1,4 +1,4 @@ -use issue_972::*; +use issue_972::{issue_972_codec::*, message_header_codec::MessageHeaderDecoder, *}; fn create_encoder(buffer: &mut Vec) -> Issue972Encoder { let issue_972 = Issue972Encoder::default().wrap( 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 a51b2746da..3c5ae1542d 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 @@ -78,13 +78,6 @@ void generate() throws IOException } indent(libRs, 0, "\n"); - // add re-export of modules - for (final String module : modules) - { - indent(libRs, 0, "pub use crate::%s::*;\n", toLowerSnakeCase(module)); - } - indent(libRs, 0, "\n"); - generateSbeErrorEnum(libRs); generateEitherEnum(libRs); @@ -163,6 +156,7 @@ static void generateReadBuf(final Appendable writer, final ByteOrder byteOrder) indent(writer, 0, "}\n"); // impl ReadBuf ... + indent(writer, 0, "#[allow(dead_code)]\n"); indent(writer, 0, "impl<%s> %s<%s> {\n", BUF_LIFETIME, READ_BUF_TYPE, BUF_LIFETIME); indent(writer, 1, "#[inline]\n"); indent(writer, 1, "pub fn new(data: &%s [u8]) -> Self {\n", BUF_LIFETIME); diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/MessageCoderDef.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/MessageCoderDef.java index 00c9ac03f6..dbe6fabc8f 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/MessageCoderDef.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/MessageCoderDef.java @@ -63,7 +63,8 @@ void generate( final List varData) throws IOException { indent(sb, 0, "pub mod %s {\n", codecType.toString().toLowerCase()); - indent(sb, 1, "use super::*;\n\n"); + indent(sb, 1, "use super::*;\n"); + indent(sb, 1, "use message_header_codec::*;\n\n"); // i.e. Decoder or Encoder final String msgTypeName = formatStructName(msgToken.name()) + codecType.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 d0067d836c..6569599993 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 @@ -449,7 +449,9 @@ private static void generateEnumEncoder( final String name) throws IOException { final String referencedName = typeToken.referencedName(); - final String enumType = formatStructName(referencedName == null ? typeToken.name() : referencedName); + final String enumType = format("%s::%s", + toLowerSnakeCase(referencedName == null ? typeToken.name() : referencedName), + formatStructName(referencedName == null ? typeToken.name() : referencedName)); if (fieldToken.isConstantEncoding()) { @@ -479,7 +481,10 @@ private static void generateBitSetEncoder( { final Encoding encoding = bitsetToken.encoding(); final String rustPrimitiveType = rustTypeName(encoding.primitiveType()); - final String structTypeName = formatStructName(bitsetToken.applicableTypeName()); + final String referencedName = bitsetToken.referencedName(); + final String structTypeName = format("%s::%s", + toLowerSnakeCase(referencedName == null ? bitsetToken.name() : referencedName), + formatStructName(bitsetToken.applicableTypeName())); indent(sb, level, "#[inline]\n"); indent(sb, level, "pub fn %s(&mut self, value: %s) {\n", formatFunctionName(name), structTypeName); @@ -496,7 +501,9 @@ private static void generateCompositeEncoder( final String name) throws IOException { final String encoderName = toLowerSnakeCase(encoderName(name)); - final String encoderTypeName = encoderName(formatStructName(typeToken.applicableTypeName())); + final String encoderTypeName = format("%s::%s", + codecModName(typeToken.referencedName() == null ? typeToken.name() : typeToken.referencedName()), + encoderName(formatStructName(typeToken.applicableTypeName()))); indent(sb, level, "/// COMPOSITE ENCODER\n"); indent(sb, level, "#[inline]\n"); indent(sb, level, "pub fn %s(self) -> %2$s {\n", @@ -556,7 +563,10 @@ private static void generateCompositeDecoder( final String name) throws IOException { final String decoderName = toLowerSnakeCase(decoderName(name)); - final String decoderTypeName = decoderName(formatStructName(typeToken.applicableTypeName())); + final String referencedName = typeToken.referencedName(); + final String decoderTypeName = format("%s::%s", + codecModName(referencedName == null ? typeToken.name() : referencedName), + decoderName(formatStructName(typeToken.applicableTypeName()))); indent(sb, level, "/// COMPOSITE DECODER\n"); indent(sb, level, "#[inline]\n"); if (fieldToken.version() > 0) @@ -575,7 +585,7 @@ private static void generateCompositeDecoder( } else { - indent(sb, level, "pub fn %s(self) -> %2$s {\n", + indent(sb, level, "pub fn %s(self) -> %s {\n", decoderName, decoderTypeName); @@ -593,7 +603,11 @@ private static void generateBitSetDecoder( { final Encoding encoding = bitsetToken.encoding(); final String rustPrimitiveType = rustTypeName(encoding.primitiveType()); - final String structTypeName = formatStructName(bitsetToken.applicableTypeName()); + final String referencedName = bitsetToken.referencedName(); + final String structTypeName = format("%s::%s", + toLowerSnakeCase(referencedName == null ? bitsetToken.name() : referencedName), + formatStructName(bitsetToken.applicableTypeName())); + indent(sb, level, "/// BIT SET DECODER\n"); indent(sb, level, "#[inline]\n"); indent(sb, level, "pub fn %s(&self) -> %s {\n", formatFunctionName(name), structTypeName); @@ -834,7 +848,9 @@ private static void generateEnumDecoder( final String name) throws IOException { final String referencedName = typeToken.referencedName(); - final String enumType = formatStructName(referencedName == null ? typeToken.name() : referencedName); + final String enumType = format("%s::%s", + toLowerSnakeCase(referencedName == null ? typeToken.name() : referencedName), + formatStructName(referencedName == null ? typeToken.name() : referencedName)); if (fieldToken.isConstantEncoding()) {