@Override
    public String getLanguageTypeNameForField(Field field) {
        if (!(field.isTypedField())) {
            throw new FreemarkerException("Field " + field + " is not a TypedField");
        }
        // If this is an array with variable length, then we have to use our "plc4c_list" to store the data.
        if (field.asArrayField().map(ArrayField::getLoopExpression).map(Term::isFixedValueExpression).orElse(false)) {
            return "plc4c_list";
        }
        TypedField typedField = field.asTypedField().orElseThrow();
        TypeReference typeReference = typedField.getType();
        if (typeReference.isDataIoTypeReference()) {
            return "plc4c_data";
        }
        // If we reference a complex type subtype, we need to return a reference
        // to the parent as in C the subtypes don't actually exist.
        if (typeReference.isComplexTypeReference()) {
            final ComplexTypeReference complexTypeReference = typeReference.asComplexTypeReference().orElseThrow();
            if (complexTypeReference.getTypeDefinition().isDiscriminatedChildTypeDefinition()) {
                final DiscriminatedComplexTypeDefinition discriminatedComplexTypeDefinition = complexTypeReference.getTypeDefinition().asDiscriminatedComplexTypeDefinition().orElseThrow();
                if(discriminatedComplexTypeDefinition.getParentType().isPresent()) {
                    return getCTypeName(discriminatedComplexTypeDefinition.getParentType().orElseThrow().asComplexTypeDefinition().orElseThrow().getName());
                }
            }
        }
        return getLanguageTypeNameForTypeReference(typeReference);
    }
Little wrapper around the actual getLanguageTypeName which handles the case of requiring
DataIo type fields.

@param field field we want to get the type name for
@return type name we should use in C
code-generation/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java