private String toVariableLiteralExpression(TypeDefinition baseType, VariableLiteral variableLiteral, Function<VariableLiteral, String> variableExpressionGenerator, Tracer tracer) {
        tracer = tracer.dive("toVariableLiteralExpression");
        if (variableLiteral.contains("lengthInBytes")) {
            tracer = tracer.dive("lengthInBytesContained");
            TypeDefinition lengthType;
            String lengthExpression;
            if (variableLiteral.getName().equals("lengthInBytes")) {
                tracer = tracer.dive("lengthInBytes contained in variable name");
                lengthType = baseType;
                Optional<ComplexTypeDefinition> parentType = baseType.asComplexTypeDefinition()
                    .flatMap(ComplexTypeDefinition::getParentType);
                if (parentType.isPresent()) {
                    lengthType = parentType.get();
                }
                lengthExpression = "_message";
            } else {
                final TypeReference typeReferenceForProperty = ((ComplexTypeDefinition) baseType)
                    .getTypeReferenceForProperty(variableLiteral.getName())
                    .orElseThrow(()->new FreemarkerException("Unknown type for property " + variableLiteral.getName()));
                lengthType = typeReferenceForProperty.asNonSimpleTypeReference().orElseThrow().getTypeDefinition();
                lengthExpression = variableExpressionGenerator.apply(variableLiteral);
            }
            return tracer + getCTypeName(lengthType.getName()) + "_length_in_bytes(ctx, " + lengthExpression + ")";
        } else if (variableLiteral.getName().equals("_lastItem")) {
            tracer = tracer.dive("_lastItem");
            return tracer + "plc4x_spi_context_get_last_item_from_context(ctx)";
        // If this literal references an Enum type, then we have to output it differently.
        } else if (getTypeDefinitions().get(variableLiteral.getName()) instanceof EnumTypeDefinition) {
            tracer = tracer.dive("enum type definition");
            return tracer + getCTypeName(variableLiteral.getName()) + "_" + variableLiteral.getChild().map(VariableLiteral::getName).orElseThrow(() -> new FreemarkerException("child required"));
        } else {
            return tracer + variableExpressionGenerator.apply(variableLiteral);
        }
    }
Ge the type-size suffix in case of simple types.

@param field the field we want to get the type-size for
@return a type-size string for the given field or an empty string if this does not apply
code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java