From 69156681ab11a2e9fa88cf3b0897bc83cd648a00 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Tue, 24 May 2022 08:59:34 -0500 Subject: [PATCH] [Rust] fix generated comparison when value is NAN (#895) --- .../sbe/generation/rust/RustGenerator.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 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 adb9e7b7ad..00417ec76d 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 @@ -746,8 +746,18 @@ private static void generatePrimitiveOptionalDecoder( indent(sb, level + 1, "let value = self.get_buf().get_%s_at(self.%s);\n", rustPrimitiveType, getBufOffset(fieldToken)); - indent(sb, level + 1, "if value == %s {\n", - generateRustLiteral(primitiveType, encoding.applicableNullValue().toString())); + + + final String literal = generateRustLiteral(primitiveType, encoding.applicableNullValue().toString()); + if (literal.endsWith("::NAN")) + { + indent(sb, level + 1, "if value.is_nan() {\n"); + } + else + { + indent(sb, level + 1, "if value == %s {\n", literal); + } + indent(sb, level + 2, "None\n"); indent(sb, level + 1, "} else {\n"); indent(sb, level + 2, "Some(value)\n");