<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def list_projects(self, filter_params=None, page_size=None):
 """List the projects visible to this client. Example:: List all projects with label ``'environment'`` set to ``'prod'`` (filtering by labels):
: See https://cloud.google.com/resource-manager/reference/rest/v1beta1/projects/list Complete filtering example:: :type filter_params: dict :param filter_params: (Optional) A dictionary of filter options where each key is a property to filter on, and each value is the (case-insensitive) value to check (or the glob ``*`` to check for existence of the property). See the example above for more details. :type page_size: int :param page_size: (Optional) The maximum number of projects in each page of results from this request. Non-positive values are ignored. Defaults to a sensible value set by the API. :rtype: :class:`~google.api_core.page_iterator.Iterator` :returns: Iterator of all :class:`~google.cloud.resource_manager.project.Project`. that the current user has access to. """

        extra_params = {}

        if page_size is not None:
            extra_params["pageSize"] = page_size

        if filter_params is not None:
            extra_params["filter"] = [
                "{}:{}".format(key, value)
                for key, value in six.iteritems(filter_params)
            ]

        return page_iterator.HTTPIterator(
            client=self,
            api_request=self._connection.api_request,
            path="/projects",
            item_to_value=_item_to_project,
            items_key="projects",
            extra_params=extra_params,
        )