# Path: google/cloud/firestore_v1/types/document.py
# class Document(proto.Message):
# class Value(proto.Message):
# class ArrayValue(proto.Message):
# class MapValue(proto.Message):
# 
# Path: google/cloud/firestore_v1/types/firestore.py
# class GetDocumentRequest(proto.Message):
# class ListDocumentsRequest(proto.Message):
# class ListDocumentsResponse(proto.Message):
# class CreateDocumentRequest(proto.Message):
# class UpdateDocumentRequest(proto.Message):
# class DeleteDocumentRequest(proto.Message):
# class BatchGetDocumentsRequest(proto.Message):
# class BatchGetDocumentsResponse(proto.Message):
# class BeginTransactionRequest(proto.Message):
# class BeginTransactionResponse(proto.Message):
# class CommitRequest(proto.Message):
# class CommitResponse(proto.Message):
# class RollbackRequest(proto.Message):
# class RunQueryRequest(proto.Message):
# class RunQueryResponse(proto.Message):
# class PartitionQueryRequest(proto.Message):
# class PartitionQueryResponse(proto.Message):
# class WriteRequest(proto.Message):
# class WriteResponse(proto.Message):
# class ListenRequest(proto.Message):
# class ListenResponse(proto.Message):
# class Target(proto.Message):
#     class DocumentsTarget(proto.Message):
#     class QueryTarget(proto.Message):
# class TargetChange(proto.Message):
#     class TargetChangeType(proto.Enum):
# class ListCollectionIdsRequest(proto.Message):
# class ListCollectionIdsResponse(proto.Message):
# class BatchWriteRequest(proto.Message):
# class BatchWriteResponse(proto.Message):
#     def raw_page(self):
#     def raw_page(self):
#     def raw_page(self):
#         NO_CHANGE = 0
#         ADD = 1
#         REMOVE = 2
#         CURRENT = 3
#         RESET = 4
# 
# Path: google/cloud/firestore_v1/types/query.py
# class StructuredQuery(proto.Message):
#     class Direction(proto.Enum):
#     class CollectionSelector(proto.Message):
#     class Filter(proto.Message):
#     class CompositeFilter(proto.Message):
#         class Operator(proto.Enum):
#     class FieldFilter(proto.Message):
#         class Operator(proto.Enum):
#     class UnaryFilter(proto.Message):
#         class Operator(proto.Enum):
#     class Order(proto.Message):
#     class FieldReference(proto.Message):
#     class Projection(proto.Message):
# class Cursor(proto.Message):
#         DIRECTION_UNSPECIFIED = 0
#         ASCENDING = 1
#         DESCENDING = 2
#             OPERATOR_UNSPECIFIED = 0
#             AND = 1
#             OPERATOR_UNSPECIFIED = 0
#             LESS_THAN = 1
#             LESS_THAN_OR_EQUAL = 2
#             GREATER_THAN = 3
#             GREATER_THAN_OR_EQUAL = 4
#             EQUAL = 5
#             NOT_EQUAL = 6
#             ARRAY_CONTAINS = 7
#             IN = 8
#             ARRAY_CONTAINS_ANY = 9
#             NOT_IN = 10
#             OPERATOR_UNSPECIFIED = 0
#             IS_NAN = 2
#             IS_NULL = 3
#             IS_NOT_NAN = 4
#             IS_NOT_NULL = 5


from typing import (
    Any,
    AsyncIterator,
    Awaitable,
    Callable,
    Sequence,
    Tuple,
    Optional,
    Iterator,
)
from google.cloud.firestore_v1.types import document
from google.cloud.firestore_v1.types import firestore
from google.cloud.firestore_v1.types import query
        metadata: Sequence[Tuple[str, str]] = ()
    ):
        """Instantiates the pager.

        Args:
            method (Callable): The method that was originally called, and
                which instantiated this pager.
            request (google.cloud.firestore_v1.types.ListDocumentsRequest):
                The initial request object.
            response (google.cloud.firestore_v1.types.ListDocumentsResponse):
                The initial response object.
            metadata (Sequence[Tuple[str, str]]): Strings which should be
                sent along with the request as metadata.
        """
        self._method = method
        self._request = firestore.ListDocumentsRequest(request)
        self._response = response
        self._metadata = metadata

    def __getattr__(self, name: str) -> Any:
        return getattr(self._response, name)

    @property
    async def pages(self) -> AsyncIterator[firestore.ListDocumentsResponse]:
        yield self._response
        while self._response.next_page_token:
            self._request.page_token = self._response.next_page_token
            self._response = await self._method(self._request, metadata=self._metadata)
            yield self._response


