@Test(expected = NullPointerException.class) public void generateRustLiteralNullPrimitiveTypeParam() { generateRustLiteral(null, "65"); }
@Test(expected = NullPointerException.class) public void generateRustLiteralNullValueParam() { generateRustLiteral(PrimitiveType.INT8, null); }
private static void generateEnum(final List<Token> enumTokens, final OutputManager outputManager) throws IOException { final String originalEnumName = enumTokens.get(0).applicableTypeName(); final String enumRustName = formatTypeName(originalEnumName); try (Writer writer = outputManager.createOutput("Enum " + enumRustName)) { final List<Token> messageBody = getMessageBody(enumTokens); if (messageBody.isEmpty()) { throw new IllegalArgumentException("No valid values provided for enum " + originalEnumName); } writer.append("#[derive(Clone,Copy,Debug,PartialEq,Eq,PartialOrd,Ord,Hash)]").append("\n"); final String rustReprTypeName = rustTypeName(messageBody.get(0).encoding().primitiveType()); writer.append(format("#[repr(%s)]", rustReprTypeName)).append("\n"); writer.append("pub enum ").append(enumRustName).append(" {\n"); for (final Token token : messageBody) { final Encoding encoding = token.encoding(); final String literal = generateRustLiteral(encoding.primitiveType(), encoding.constValue().toString()); indent(writer, 1).append(token.name()) .append(" = ") .append(literal) .append(",\n"); } writer.append("}\n"); } }
@Test public void generateRustLiteralsHappyPaths() { assertEquals("65i8", generateRustLiteral(PrimitiveType.CHAR, "65")); assertEquals("64.1f64", generateRustLiteral(PrimitiveType.DOUBLE, "64.1")); assertEquals("f64::NAN", generateRustLiteral(PrimitiveType.DOUBLE, "NaN")); assertEquals("64.1f32", generateRustLiteral(PrimitiveType.FLOAT, "64.1")); assertEquals("f32::NAN", generateRustLiteral(PrimitiveType.FLOAT, "NaN")); assertEquals("65i8", generateRustLiteral(PrimitiveType.INT8, "65")); assertEquals("65i16", generateRustLiteral(PrimitiveType.INT16, "65")); assertEquals("65i32", generateRustLiteral(PrimitiveType.INT32, "65")); assertEquals("65i64", generateRustLiteral(PrimitiveType.INT64, "65")); assertEquals("65u8", generateRustLiteral(PrimitiveType.UINT8, "65")); assertEquals("65u16", generateRustLiteral(PrimitiveType.UINT16, "65")); assertEquals("65u32", generateRustLiteral(PrimitiveType.UINT32, "65")); assertEquals("65u64", generateRustLiteral(PrimitiveType.UINT64, "65")); }
generateRustLiteral(header.blockLengthType(), Integer.toString(messageToken.encodedLength()))); indent(writer, 4, "%s: %s,\n", formatMethodName("templateId"), generateRustLiteral(header.templateIdType(), Integer.toString(messageToken.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("schemaId"), generateRustLiteral(header.schemaIdType(), Integer.toString(ir.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("version"), generateRustLiteral(header.schemaVersionType(), Integer.toString(ir.version())));
constantRustTypeName = getRustTypeForPrimitivePossiblyArray( signalToken, constantRustPrimitiveType); constantRustExpression = generateRustLiteral( signalToken.encoding().primitiveType(), rawValue);
indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "%s.write_type::<%s>(&count, %s)?; // group count\n", indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "let count = s.len();\n");
indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "let count_pos = %s.pos;\n", scratchChain);
private static void generateEnum(final List<Token> enumTokens, final OutputManager outputManager) throws IOException { final String originalEnumName = enumTokens.get(0).applicableTypeName(); final String enumRustName = formatTypeName(originalEnumName); try (Writer writer = outputManager.createOutput("Enum " + enumRustName)) { final List<Token> messageBody = getMessageBody(enumTokens); if (messageBody.isEmpty()) { throw new IllegalArgumentException("No valid values provided for enum " + originalEnumName); } writer.append("#[derive(Clone,Copy,Debug,PartialEq,Eq,PartialOrd,Ord,Hash)]").append("\n"); final String rustReprTypeName = rustTypeName(messageBody.get(0).encoding().primitiveType()); writer.append(format("#[repr(%s)]", rustReprTypeName)).append("\n"); writer.append("pub enum ").append(enumRustName).append(" {\n"); for (final Token token : messageBody) { final Encoding encoding = token.encoding(); final String literal = generateRustLiteral(encoding.primitiveType(), encoding.constValue().toString()); indent(writer, 1).append(token.name()) .append(" = ") .append(literal) .append(",\n"); } writer.append("}\n"); } }
private static void generateEnum(final List<Token> enumTokens, final OutputManager outputManager) throws IOException { final String originalEnumName = enumTokens.get(0).applicableTypeName(); final String enumRustName = formatTypeName(originalEnumName); try (Writer writer = outputManager.createOutput("Enum " + enumRustName)) { final List<Token> messageBody = getMessageBody(enumTokens); if (messageBody.isEmpty()) { throw new IllegalArgumentException("No valid values provided for enum " + originalEnumName); } writer.append("#[derive(Clone,Copy,Debug,PartialEq,Eq,PartialOrd,Ord,Hash)]").append("\n"); final String rustReprTypeName = rustTypeName(messageBody.get(0).encoding().primitiveType()); writer.append(format("#[repr(%s)]", rustReprTypeName)).append("\n"); writer.append("pub enum ").append(enumRustName).append(" {\n"); for (final Token token : messageBody) { final Encoding encoding = token.encoding(); final String literal = generateRustLiteral(encoding.primitiveType(), encoding.constValue().toString()); indent(writer, 1).append(token.name()) .append(" = ") .append(literal) .append(",\n"); } writer.append("}\n"); } }
generateRustLiteral(header.blockLengthType(), Integer.toString(messageToken.encodedLength()))); indent(writer, 4, "%s: %s,\n", formatMethodName("templateId"), generateRustLiteral(header.templateIdType(), Integer.toString(messageToken.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("schemaId"), generateRustLiteral(header.schemaIdType(), Integer.toString(ir.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("version"), generateRustLiteral(header.schemaVersionType(), Integer.toString(ir.version())));
generateRustLiteral(header.blockLengthType(), Integer.toString(messageToken.encodedLength()))); indent(writer, 4, "%s: %s,\n", formatMethodName("templateId"), generateRustLiteral(header.templateIdType(), Integer.toString(messageToken.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("schemaId"), generateRustLiteral(header.schemaIdType(), Integer.toString(ir.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("version"), generateRustLiteral(header.schemaVersionType(), Integer.toString(ir.version())));
constantRustTypeName = getRustTypeForPrimitivePossiblyArray( signalToken, constantRustPrimitiveType); constantRustExpression = generateRustLiteral( signalToken.encoding().primitiveType(), rawValue);
constantRustTypeName = getRustTypeForPrimitivePossiblyArray( signalToken, constantRustPrimitiveType); constantRustExpression = generateRustLiteral( signalToken.encoding().primitiveType(), rawValue);
indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "%s.write_type::<%s>(&count, %s)?; // group count\n", indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "let count = s.len();\n");
indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "%s.write_type::<%s>(&count, %s)?; // group count\n", indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "let count = s.len();\n");
indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "let count_pos = %s.pos;\n", scratchChain);
indent(out, 2, "%s.write_type::<%s>(&%s, %s)?; // block length\n", scratchChain, rustTypeName(node.blockLengthType), generateRustLiteral(node.blockLengthType, Integer.toString(node.blockLength)), node.blockLengthType.size()); indent(out, 2, "let count_pos = %s.pos;\n", scratchChain);