Matches expected type to an actual type.
        The types can be specified as types, type names or [[TypeCode]].

        :param expected_type: an expected type to match.

        :param actual_type: an actual type to match.

        :return: true if types are matching and false if they don't.

def match_type(expected_type, actual_type):
        """
        Matches expected type to an actual type.
        The types can be specified as types, type names or [[TypeCode]].

        :param expected_type: an expected type to match.

        :param actual_type: an actual type to match.

        :return: true if types are matching and false if they don't.
        """
        if expected_type == None:
            return True
        if actual_type == None:
            raise Exception("Actual type cannot be null")

        if isinstance(expected_type, type):
            return issubclass(actual_type, expected_type)
        
        if isinstance(expected_type, str):
            return TypeMatcher.match_type_by_name(expected_type, actual_type)

        return False