# Path: google/cloud/firestore_v1/types/document.py
# class Document(proto.Message):
# class Value(proto.Message):
# class ArrayValue(proto.Message):
# class MapValue(proto.Message):
# 
# Path: google/cloud/firestore_v1/types/firestore.py
# class GetDocumentRequest(proto.Message):
# class ListDocumentsRequest(proto.Message):
# class ListDocumentsResponse(proto.Message):
# class CreateDocumentRequest(proto.Message):
# class UpdateDocumentRequest(proto.Message):
# class DeleteDocumentRequest(proto.Message):
# class BatchGetDocumentsRequest(proto.Message):
# class BatchGetDocumentsResponse(proto.Message):
# class BeginTransactionRequest(proto.Message):
# class BeginTransactionResponse(proto.Message):
# class CommitRequest(proto.Message):
# class CommitResponse(proto.Message):
# class RollbackRequest(proto.Message):
# class RunQueryRequest(proto.Message):
# class RunQueryResponse(proto.Message):
# class PartitionQueryRequest(proto.Message):
# class PartitionQueryResponse(proto.Message):
# class WriteRequest(proto.Message):
# class WriteResponse(proto.Message):
# class ListenRequest(proto.Message):
# class ListenResponse(proto.Message):
# class Target(proto.Message):
#     class DocumentsTarget(proto.Message):
#     class QueryTarget(proto.Message):
# class TargetChange(proto.Message):
#     class TargetChangeType(proto.Enum):
# class ListCollectionIdsRequest(proto.Message):
# class ListCollectionIdsResponse(proto.Message):
# class BatchWriteRequest(proto.Message):
# class BatchWriteResponse(proto.Message):
#     def raw_page(self):
#     def raw_page(self):
#     def raw_page(self):
#         NO_CHANGE = 0
#         ADD = 1
#         REMOVE = 2
#         CURRENT = 3
#         RESET = 4
# 
# Path: google/cloud/firestore_v1/types/query.py
# class StructuredQuery(proto.Message):
#     class Direction(proto.Enum):
#     class CollectionSelector(proto.Message):
#     class Filter(proto.Message):
#     class CompositeFilter(proto.Message):
#         class Operator(proto.Enum):
#     class FieldFilter(proto.Message):
#         class Operator(proto.Enum):
#     class UnaryFilter(proto.Message):
#         class Operator(proto.Enum):
#     class Order(proto.Message):
#     class FieldReference(proto.Message):
#     class Projection(proto.Message):
# class Cursor(proto.Message):
#         DIRECTION_UNSPECIFIED = 0
#         ASCENDING = 1
#         DESCENDING = 2
#             OPERATOR_UNSPECIFIED = 0
#             AND = 1
#             OPERATOR_UNSPECIFIED = 0
#             LESS_THAN = 1
#             LESS_THAN_OR_EQUAL = 2
#             GREATER_THAN = 3
#             GREATER_THAN_OR_EQUAL = 4
#             EQUAL = 5
#             NOT_EQUAL = 6
#             ARRAY_CONTAINS = 7
#             IN = 8
#             ARRAY_CONTAINS_ANY = 9
#             NOT_IN = 10
#             OPERATOR_UNSPECIFIED = 0
#             IS_NAN = 2
#             IS_NULL = 3
#             IS_NOT_NAN = 4
#             IS_NOT_NULL = 5


# Path: google/cloud/firestore_v1/services/firestore/pagers.py
from typing import (
    Any,
    AsyncIterator,
    Awaitable,
    Callable,
    Sequence,
    Tuple,
    Optional,
    Iterator,
)
from google.cloud.firestore_v1.types import document
from google.cloud.firestore_v1.types import firestore
from google.cloud.firestore_v1.types import query

        metadata: Sequence[Tuple[str, str]] = ()
    ):
        """Instantiates the pager.

        Args:
            method (Callable): The method that was originally called, and
                which instantiated this pager.
            request (google.cloud.firestore_v1.types.ListDocumentsRequest):
                The initial request object.
            response (google.cloud.firestore_v1.types.ListDocumentsResponse):
                The initial response object.
            metadata (Sequence[Tuple[str, str]]): Strings which should be
                sent along with the request as metadata.
        """
        self._method = method
        self._request = firestore.ListDocumentsRequest(request)
        self._response = response
        self._metadata = metadata

    def __getattr__(self, name: str) -> Any:
        return getattr(self._response, name)

    @property
    async def pages(self) -> AsyncIterator[firestore.ListDocumentsResponse]:
        yield self._response
        while self._response.next_page_token:
            self._request.page_token = self._response.next_page_token
            self._response = await self._method(self._request, metadata=self._metadata)
            yield self._response


    def __aiter__(self) -> AsyncIterator[document.Document]: