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"); 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..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 @@ -1265,19 +1265,19 @@ 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); + generateFromStrImplForEnum(enumRustName, messageBody, writer); // Display impl 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); + indent(writer, 3, "%s::NullVal => %s,\n", enumRustName, nullVal); } indent(writer, 2, "}\n"); indent(writer, 1, "}\n"); @@ -1331,7 +1333,6 @@ private static void generateIntoImplForEnum( private static void generateFromStrImplForEnum( final String enumRustName, - final String primitiveType, final List messageBody, final Appendable writer) throws IOException { @@ -1342,10 +1343,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");