diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-firestore
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Cloud Firestore.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-firestore` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/FireStore.hs b/gen/Network/Google/FireStore.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FireStore.hs
@@ -0,0 +1,780 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.FireStore
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accesses the NoSQL document database built for automatic scaling, high
+-- performance, and ease of application development.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference>
+module Network.Google.FireStore
+    (
+    -- * Service Configuration
+      fireStoreService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+    , datastoreScope
+
+    -- * API Declaration
+    , FireStoreAPI
+
+    -- * Resources
+
+    -- ** firestore.projects.databases.collectionGroups.fields.get
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Get
+
+    -- ** firestore.projects.databases.collectionGroups.fields.list
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.List
+
+    -- ** firestore.projects.databases.collectionGroups.fields.patch
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Patch
+
+    -- ** firestore.projects.databases.collectionGroups.indexes.create
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Create
+
+    -- ** firestore.projects.databases.collectionGroups.indexes.delete
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Delete
+
+    -- ** firestore.projects.databases.collectionGroups.indexes.get
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Get
+
+    -- ** firestore.projects.databases.collectionGroups.indexes.list
+    , module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.List
+
+    -- ** firestore.projects.databases.documents.batchGet
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.BatchGet
+
+    -- ** firestore.projects.databases.documents.beginTransaction
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.BeginTransaction
+
+    -- ** firestore.projects.databases.documents.commit
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Commit
+
+    -- ** firestore.projects.databases.documents.createDocument
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.CreateDocument
+
+    -- ** firestore.projects.databases.documents.delete
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Delete
+
+    -- ** firestore.projects.databases.documents.get
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Get
+
+    -- ** firestore.projects.databases.documents.list
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.List
+
+    -- ** firestore.projects.databases.documents.listCollectionIds
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.ListCollectionIds
+
+    -- ** firestore.projects.databases.documents.listen
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Listen
+
+    -- ** firestore.projects.databases.documents.patch
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Patch
+
+    -- ** firestore.projects.databases.documents.rollback
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Rollback
+
+    -- ** firestore.projects.databases.documents.runQuery
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.RunQuery
+
+    -- ** firestore.projects.databases.documents.write
+    , module Network.Google.Resource.FireStore.Projects.Databases.Documents.Write
+
+    -- ** firestore.projects.databases.exportDocuments
+    , module Network.Google.Resource.FireStore.Projects.Databases.ExportDocuments
+
+    -- ** firestore.projects.databases.importDocuments
+    , module Network.Google.Resource.FireStore.Projects.Databases.ImportDocuments
+
+    -- ** firestore.projects.databases.operations.cancel
+    , module Network.Google.Resource.FireStore.Projects.Databases.Operations.Cancel
+
+    -- ** firestore.projects.databases.operations.delete
+    , module Network.Google.Resource.FireStore.Projects.Databases.Operations.Delete
+
+    -- ** firestore.projects.databases.operations.get
+    , module Network.Google.Resource.FireStore.Projects.Databases.Operations.Get
+
+    -- ** firestore.projects.databases.operations.list
+    , module Network.Google.Resource.FireStore.Projects.Databases.Operations.List
+
+    -- ** firestore.projects.locations.get
+    , module Network.Google.Resource.FireStore.Projects.Locations.Get
+
+    -- ** firestore.projects.locations.list
+    , module Network.Google.Resource.FireStore.Projects.Locations.List
+
+    -- * Types
+
+    -- ** WriteRequest
+    , WriteRequest
+    , writeRequest
+    , wrStreamToken
+    , wrLabels
+    , wrWrites
+    , wrStreamId
+
+    -- ** LatLng
+    , LatLng
+    , latLng
+    , llLatitude
+    , llLongitude
+
+    -- ** GoogleFirestoreAdminV1IndexFieldOrder
+    , GoogleFirestoreAdminV1IndexFieldOrder (..)
+
+    -- ** WriteResult
+    , WriteResult
+    , writeResult
+    , wrUpdateTime
+    , wrTransformResults
+
+    -- ** GoogleFirestoreAdminV1Field
+    , GoogleFirestoreAdminV1Field
+    , googleFirestoreAdminV1Field
+    , gfavfIndexConfig
+    , gfavfName
+
+    -- ** TransactionOptions
+    , TransactionOptions
+    , transactionOptions
+    , toReadWrite
+    , toReadOnly
+
+    -- ** GoogleFirestoreAdminV1IndexConfigDeltaChangeType
+    , GoogleFirestoreAdminV1IndexConfigDeltaChangeType (..)
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** GoogleLongrunningOperationMetadata
+    , GoogleLongrunningOperationMetadata
+    , googleLongrunningOperationMetadata
+    , glomAddtional
+
+    -- ** Precondition
+    , Precondition
+    , precondition
+    , pExists
+    , pUpdateTime
+
+    -- ** ReadWrite
+    , ReadWrite
+    , readWrite
+    , rwRetryTransaction
+
+    -- ** RollbackRequest
+    , RollbackRequest
+    , rollbackRequest
+    , rrTransaction
+
+    -- ** GoogleFirestoreAdminV1ExportDocumentsRequest
+    , GoogleFirestoreAdminV1ExportDocumentsRequest
+    , googleFirestoreAdminV1ExportDocumentsRequest
+    , gfavedrCollectionIds
+    , gfavedrOutputURIPrefix
+
+    -- ** TargetChange
+    , TargetChange
+    , targetChange
+    , tcReadTime
+    , tcResumeToken
+    , tcCause
+    , tcTargetChangeType
+    , tcTargetIds
+
+    -- ** ListLocationsResponse
+    , ListLocationsResponse
+    , listLocationsResponse
+    , llrNextPageToken
+    , llrLocations
+
+    -- ** GoogleFirestoreAdminV1IndexState
+    , GoogleFirestoreAdminV1IndexState (..)
+
+    -- ** CompositeFilterOp
+    , CompositeFilterOp (..)
+
+    -- ** Cursor
+    , Cursor
+    , cursor
+    , cValues
+    , cBefore
+
+    -- ** GoogleFirestoreAdminV1ImportDocumentsMetadata
+    , GoogleFirestoreAdminV1ImportDocumentsMetadata
+    , googleFirestoreAdminV1ImportDocumentsMetadata
+    , gfavidmProgressBytes
+    , gfavidmStartTime
+    , gfavidmInputURIPrefix
+    , gfavidmCollectionIds
+    , gfavidmProgressDocuments
+    , gfavidmEndTime
+    , gfavidmOperationState
+
+    -- ** BeginTransactionRequest
+    , BeginTransactionRequest
+    , beginTransactionRequest
+    , btrOptions
+
+    -- ** RunQueryRequest
+    , RunQueryRequest
+    , runQueryRequest
+    , rqrReadTime
+    , rqrNewTransaction
+    , rqrStructuredQuery
+    , rqrTransaction
+
+    -- ** GoogleFirestoreAdminV1IndexConfigDelta
+    , GoogleFirestoreAdminV1IndexConfigDelta
+    , googleFirestoreAdminV1IndexConfigDelta
+    , gfavicdIndex
+    , gfavicdChangeType
+
+    -- ** GoogleFirestoreAdminV1IndexConfig
+    , GoogleFirestoreAdminV1IndexConfig
+    , googleFirestoreAdminV1IndexConfig
+    , gfavicAncestorField
+    , gfavicReverting
+    , gfavicIndexes
+    , gfavicUsesAncestorConfig
+
+    -- ** GoogleFirestoreAdminV1IndexField
+    , GoogleFirestoreAdminV1IndexField
+    , googleFirestoreAdminV1IndexField
+    , gfavifFieldPath
+    , gfavifArrayConfig
+    , gfavifOrder
+
+    -- ** Write
+    , Write
+    , write
+    , wTransform
+    , wUpdateMask
+    , wCurrentDocument
+    , wDelete
+    , wUpdate
+
+    -- ** Location
+    , Location
+    , location
+    , lName
+    , lMetadata
+    , lDisplayName
+    , lLabels
+    , lLocationId
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** BatchGetDocumentsResponse
+    , BatchGetDocumentsResponse
+    , batchGetDocumentsResponse
+    , bgdrReadTime
+    , bgdrFound
+    , bgdrTransaction
+    , bgdrMissing
+
+    -- ** CompositeFilter
+    , CompositeFilter
+    , compositeFilter
+    , cfOp
+    , cfFilters
+
+    -- ** DocumentsTarget
+    , DocumentsTarget
+    , documentsTarget
+    , dtDocuments
+
+    -- ** ListenRequestLabels
+    , ListenRequestLabels
+    , listenRequestLabels
+    , lrlAddtional
+
+    -- ** GoogleFirestoreAdminV1Index
+    , GoogleFirestoreAdminV1Index
+    , googleFirestoreAdminV1Index
+    , gfaviState
+    , gfaviQueryScope
+    , gfaviName
+    , gfaviFields
+
+    -- ** BeginTransactionResponse
+    , BeginTransactionResponse
+    , beginTransactionResponse
+    , btrTransaction
+
+    -- ** RunQueryResponse
+    , RunQueryResponse
+    , runQueryResponse
+    , rReadTime
+    , rSkippedResults
+    , rTransaction
+    , rDocument
+
+    -- ** GoogleFirestoreAdminV1IndexQueryScope
+    , GoogleFirestoreAdminV1IndexQueryScope (..)
+
+    -- ** GoogleFirestoreAdminV1ExportDocumentsMetadata
+    , GoogleFirestoreAdminV1ExportDocumentsMetadata
+    , googleFirestoreAdminV1ExportDocumentsMetadata
+    , gfavedmProgressBytes
+    , gfavedmStartTime
+    , gfavedmCollectionIds
+    , gfavedmProgressDocuments
+    , gfavedmEndTime
+    , gfavedmOperationState
+    , gfavedmOutputURIPrefix
+
+    -- ** GoogleFirestoreAdminV1Progress
+    , GoogleFirestoreAdminV1Progress
+    , googleFirestoreAdminV1Progress
+    , gfavpCompletedWork
+    , gfavpEstimatedWork
+
+    -- ** DocumentMask
+    , DocumentMask
+    , documentMask
+    , dmFieldPaths
+
+    -- ** QueryTarget
+    , QueryTarget
+    , queryTarget
+    , qtParent
+    , qtStructuredQuery
+
+    -- ** Value
+    , Value
+    , value
+    , vGeoPointValue
+    , vBytesValue
+    , vIntegerValue
+    , vTimestampValue
+    , vDoubleValue
+    , vStringValue
+    , vBooleanValue
+    , vMapValue
+    , vArrayValue
+    , vReferenceValue
+    , vNullValue
+
+    -- ** OrderDirection
+    , OrderDirection (..)
+
+    -- ** ValueNullValue
+    , ValueNullValue (..)
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** DocumentTransform
+    , DocumentTransform
+    , documentTransform
+    , dtDocument
+    , dtFieldTransforms
+
+    -- ** StructuredQuery
+    , StructuredQuery
+    , structuredQuery
+    , sqWhere
+    , sqOrderBy
+    , sqStartAt
+    , sqOffSet
+    , sqFrom
+    , sqEndAt
+    , sqLimit
+    , sqSelect
+
+    -- ** ExistenceFilter
+    , ExistenceFilter
+    , existenceFilter
+    , efTargetId
+    , efCount
+
+    -- ** GoogleFirestoreAdminV1ListFieldsResponse
+    , GoogleFirestoreAdminV1ListFieldsResponse
+    , googleFirestoreAdminV1ListFieldsResponse
+    , gfavlfrNextPageToken
+    , gfavlfrFields
+
+    -- ** GoogleFirestoreAdminV1ImportDocumentsRequest
+    , GoogleFirestoreAdminV1ImportDocumentsRequest
+    , googleFirestoreAdminV1ImportDocumentsRequest
+    , gfavidrInputURIPrefix
+    , gfavidrCollectionIds
+
+    -- ** GoogleFirestoreAdminV1LocationMetadata
+    , GoogleFirestoreAdminV1LocationMetadata
+    , googleFirestoreAdminV1LocationMetadata
+
+    -- ** GoogleLongrunningCancelOperationRequest
+    , GoogleLongrunningCancelOperationRequest
+    , googleLongrunningCancelOperationRequest
+
+    -- ** UnaryFilterOp
+    , UnaryFilterOp (..)
+
+    -- ** ListCollectionIdsResponse
+    , ListCollectionIdsResponse
+    , listCollectionIdsResponse
+    , lcirNextPageToken
+    , lcirCollectionIds
+
+    -- ** FieldReference
+    , FieldReference
+    , fieldReference
+    , frFieldPath
+
+    -- ** DocumentRemove
+    , DocumentRemove
+    , documentRemove
+    , drReadTime
+    , drDocument
+    , drRemovedTargetIds
+
+    -- ** GoogleFirestoreAdminV1IndexFieldArrayConfig
+    , GoogleFirestoreAdminV1IndexFieldArrayConfig (..)
+
+    -- ** DocumentChange
+    , DocumentChange
+    , documentChange
+    , dcDocument
+    , dcTargetIds
+    , dcRemovedTargetIds
+
+    -- ** GoogleFirestoreAdminV1FieldOperationMetadata
+    , GoogleFirestoreAdminV1FieldOperationMetadata
+    , googleFirestoreAdminV1FieldOperationMetadata
+    , gfavfomProgressBytes
+    , gfavfomState
+    , gfavfomField
+    , gfavfomStartTime
+    , gfavfomProgressDocuments
+    , gfavfomIndexConfigDeltas
+    , gfavfomEndTime
+
+    -- ** GoogleFirestoreAdminV1ListIndexesResponse
+    , GoogleFirestoreAdminV1ListIndexesResponse
+    , googleFirestoreAdminV1ListIndexesResponse
+    , gfavlirNextPageToken
+    , gfavlirIndexes
+
+    -- ** MapValue
+    , MapValue
+    , mapValue
+    , mvFields
+
+    -- ** BatchGetDocumentsRequest
+    , BatchGetDocumentsRequest
+    , batchGetDocumentsRequest
+    , bReadTime
+    , bNewTransaction
+    , bTransaction
+    , bDocuments
+    , bMask
+
+    -- ** Document
+    , Document
+    , document
+    , dUpdateTime
+    , dName
+    , dCreateTime
+    , dFields
+
+    -- ** GoogleFirestoreAdminV1IndexOperationMetadataState
+    , GoogleFirestoreAdminV1IndexOperationMetadataState (..)
+
+    -- ** ArrayValue
+    , ArrayValue
+    , arrayValue
+    , avValues
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** CommitResponse
+    , CommitResponse
+    , commitResponse
+    , crCommitTime
+    , crWriteResults
+
+    -- ** ListenResponse
+    , ListenResponse
+    , listenResponse
+    , lrTargetChange
+    , lrDocumentRemove
+    , lrDocumentChange
+    , lrFilter
+    , lrDocumentDelete
+
+    -- ** FieldFilter
+    , FieldFilter
+    , fieldFilter
+    , ffOp
+    , ffField
+    , ffValue
+
+    -- ** GoogleLongrunningOperationResponse
+    , GoogleLongrunningOperationResponse
+    , googleLongrunningOperationResponse
+    , glorAddtional
+
+    -- ** ListDocumentsResponse
+    , ListDocumentsResponse
+    , listDocumentsResponse
+    , ldrNextPageToken
+    , ldrDocuments
+
+    -- ** GoogleFirestoreAdminV1ExportDocumentsResponse
+    , GoogleFirestoreAdminV1ExportDocumentsResponse
+    , googleFirestoreAdminV1ExportDocumentsResponse
+    , gOutputURIPrefix
+
+    -- ** FieldFilterOp
+    , FieldFilterOp (..)
+
+    -- ** Projection
+    , Projection
+    , projection
+    , pFields
+
+    -- ** Filter
+    , Filter
+    , filter'
+    , fCompositeFilter
+    , fFieldFilter
+    , fUnaryFilter
+
+    -- ** TargetChangeTargetChangeType
+    , TargetChangeTargetChangeType (..)
+
+    -- ** GoogleFirestoreAdminV1IndexOperationMetadata
+    , GoogleFirestoreAdminV1IndexOperationMetadata
+    , googleFirestoreAdminV1IndexOperationMetadata
+    , gfaviomProgressBytes
+    , gfaviomState
+    , gfaviomStartTime
+    , gfaviomProgressDocuments
+    , gfaviomEndTime
+    , gfaviomIndex
+
+    -- ** LocationLabels
+    , LocationLabels
+    , locationLabels
+    , llAddtional
+
+    -- ** ListenRequest
+    , ListenRequest
+    , listenRequest
+    , lrRemoveTarget
+    , lrLabels
+    , lrAddTarget
+
+    -- ** GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState
+    , GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState (..)
+
+    -- ** CommitRequest
+    , CommitRequest
+    , commitRequest
+    , crTransaction
+    , crWrites
+
+    -- ** LocationMetadata
+    , LocationMetadata
+    , locationMetadata
+    , lmAddtional
+
+    -- ** GoogleLongrunningListOperationsResponse
+    , GoogleLongrunningListOperationsResponse
+    , googleLongrunningListOperationsResponse
+    , gllorNextPageToken
+    , gllorOperations
+
+    -- ** GoogleFirestoreAdminV1FieldOperationMetadataState
+    , GoogleFirestoreAdminV1FieldOperationMetadataState (..)
+
+    -- ** CollectionSelector
+    , CollectionSelector
+    , collectionSelector
+    , csAllDescendants
+    , csCollectionId
+
+    -- ** ListCollectionIdsRequest
+    , ListCollectionIdsRequest
+    , listCollectionIdsRequest
+    , lcirPageToken
+    , lcirPageSize
+
+    -- ** WriteResponse
+    , WriteResponse
+    , writeResponse
+    , wStreamToken
+    , wCommitTime
+    , wWriteResults
+    , wStreamId
+
+    -- ** Order
+    , Order
+    , order
+    , oField
+    , oDirection
+
+    -- ** DocumentDelete
+    , DocumentDelete
+    , documentDelete
+    , ddReadTime
+    , ddDocument
+    , ddRemovedTargetIds
+
+    -- ** FieldTransform
+    , FieldTransform
+    , fieldTransform
+    , ftFieldPath
+    , ftAppendMissingElements
+    , ftSetToServerValue
+    , ftRemoveAllFromArray
+
+    -- ** MapValueFields
+    , MapValueFields
+    , mapValueFields
+    , mvfAddtional
+
+    -- ** DocumentFields
+    , DocumentFields
+    , documentFields
+    , dfAddtional
+
+    -- ** ReadOnly
+    , ReadOnly
+    , readOnly
+    , roReadTime
+
+    -- ** Target
+    , Target
+    , target
+    , tTargetId
+    , tOnce
+    , tReadTime
+    , tResumeToken
+    , tDocuments
+    , tQuery
+
+    -- ** WriteRequestLabels
+    , WriteRequestLabels
+    , writeRequestLabels
+    , wrlAddtional
+
+    -- ** FieldTransformSetToServerValue
+    , FieldTransformSetToServerValue (..)
+
+    -- ** GoogleLongrunningOperation
+    , GoogleLongrunningOperation
+    , googleLongrunningOperation
+    , gloDone
+    , gloError
+    , gloResponse
+    , gloName
+    , gloMetadata
+
+    -- ** GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState
+    , GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState (..)
+
+    -- ** UnaryFilter
+    , UnaryFilter
+    , unaryFilter
+    , ufOp
+    , ufField
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Get
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.List
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Patch
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Create
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Delete
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Get
+import           Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.List
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.BatchGet
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.BeginTransaction
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Commit
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.CreateDocument
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Delete
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Get
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.List
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.ListCollectionIds
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Listen
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Patch
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Rollback
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.RunQuery
+import           Network.Google.Resource.FireStore.Projects.Databases.Documents.Write
+import           Network.Google.Resource.FireStore.Projects.Databases.ExportDocuments
+import           Network.Google.Resource.FireStore.Projects.Databases.ImportDocuments
+import           Network.Google.Resource.FireStore.Projects.Databases.Operations.Cancel
+import           Network.Google.Resource.FireStore.Projects.Databases.Operations.Delete
+import           Network.Google.Resource.FireStore.Projects.Databases.Operations.Get
+import           Network.Google.Resource.FireStore.Projects.Databases.Operations.List
+import           Network.Google.Resource.FireStore.Projects.Locations.Get
+import           Network.Google.Resource.FireStore.Projects.Locations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Firestore API service.
+type FireStoreAPI =
+     ProjectsLocationsListResource :<|>
+       ProjectsLocationsGetResource
+       :<|>
+       ProjectsDatabasesDocumentsListCollectionIdsResource
+       :<|> ProjectsDatabasesDocumentsListResource
+       :<|> ProjectsDatabasesDocumentsWriteResource
+       :<|> ProjectsDatabasesDocumentsCreateDocumentResource
+       :<|>
+       ProjectsDatabasesDocumentsBeginTransactionResource
+       :<|> ProjectsDatabasesDocumentsRunQueryResource
+       :<|> ProjectsDatabasesDocumentsPatchResource
+       :<|> ProjectsDatabasesDocumentsGetResource
+       :<|> ProjectsDatabasesDocumentsRollbackResource
+       :<|> ProjectsDatabasesDocumentsBatchGetResource
+       :<|> ProjectsDatabasesDocumentsDeleteResource
+       :<|> ProjectsDatabasesDocumentsListenResource
+       :<|> ProjectsDatabasesDocumentsCommitResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsIndexesListResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsIndexesGetResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsIndexesCreateResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsIndexesDeleteResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsFieldsListResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsFieldsPatchResource
+       :<|>
+       ProjectsDatabasesCollectionGroupsFieldsGetResource
+       :<|> ProjectsDatabasesOperationsListResource
+       :<|> ProjectsDatabasesOperationsGetResource
+       :<|> ProjectsDatabasesOperationsCancelResource
+       :<|> ProjectsDatabasesOperationsDeleteResource
+       :<|> ProjectsDatabasesExportDocumentsResource
+       :<|> ProjectsDatabasesImportDocumentsResource
diff --git a/gen/Network/Google/FireStore/Types.hs b/gen/Network/Google/FireStore/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FireStore/Types.hs
@@ -0,0 +1,629 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.FireStore.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.FireStore.Types
+    (
+    -- * Service Configuration
+      fireStoreService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+    , datastoreScope
+
+    -- * WriteRequest
+    , WriteRequest
+    , writeRequest
+    , wrStreamToken
+    , wrLabels
+    , wrWrites
+    , wrStreamId
+
+    -- * LatLng
+    , LatLng
+    , latLng
+    , llLatitude
+    , llLongitude
+
+    -- * GoogleFirestoreAdminV1IndexFieldOrder
+    , GoogleFirestoreAdminV1IndexFieldOrder (..)
+
+    -- * WriteResult
+    , WriteResult
+    , writeResult
+    , wrUpdateTime
+    , wrTransformResults
+
+    -- * GoogleFirestoreAdminV1Field
+    , GoogleFirestoreAdminV1Field
+    , googleFirestoreAdminV1Field
+    , gfavfIndexConfig
+    , gfavfName
+
+    -- * TransactionOptions
+    , TransactionOptions
+    , transactionOptions
+    , toReadWrite
+    , toReadOnly
+
+    -- * GoogleFirestoreAdminV1IndexConfigDeltaChangeType
+    , GoogleFirestoreAdminV1IndexConfigDeltaChangeType (..)
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * GoogleLongrunningOperationMetadata
+    , GoogleLongrunningOperationMetadata
+    , googleLongrunningOperationMetadata
+    , glomAddtional
+
+    -- * Precondition
+    , Precondition
+    , precondition
+    , pExists
+    , pUpdateTime
+
+    -- * ReadWrite
+    , ReadWrite
+    , readWrite
+    , rwRetryTransaction
+
+    -- * RollbackRequest
+    , RollbackRequest
+    , rollbackRequest
+    , rrTransaction
+
+    -- * GoogleFirestoreAdminV1ExportDocumentsRequest
+    , GoogleFirestoreAdminV1ExportDocumentsRequest
+    , googleFirestoreAdminV1ExportDocumentsRequest
+    , gfavedrCollectionIds
+    , gfavedrOutputURIPrefix
+
+    -- * TargetChange
+    , TargetChange
+    , targetChange
+    , tcReadTime
+    , tcResumeToken
+    , tcCause
+    , tcTargetChangeType
+    , tcTargetIds
+
+    -- * ListLocationsResponse
+    , ListLocationsResponse
+    , listLocationsResponse
+    , llrNextPageToken
+    , llrLocations
+
+    -- * GoogleFirestoreAdminV1IndexState
+    , GoogleFirestoreAdminV1IndexState (..)
+
+    -- * CompositeFilterOp
+    , CompositeFilterOp (..)
+
+    -- * Cursor
+    , Cursor
+    , cursor
+    , cValues
+    , cBefore
+
+    -- * GoogleFirestoreAdminV1ImportDocumentsMetadata
+    , GoogleFirestoreAdminV1ImportDocumentsMetadata
+    , googleFirestoreAdminV1ImportDocumentsMetadata
+    , gfavidmProgressBytes
+    , gfavidmStartTime
+    , gfavidmInputURIPrefix
+    , gfavidmCollectionIds
+    , gfavidmProgressDocuments
+    , gfavidmEndTime
+    , gfavidmOperationState
+
+    -- * BeginTransactionRequest
+    , BeginTransactionRequest
+    , beginTransactionRequest
+    , btrOptions
+
+    -- * RunQueryRequest
+    , RunQueryRequest
+    , runQueryRequest
+    , rqrReadTime
+    , rqrNewTransaction
+    , rqrStructuredQuery
+    , rqrTransaction
+
+    -- * GoogleFirestoreAdminV1IndexConfigDelta
+    , GoogleFirestoreAdminV1IndexConfigDelta
+    , googleFirestoreAdminV1IndexConfigDelta
+    , gfavicdIndex
+    , gfavicdChangeType
+
+    -- * GoogleFirestoreAdminV1IndexConfig
+    , GoogleFirestoreAdminV1IndexConfig
+    , googleFirestoreAdminV1IndexConfig
+    , gfavicAncestorField
+    , gfavicReverting
+    , gfavicIndexes
+    , gfavicUsesAncestorConfig
+
+    -- * GoogleFirestoreAdminV1IndexField
+    , GoogleFirestoreAdminV1IndexField
+    , googleFirestoreAdminV1IndexField
+    , gfavifFieldPath
+    , gfavifArrayConfig
+    , gfavifOrder
+
+    -- * Write
+    , Write
+    , write
+    , wTransform
+    , wUpdateMask
+    , wCurrentDocument
+    , wDelete
+    , wUpdate
+
+    -- * Location
+    , Location
+    , location
+    , lName
+    , lMetadata
+    , lDisplayName
+    , lLabels
+    , lLocationId
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * BatchGetDocumentsResponse
+    , BatchGetDocumentsResponse
+    , batchGetDocumentsResponse
+    , bgdrReadTime
+    , bgdrFound
+    , bgdrTransaction
+    , bgdrMissing
+
+    -- * CompositeFilter
+    , CompositeFilter
+    , compositeFilter
+    , cfOp
+    , cfFilters
+
+    -- * DocumentsTarget
+    , DocumentsTarget
+    , documentsTarget
+    , dtDocuments
+
+    -- * ListenRequestLabels
+    , ListenRequestLabels
+    , listenRequestLabels
+    , lrlAddtional
+
+    -- * GoogleFirestoreAdminV1Index
+    , GoogleFirestoreAdminV1Index
+    , googleFirestoreAdminV1Index
+    , gfaviState
+    , gfaviQueryScope
+    , gfaviName
+    , gfaviFields
+
+    -- * BeginTransactionResponse
+    , BeginTransactionResponse
+    , beginTransactionResponse
+    , btrTransaction
+
+    -- * RunQueryResponse
+    , RunQueryResponse
+    , runQueryResponse
+    , rReadTime
+    , rSkippedResults
+    , rTransaction
+    , rDocument
+
+    -- * GoogleFirestoreAdminV1IndexQueryScope
+    , GoogleFirestoreAdminV1IndexQueryScope (..)
+
+    -- * GoogleFirestoreAdminV1ExportDocumentsMetadata
+    , GoogleFirestoreAdminV1ExportDocumentsMetadata
+    , googleFirestoreAdminV1ExportDocumentsMetadata
+    , gfavedmProgressBytes
+    , gfavedmStartTime
+    , gfavedmCollectionIds
+    , gfavedmProgressDocuments
+    , gfavedmEndTime
+    , gfavedmOperationState
+    , gfavedmOutputURIPrefix
+
+    -- * GoogleFirestoreAdminV1Progress
+    , GoogleFirestoreAdminV1Progress
+    , googleFirestoreAdminV1Progress
+    , gfavpCompletedWork
+    , gfavpEstimatedWork
+
+    -- * DocumentMask
+    , DocumentMask
+    , documentMask
+    , dmFieldPaths
+
+    -- * QueryTarget
+    , QueryTarget
+    , queryTarget
+    , qtParent
+    , qtStructuredQuery
+
+    -- * Value
+    , Value
+    , value
+    , vGeoPointValue
+    , vBytesValue
+    , vIntegerValue
+    , vTimestampValue
+    , vDoubleValue
+    , vStringValue
+    , vBooleanValue
+    , vMapValue
+    , vArrayValue
+    , vReferenceValue
+    , vNullValue
+
+    -- * OrderDirection
+    , OrderDirection (..)
+
+    -- * ValueNullValue
+    , ValueNullValue (..)
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * DocumentTransform
+    , DocumentTransform
+    , documentTransform
+    , dtDocument
+    , dtFieldTransforms
+
+    -- * StructuredQuery
+    , StructuredQuery
+    , structuredQuery
+    , sqWhere
+    , sqOrderBy
+    , sqStartAt
+    , sqOffSet
+    , sqFrom
+    , sqEndAt
+    , sqLimit
+    , sqSelect
+
+    -- * ExistenceFilter
+    , ExistenceFilter
+    , existenceFilter
+    , efTargetId
+    , efCount
+
+    -- * GoogleFirestoreAdminV1ListFieldsResponse
+    , GoogleFirestoreAdminV1ListFieldsResponse
+    , googleFirestoreAdminV1ListFieldsResponse
+    , gfavlfrNextPageToken
+    , gfavlfrFields
+
+    -- * GoogleFirestoreAdminV1ImportDocumentsRequest
+    , GoogleFirestoreAdminV1ImportDocumentsRequest
+    , googleFirestoreAdminV1ImportDocumentsRequest
+    , gfavidrInputURIPrefix
+    , gfavidrCollectionIds
+
+    -- * GoogleFirestoreAdminV1LocationMetadata
+    , GoogleFirestoreAdminV1LocationMetadata
+    , googleFirestoreAdminV1LocationMetadata
+
+    -- * GoogleLongrunningCancelOperationRequest
+    , GoogleLongrunningCancelOperationRequest
+    , googleLongrunningCancelOperationRequest
+
+    -- * UnaryFilterOp
+    , UnaryFilterOp (..)
+
+    -- * ListCollectionIdsResponse
+    , ListCollectionIdsResponse
+    , listCollectionIdsResponse
+    , lcirNextPageToken
+    , lcirCollectionIds
+
+    -- * FieldReference
+    , FieldReference
+    , fieldReference
+    , frFieldPath
+
+    -- * DocumentRemove
+    , DocumentRemove
+    , documentRemove
+    , drReadTime
+    , drDocument
+    , drRemovedTargetIds
+
+    -- * GoogleFirestoreAdminV1IndexFieldArrayConfig
+    , GoogleFirestoreAdminV1IndexFieldArrayConfig (..)
+
+    -- * DocumentChange
+    , DocumentChange
+    , documentChange
+    , dcDocument
+    , dcTargetIds
+    , dcRemovedTargetIds
+
+    -- * GoogleFirestoreAdminV1FieldOperationMetadata
+    , GoogleFirestoreAdminV1FieldOperationMetadata
+    , googleFirestoreAdminV1FieldOperationMetadata
+    , gfavfomProgressBytes
+    , gfavfomState
+    , gfavfomField
+    , gfavfomStartTime
+    , gfavfomProgressDocuments
+    , gfavfomIndexConfigDeltas
+    , gfavfomEndTime
+
+    -- * GoogleFirestoreAdminV1ListIndexesResponse
+    , GoogleFirestoreAdminV1ListIndexesResponse
+    , googleFirestoreAdminV1ListIndexesResponse
+    , gfavlirNextPageToken
+    , gfavlirIndexes
+
+    -- * MapValue
+    , MapValue
+    , mapValue
+    , mvFields
+
+    -- * BatchGetDocumentsRequest
+    , BatchGetDocumentsRequest
+    , batchGetDocumentsRequest
+    , bReadTime
+    , bNewTransaction
+    , bTransaction
+    , bDocuments
+    , bMask
+
+    -- * Document
+    , Document
+    , document
+    , dUpdateTime
+    , dName
+    , dCreateTime
+    , dFields
+
+    -- * GoogleFirestoreAdminV1IndexOperationMetadataState
+    , GoogleFirestoreAdminV1IndexOperationMetadataState (..)
+
+    -- * ArrayValue
+    , ArrayValue
+    , arrayValue
+    , avValues
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * CommitResponse
+    , CommitResponse
+    , commitResponse
+    , crCommitTime
+    , crWriteResults
+
+    -- * ListenResponse
+    , ListenResponse
+    , listenResponse
+    , lrTargetChange
+    , lrDocumentRemove
+    , lrDocumentChange
+    , lrFilter
+    , lrDocumentDelete
+
+    -- * FieldFilter
+    , FieldFilter
+    , fieldFilter
+    , ffOp
+    , ffField
+    , ffValue
+
+    -- * GoogleLongrunningOperationResponse
+    , GoogleLongrunningOperationResponse
+    , googleLongrunningOperationResponse
+    , glorAddtional
+
+    -- * ListDocumentsResponse
+    , ListDocumentsResponse
+    , listDocumentsResponse
+    , ldrNextPageToken
+    , ldrDocuments
+
+    -- * GoogleFirestoreAdminV1ExportDocumentsResponse
+    , GoogleFirestoreAdminV1ExportDocumentsResponse
+    , googleFirestoreAdminV1ExportDocumentsResponse
+    , gOutputURIPrefix
+
+    -- * FieldFilterOp
+    , FieldFilterOp (..)
+
+    -- * Projection
+    , Projection
+    , projection
+    , pFields
+
+    -- * Filter
+    , Filter
+    , filter'
+    , fCompositeFilter
+    , fFieldFilter
+    , fUnaryFilter
+
+    -- * TargetChangeTargetChangeType
+    , TargetChangeTargetChangeType (..)
+
+    -- * GoogleFirestoreAdminV1IndexOperationMetadata
+    , GoogleFirestoreAdminV1IndexOperationMetadata
+    , googleFirestoreAdminV1IndexOperationMetadata
+    , gfaviomProgressBytes
+    , gfaviomState
+    , gfaviomStartTime
+    , gfaviomProgressDocuments
+    , gfaviomEndTime
+    , gfaviomIndex
+
+    -- * LocationLabels
+    , LocationLabels
+    , locationLabels
+    , llAddtional
+
+    -- * ListenRequest
+    , ListenRequest
+    , listenRequest
+    , lrRemoveTarget
+    , lrLabels
+    , lrAddTarget
+
+    -- * GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState
+    , GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState (..)
+
+    -- * CommitRequest
+    , CommitRequest
+    , commitRequest
+    , crTransaction
+    , crWrites
+
+    -- * LocationMetadata
+    , LocationMetadata
+    , locationMetadata
+    , lmAddtional
+
+    -- * GoogleLongrunningListOperationsResponse
+    , GoogleLongrunningListOperationsResponse
+    , googleLongrunningListOperationsResponse
+    , gllorNextPageToken
+    , gllorOperations
+
+    -- * GoogleFirestoreAdminV1FieldOperationMetadataState
+    , GoogleFirestoreAdminV1FieldOperationMetadataState (..)
+
+    -- * CollectionSelector
+    , CollectionSelector
+    , collectionSelector
+    , csAllDescendants
+    , csCollectionId
+
+    -- * ListCollectionIdsRequest
+    , ListCollectionIdsRequest
+    , listCollectionIdsRequest
+    , lcirPageToken
+    , lcirPageSize
+
+    -- * WriteResponse
+    , WriteResponse
+    , writeResponse
+    , wStreamToken
+    , wCommitTime
+    , wWriteResults
+    , wStreamId
+
+    -- * Order
+    , Order
+    , order
+    , oField
+    , oDirection
+
+    -- * DocumentDelete
+    , DocumentDelete
+    , documentDelete
+    , ddReadTime
+    , ddDocument
+    , ddRemovedTargetIds
+
+    -- * FieldTransform
+    , FieldTransform
+    , fieldTransform
+    , ftFieldPath
+    , ftAppendMissingElements
+    , ftSetToServerValue
+    , ftRemoveAllFromArray
+
+    -- * MapValueFields
+    , MapValueFields
+    , mapValueFields
+    , mvfAddtional
+
+    -- * DocumentFields
+    , DocumentFields
+    , documentFields
+    , dfAddtional
+
+    -- * ReadOnly
+    , ReadOnly
+    , readOnly
+    , roReadTime
+
+    -- * Target
+    , Target
+    , target
+    , tTargetId
+    , tOnce
+    , tReadTime
+    , tResumeToken
+    , tDocuments
+    , tQuery
+
+    -- * WriteRequestLabels
+    , WriteRequestLabels
+    , writeRequestLabels
+    , wrlAddtional
+
+    -- * FieldTransformSetToServerValue
+    , FieldTransformSetToServerValue (..)
+
+    -- * GoogleLongrunningOperation
+    , GoogleLongrunningOperation
+    , googleLongrunningOperation
+    , gloDone
+    , gloError
+    , gloResponse
+    , gloName
+    , gloMetadata
+
+    -- * GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState
+    , GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState (..)
+
+    -- * UnaryFilter
+    , UnaryFilter
+    , unaryFilter
+    , ufOp
+    , ufField
+    ) where
+
+import           Network.Google.FireStore.Types.Product
+import           Network.Google.FireStore.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Cloud Firestore API. This contains the host and root path used as a starting point for constructing service requests.
+fireStoreService :: ServiceConfig
+fireStoreService
+  = defaultService (ServiceId "firestore:v1")
+      "firestore.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
+
+-- | View and manage your Google Cloud Datastore data
+datastoreScope :: Proxy '["https://www.googleapis.com/auth/datastore"]
+datastoreScope = Proxy;
diff --git a/gen/Network/Google/FireStore/Types/Product.hs b/gen/Network/Google/FireStore/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FireStore/Types/Product.hs
@@ -0,0 +1,4925 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.FireStore.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.FireStore.Types.Product where
+
+import           Network.Google.FireStore.Types.Sum
+import           Network.Google.Prelude
+
+-- | The request for Firestore.Write. The first request creates a stream, or
+-- resumes an existing one from a token. When creating a new stream, the
+-- server replies with a response containing only an ID and a token, to use
+-- in the next request. When resuming a stream, the server first streams
+-- any responses later than the given token, then a response containing
+-- only an up-to-date token, to use in the next request.
+--
+-- /See:/ 'writeRequest' smart constructor.
+data WriteRequest = WriteRequest'
+    { _wrStreamToken :: !(Maybe Bytes)
+    , _wrLabels      :: !(Maybe WriteRequestLabels)
+    , _wrWrites      :: !(Maybe [Write])
+    , _wrStreamId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wrStreamToken'
+--
+-- * 'wrLabels'
+--
+-- * 'wrWrites'
+--
+-- * 'wrStreamId'
+writeRequest
+    :: WriteRequest
+writeRequest =
+    WriteRequest'
+    { _wrStreamToken = Nothing
+    , _wrLabels = Nothing
+    , _wrWrites = Nothing
+    , _wrStreamId = Nothing
+    }
+
+-- | A stream token that was previously sent by the server. The client should
+-- set this field to the token from the most recent WriteResponse it has
+-- received. This acknowledges that the client has received responses up to
+-- this token. After sending this token, earlier tokens may not be used
+-- anymore. The server may close the stream if there are too many
+-- unacknowledged responses. Leave this field unset when creating a new
+-- stream. To resume a stream at a specific point, set this field and the
+-- \`stream_id\` field. Leave this field unset when creating a new stream.
+wrStreamToken :: Lens' WriteRequest (Maybe ByteString)
+wrStreamToken
+  = lens _wrStreamToken
+      (\ s a -> s{_wrStreamToken = a})
+      . mapping _Bytes
+
+-- | Labels associated with this write request.
+wrLabels :: Lens' WriteRequest (Maybe WriteRequestLabels)
+wrLabels = lens _wrLabels (\ s a -> s{_wrLabels = a})
+
+-- | The writes to apply. Always executed atomically and in order. This must
+-- be empty on the first request. This may be empty on the last request.
+-- This must not be empty on all other requests.
+wrWrites :: Lens' WriteRequest [Write]
+wrWrites
+  = lens _wrWrites (\ s a -> s{_wrWrites = a}) .
+      _Default
+      . _Coerce
+
+-- | The ID of the write stream to resume. This may only be set in the first
+-- message. When left empty, a new write stream will be created.
+wrStreamId :: Lens' WriteRequest (Maybe Text)
+wrStreamId
+  = lens _wrStreamId (\ s a -> s{_wrStreamId = a})
+
+instance FromJSON WriteRequest where
+        parseJSON
+          = withObject "WriteRequest"
+              (\ o ->
+                 WriteRequest' <$>
+                   (o .:? "streamToken") <*> (o .:? "labels") <*>
+                     (o .:? "writes" .!= mempty)
+                     <*> (o .:? "streamId"))
+
+instance ToJSON WriteRequest where
+        toJSON WriteRequest'{..}
+          = object
+              (catMaybes
+                 [("streamToken" .=) <$> _wrStreamToken,
+                  ("labels" .=) <$> _wrLabels,
+                  ("writes" .=) <$> _wrWrites,
+                  ("streamId" .=) <$> _wrStreamId])
+
+-- | An object representing a latitude\/longitude pair. This is expressed as
+-- a pair of doubles representing degrees latitude and degrees longitude.
+-- Unless specified otherwise, this must conform to the
+-- <http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf WGS84 standard>.
+-- Values must be within normalized ranges.
+--
+-- /See:/ 'latLng' smart constructor.
+data LatLng = LatLng'
+    { _llLatitude  :: !(Maybe (Textual Double))
+    , _llLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LatLng' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llLatitude'
+--
+-- * 'llLongitude'
+latLng
+    :: LatLng
+latLng =
+    LatLng'
+    { _llLatitude = Nothing
+    , _llLongitude = Nothing
+    }
+
+-- | The latitude in degrees. It must be in the range [-90.0, +90.0].
+llLatitude :: Lens' LatLng (Maybe Double)
+llLatitude
+  = lens _llLatitude (\ s a -> s{_llLatitude = a}) .
+      mapping _Coerce
+
+-- | The longitude in degrees. It must be in the range [-180.0, +180.0].
+llLongitude :: Lens' LatLng (Maybe Double)
+llLongitude
+  = lens _llLongitude (\ s a -> s{_llLongitude = a}) .
+      mapping _Coerce
+
+instance FromJSON LatLng where
+        parseJSON
+          = withObject "LatLng"
+              (\ o ->
+                 LatLng' <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON LatLng where
+        toJSON LatLng'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _llLatitude,
+                  ("longitude" .=) <$> _llLongitude])
+
+-- | The result of applying a write.
+--
+-- /See:/ 'writeResult' smart constructor.
+data WriteResult = WriteResult'
+    { _wrUpdateTime       :: !(Maybe DateTime')
+    , _wrTransformResults :: !(Maybe [Value])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wrUpdateTime'
+--
+-- * 'wrTransformResults'
+writeResult
+    :: WriteResult
+writeResult =
+    WriteResult'
+    { _wrUpdateTime = Nothing
+    , _wrTransformResults = Nothing
+    }
+
+-- | The last update time of the document after applying the write. Not set
+-- after a \`delete\`. If the write did not actually change the document,
+-- this will be the previous update_time.
+wrUpdateTime :: Lens' WriteResult (Maybe UTCTime)
+wrUpdateTime
+  = lens _wrUpdateTime (\ s a -> s{_wrUpdateTime = a})
+      . mapping _DateTime
+
+-- | The results of applying each DocumentTransform.FieldTransform, in the
+-- same order.
+wrTransformResults :: Lens' WriteResult [Value]
+wrTransformResults
+  = lens _wrTransformResults
+      (\ s a -> s{_wrTransformResults = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON WriteResult where
+        parseJSON
+          = withObject "WriteResult"
+              (\ o ->
+                 WriteResult' <$>
+                   (o .:? "updateTime") <*>
+                     (o .:? "transformResults" .!= mempty))
+
+instance ToJSON WriteResult where
+        toJSON WriteResult'{..}
+          = object
+              (catMaybes
+                 [("updateTime" .=) <$> _wrUpdateTime,
+                  ("transformResults" .=) <$> _wrTransformResults])
+
+-- | Represents a single field in the database. Fields are grouped by their
+-- \"Collection Group\", which represent all collections in the database
+-- with the same id.
+--
+-- /See:/ 'googleFirestoreAdminV1Field' smart constructor.
+data GoogleFirestoreAdminV1Field = GoogleFirestoreAdminV1Field'
+    { _gfavfIndexConfig :: !(Maybe GoogleFirestoreAdminV1IndexConfig)
+    , _gfavfName        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1Field' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavfIndexConfig'
+--
+-- * 'gfavfName'
+googleFirestoreAdminV1Field
+    :: GoogleFirestoreAdminV1Field
+googleFirestoreAdminV1Field =
+    GoogleFirestoreAdminV1Field'
+    { _gfavfIndexConfig = Nothing
+    , _gfavfName = Nothing
+    }
+
+-- | The index configuration for this field. If unset, field indexing will
+-- revert to the configuration defined by the \`ancestor_field\`. To
+-- explicitly remove all indexes for this field, specify an index config
+-- with an empty list of indexes.
+gfavfIndexConfig :: Lens' GoogleFirestoreAdminV1Field (Maybe GoogleFirestoreAdminV1IndexConfig)
+gfavfIndexConfig
+  = lens _gfavfIndexConfig
+      (\ s a -> s{_gfavfIndexConfig = a})
+
+-- | A field name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/fields\/{field_path}\`
+-- A field path may be a simple field name, e.g. \`address\` or a path to
+-- fields within map_value , e.g. \`address.city\`, or a special field
+-- path. The only valid special field is \`*\`, which represents any field.
+-- Field paths may be quoted using \` (backtick). The only character that
+-- needs to be escaped within a quoted field path is the backtick character
+-- itself, escaped using a backslash. Special characters in field paths
+-- that must be quoted include: \`*\`, \`.\`, \`\`\` (backtick), \`[\`,
+-- \`]\`, as well as any ascii symbolic characters. Examples: (Note:
+-- Comments here are written in markdown syntax, so there is an additional
+-- layer of backticks to represent a code block) \`\\\`address.city\\\`\`
+-- represents a field named \`address.city\`, not the map key \`city\` in
+-- the field \`address\`. \`\\\`*\\\`\` represents a field named \`*\`, not
+-- any field. A special \`Field\` contains the default indexing settings
+-- for all fields. This field\'s resource name is:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/__default__\/fields\/*\`
+-- Indexes defined on this \`Field\` will be applied to all fields which do
+-- not have their own \`Field\` index configuration.
+gfavfName :: Lens' GoogleFirestoreAdminV1Field (Maybe Text)
+gfavfName
+  = lens _gfavfName (\ s a -> s{_gfavfName = a})
+
+instance FromJSON GoogleFirestoreAdminV1Field where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1Field"
+              (\ o ->
+                 GoogleFirestoreAdminV1Field' <$>
+                   (o .:? "indexConfig") <*> (o .:? "name"))
+
+instance ToJSON GoogleFirestoreAdminV1Field where
+        toJSON GoogleFirestoreAdminV1Field'{..}
+          = object
+              (catMaybes
+                 [("indexConfig" .=) <$> _gfavfIndexConfig,
+                  ("name" .=) <$> _gfavfName])
+
+-- | Options for creating a new transaction.
+--
+-- /See:/ 'transactionOptions' smart constructor.
+data TransactionOptions = TransactionOptions'
+    { _toReadWrite :: !(Maybe ReadWrite)
+    , _toReadOnly  :: !(Maybe ReadOnly)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TransactionOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'toReadWrite'
+--
+-- * 'toReadOnly'
+transactionOptions
+    :: TransactionOptions
+transactionOptions =
+    TransactionOptions'
+    { _toReadWrite = Nothing
+    , _toReadOnly = Nothing
+    }
+
+-- | The transaction can be used for both read and write operations.
+toReadWrite :: Lens' TransactionOptions (Maybe ReadWrite)
+toReadWrite
+  = lens _toReadWrite (\ s a -> s{_toReadWrite = a})
+
+-- | The transaction can only be used for read operations.
+toReadOnly :: Lens' TransactionOptions (Maybe ReadOnly)
+toReadOnly
+  = lens _toReadOnly (\ s a -> s{_toReadOnly = a})
+
+instance FromJSON TransactionOptions where
+        parseJSON
+          = withObject "TransactionOptions"
+              (\ o ->
+                 TransactionOptions' <$>
+                   (o .:? "readWrite") <*> (o .:? "readOnly"))
+
+instance ToJSON TransactionOptions where
+        toJSON TransactionOptions'{..}
+          = object
+              (catMaybes
+                 [("readWrite" .=) <$> _toReadWrite,
+                  ("readOnly" .=) <$> _toReadOnly])
+
+-- | The \`Status\` type defines a logical error model that is suitable for
+-- different programming environments, including REST APIs and RPC APIs. It
+-- is used by [gRPC](https:\/\/github.com\/grpc). The error model is
+-- designed to be: - Simple to use and understand for most users - Flexible
+-- enough to meet unexpected needs # Overview The \`Status\` message
+-- contains three pieces of data: error code, error message, and error
+-- details. The error code should be an enum value of google.rpc.Code, but
+-- it may accept additional error codes if needed. The error message should
+-- be a developer-facing English message that helps developers *understand*
+-- and *resolve* the error. If a localized user-facing error message is
+-- needed, put the localized message in the error details or localize it in
+-- the client. The optional error details may contain arbitrary information
+-- about the error. There is a predefined set of error detail types in the
+-- package \`google.rpc\` that can be used for common error conditions. #
+-- Language mapping The \`Status\` message is the logical representation of
+-- the error model, but it is not necessarily the actual wire format. When
+-- the \`Status\` message is exposed in different client libraries and
+-- different wire protocols, it can be mapped differently. For example, it
+-- will likely be mapped to some exceptions in Java, but more likely mapped
+-- to some error codes in C. # Other uses The error model and the
+-- \`Status\` message can be used in a variety of environments, either with
+-- or without APIs, to provide a consistent developer experience across
+-- different environments. Example uses of this error model include: -
+-- Partial errors. If a service needs to return partial errors to the
+-- client, it may embed the \`Status\` in the normal response to indicate
+-- the partial errors. - Workflow errors. A typical workflow has multiple
+-- steps. Each step may have a \`Status\` message for error reporting. -
+-- Batch operations. If a client uses batch request and batch response, the
+-- \`Status\` message should be used directly inside batch response, one
+-- for each error sub-response. - Asynchronous operations. If an API call
+-- embeds asynchronous operation results in its response, the status of
+-- those operations should be represented directly using the \`Status\`
+-- message. - Logging. If some API errors are stored in logs, the message
+-- \`Status\` could be used directly after any stripping needed for
+-- security\/privacy reasons.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | A developer-facing error message, which should be in English. Any
+-- user-facing error message should be localized and sent in the
+-- google.rpc.Status.details field, or localized by the client.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+--
+-- /See:/ 'googleLongrunningOperationMetadata' smart constructor.
+newtype GoogleLongrunningOperationMetadata = GoogleLongrunningOperationMetadata'
+    { _glomAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleLongrunningOperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glomAddtional'
+googleLongrunningOperationMetadata
+    :: HashMap Text JSONValue -- ^ 'glomAddtional'
+    -> GoogleLongrunningOperationMetadata
+googleLongrunningOperationMetadata pGlomAddtional_ =
+    GoogleLongrunningOperationMetadata'
+    { _glomAddtional = _Coerce # pGlomAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+glomAddtional :: Lens' GoogleLongrunningOperationMetadata (HashMap Text JSONValue)
+glomAddtional
+  = lens _glomAddtional
+      (\ s a -> s{_glomAddtional = a})
+      . _Coerce
+
+instance FromJSON GoogleLongrunningOperationMetadata
+         where
+        parseJSON
+          = withObject "GoogleLongrunningOperationMetadata"
+              (\ o ->
+                 GoogleLongrunningOperationMetadata' <$>
+                   (parseJSONObject o))
+
+instance ToJSON GoogleLongrunningOperationMetadata
+         where
+        toJSON = toJSON . _glomAddtional
+
+-- | A precondition on a document, used for conditional operations.
+--
+-- /See:/ 'precondition' smart constructor.
+data Precondition = Precondition'
+    { _pExists     :: !(Maybe Bool)
+    , _pUpdateTime :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Precondition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pExists'
+--
+-- * 'pUpdateTime'
+precondition
+    :: Precondition
+precondition =
+    Precondition'
+    { _pExists = Nothing
+    , _pUpdateTime = Nothing
+    }
+
+-- | When set to \`true\`, the target document must exist. When set to
+-- \`false\`, the target document must not exist.
+pExists :: Lens' Precondition (Maybe Bool)
+pExists = lens _pExists (\ s a -> s{_pExists = a})
+
+-- | When set, the target document must exist and have been last updated at
+-- that time.
+pUpdateTime :: Lens' Precondition (Maybe UTCTime)
+pUpdateTime
+  = lens _pUpdateTime (\ s a -> s{_pUpdateTime = a}) .
+      mapping _DateTime
+
+instance FromJSON Precondition where
+        parseJSON
+          = withObject "Precondition"
+              (\ o ->
+                 Precondition' <$>
+                   (o .:? "exists") <*> (o .:? "updateTime"))
+
+instance ToJSON Precondition where
+        toJSON Precondition'{..}
+          = object
+              (catMaybes
+                 [("exists" .=) <$> _pExists,
+                  ("updateTime" .=) <$> _pUpdateTime])
+
+-- | Options for a transaction that can be used to read and write documents.
+--
+-- /See:/ 'readWrite' smart constructor.
+newtype ReadWrite = ReadWrite'
+    { _rwRetryTransaction :: Maybe Bytes
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReadWrite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rwRetryTransaction'
+readWrite
+    :: ReadWrite
+readWrite =
+    ReadWrite'
+    { _rwRetryTransaction = Nothing
+    }
+
+-- | An optional transaction to retry.
+rwRetryTransaction :: Lens' ReadWrite (Maybe ByteString)
+rwRetryTransaction
+  = lens _rwRetryTransaction
+      (\ s a -> s{_rwRetryTransaction = a})
+      . mapping _Bytes
+
+instance FromJSON ReadWrite where
+        parseJSON
+          = withObject "ReadWrite"
+              (\ o -> ReadWrite' <$> (o .:? "retryTransaction"))
+
+instance ToJSON ReadWrite where
+        toJSON ReadWrite'{..}
+          = object
+              (catMaybes
+                 [("retryTransaction" .=) <$> _rwRetryTransaction])
+
+-- | The request for Firestore.Rollback.
+--
+-- /See:/ 'rollbackRequest' smart constructor.
+newtype RollbackRequest = RollbackRequest'
+    { _rrTransaction :: Maybe Bytes
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RollbackRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrTransaction'
+rollbackRequest
+    :: RollbackRequest
+rollbackRequest =
+    RollbackRequest'
+    { _rrTransaction = Nothing
+    }
+
+-- | The transaction to roll back.
+rrTransaction :: Lens' RollbackRequest (Maybe ByteString)
+rrTransaction
+  = lens _rrTransaction
+      (\ s a -> s{_rrTransaction = a})
+      . mapping _Bytes
+
+instance FromJSON RollbackRequest where
+        parseJSON
+          = withObject "RollbackRequest"
+              (\ o -> RollbackRequest' <$> (o .:? "transaction"))
+
+instance ToJSON RollbackRequest where
+        toJSON RollbackRequest'{..}
+          = object
+              (catMaybes [("transaction" .=) <$> _rrTransaction])
+
+-- | The request for FirestoreAdmin.ExportDocuments.
+--
+-- /See:/ 'googleFirestoreAdminV1ExportDocumentsRequest' smart constructor.
+data GoogleFirestoreAdminV1ExportDocumentsRequest = GoogleFirestoreAdminV1ExportDocumentsRequest'
+    { _gfavedrCollectionIds   :: !(Maybe [Text])
+    , _gfavedrOutputURIPrefix :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ExportDocumentsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavedrCollectionIds'
+--
+-- * 'gfavedrOutputURIPrefix'
+googleFirestoreAdminV1ExportDocumentsRequest
+    :: GoogleFirestoreAdminV1ExportDocumentsRequest
+googleFirestoreAdminV1ExportDocumentsRequest =
+    GoogleFirestoreAdminV1ExportDocumentsRequest'
+    { _gfavedrCollectionIds = Nothing
+    , _gfavedrOutputURIPrefix = Nothing
+    }
+
+-- | Which collection ids to export. Unspecified means all collections.
+gfavedrCollectionIds :: Lens' GoogleFirestoreAdminV1ExportDocumentsRequest [Text]
+gfavedrCollectionIds
+  = lens _gfavedrCollectionIds
+      (\ s a -> s{_gfavedrCollectionIds = a})
+      . _Default
+      . _Coerce
+
+-- | The output URI. Currently only supports Google Cloud Storage URIs of the
+-- form: \`gs:\/\/BUCKET_NAME[\/NAMESPACE_PATH]\`, where \`BUCKET_NAME\` is
+-- the name of the Google Cloud Storage bucket and \`NAMESPACE_PATH\` is an
+-- optional Google Cloud Storage namespace path. When choosing a name, be
+-- sure to consider Google Cloud Storage naming guidelines:
+-- https:\/\/cloud.google.com\/storage\/docs\/naming. If the URI is a
+-- bucket (without a namespace path), a prefix will be generated based on
+-- the start time.
+gfavedrOutputURIPrefix :: Lens' GoogleFirestoreAdminV1ExportDocumentsRequest (Maybe Text)
+gfavedrOutputURIPrefix
+  = lens _gfavedrOutputURIPrefix
+      (\ s a -> s{_gfavedrOutputURIPrefix = a})
+
+instance FromJSON
+         GoogleFirestoreAdminV1ExportDocumentsRequest where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ExportDocumentsRequest"
+              (\ o ->
+                 GoogleFirestoreAdminV1ExportDocumentsRequest' <$>
+                   (o .:? "collectionIds" .!= mempty) <*>
+                     (o .:? "outputUriPrefix"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ExportDocumentsRequest where
+        toJSON
+          GoogleFirestoreAdminV1ExportDocumentsRequest'{..}
+          = object
+              (catMaybes
+                 [("collectionIds" .=) <$> _gfavedrCollectionIds,
+                  ("outputUriPrefix" .=) <$> _gfavedrOutputURIPrefix])
+
+-- | Targets being watched have changed.
+--
+-- /See:/ 'targetChange' smart constructor.
+data TargetChange = TargetChange'
+    { _tcReadTime         :: !(Maybe DateTime')
+    , _tcResumeToken      :: !(Maybe Bytes)
+    , _tcCause            :: !(Maybe Status)
+    , _tcTargetChangeType :: !(Maybe TargetChangeTargetChangeType)
+    , _tcTargetIds        :: !(Maybe [Textual Int32])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcReadTime'
+--
+-- * 'tcResumeToken'
+--
+-- * 'tcCause'
+--
+-- * 'tcTargetChangeType'
+--
+-- * 'tcTargetIds'
+targetChange
+    :: TargetChange
+targetChange =
+    TargetChange'
+    { _tcReadTime = Nothing
+    , _tcResumeToken = Nothing
+    , _tcCause = Nothing
+    , _tcTargetChangeType = Nothing
+    , _tcTargetIds = Nothing
+    }
+
+-- | The consistent \`read_time\` for the given \`target_ids\` (omitted when
+-- the target_ids are not at a consistent snapshot). The stream is
+-- guaranteed to send a \`read_time\` with \`target_ids\` empty whenever
+-- the entire stream reaches a new consistent snapshot. ADD, CURRENT, and
+-- RESET messages are guaranteed to (eventually) result in a new consistent
+-- snapshot (while NO_CHANGE and REMOVE messages are not). For a given
+-- stream, \`read_time\` is guaranteed to be monotonically increasing.
+tcReadTime :: Lens' TargetChange (Maybe UTCTime)
+tcReadTime
+  = lens _tcReadTime (\ s a -> s{_tcReadTime = a}) .
+      mapping _DateTime
+
+-- | A token that can be used to resume the stream for the given
+-- \`target_ids\`, or all targets if \`target_ids\` is empty. Not set on
+-- every target change.
+tcResumeToken :: Lens' TargetChange (Maybe ByteString)
+tcResumeToken
+  = lens _tcResumeToken
+      (\ s a -> s{_tcResumeToken = a})
+      . mapping _Bytes
+
+-- | The error that resulted in this change, if applicable.
+tcCause :: Lens' TargetChange (Maybe Status)
+tcCause = lens _tcCause (\ s a -> s{_tcCause = a})
+
+-- | The type of change that occurred.
+tcTargetChangeType :: Lens' TargetChange (Maybe TargetChangeTargetChangeType)
+tcTargetChangeType
+  = lens _tcTargetChangeType
+      (\ s a -> s{_tcTargetChangeType = a})
+
+-- | The target IDs of targets that have changed. If empty, the change
+-- applies to all targets. For \`target_change_type=ADD\`, the order of the
+-- target IDs matches the order of the requests to add the targets. This
+-- allows clients to unambiguously associate server-assigned target IDs
+-- with added targets. For other states, the order of the target IDs is not
+-- defined.
+tcTargetIds :: Lens' TargetChange [Int32]
+tcTargetIds
+  = lens _tcTargetIds (\ s a -> s{_tcTargetIds = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON TargetChange where
+        parseJSON
+          = withObject "TargetChange"
+              (\ o ->
+                 TargetChange' <$>
+                   (o .:? "readTime") <*> (o .:? "resumeToken") <*>
+                     (o .:? "cause")
+                     <*> (o .:? "targetChangeType")
+                     <*> (o .:? "targetIds" .!= mempty))
+
+instance ToJSON TargetChange where
+        toJSON TargetChange'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _tcReadTime,
+                  ("resumeToken" .=) <$> _tcResumeToken,
+                  ("cause" .=) <$> _tcCause,
+                  ("targetChangeType" .=) <$> _tcTargetChangeType,
+                  ("targetIds" .=) <$> _tcTargetIds])
+
+-- | The response message for Locations.ListLocations.
+--
+-- /See:/ 'listLocationsResponse' smart constructor.
+data ListLocationsResponse = ListLocationsResponse'
+    { _llrNextPageToken :: !(Maybe Text)
+    , _llrLocations     :: !(Maybe [Location])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListLocationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llrNextPageToken'
+--
+-- * 'llrLocations'
+listLocationsResponse
+    :: ListLocationsResponse
+listLocationsResponse =
+    ListLocationsResponse'
+    { _llrNextPageToken = Nothing
+    , _llrLocations = Nothing
+    }
+
+-- | The standard List next-page token.
+llrNextPageToken :: Lens' ListLocationsResponse (Maybe Text)
+llrNextPageToken
+  = lens _llrNextPageToken
+      (\ s a -> s{_llrNextPageToken = a})
+
+-- | A list of locations that matches the specified filter in the request.
+llrLocations :: Lens' ListLocationsResponse [Location]
+llrLocations
+  = lens _llrLocations (\ s a -> s{_llrLocations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListLocationsResponse where
+        parseJSON
+          = withObject "ListLocationsResponse"
+              (\ o ->
+                 ListLocationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "locations" .!= mempty))
+
+instance ToJSON ListLocationsResponse where
+        toJSON ListLocationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _llrNextPageToken,
+                  ("locations" .=) <$> _llrLocations])
+
+-- | A position in a query result set.
+--
+-- /See:/ 'cursor' smart constructor.
+data Cursor = Cursor'
+    { _cValues :: !(Maybe [Value])
+    , _cBefore :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Cursor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cValues'
+--
+-- * 'cBefore'
+cursor
+    :: Cursor
+cursor =
+    Cursor'
+    { _cValues = Nothing
+    , _cBefore = Nothing
+    }
+
+-- | The values that represent a position, in the order they appear in the
+-- order by clause of a query. Can contain fewer values than specified in
+-- the order by clause.
+cValues :: Lens' Cursor [Value]
+cValues
+  = lens _cValues (\ s a -> s{_cValues = a}) . _Default
+      . _Coerce
+
+-- | If the position is just before or just after the given values, relative
+-- to the sort order defined by the query.
+cBefore :: Lens' Cursor (Maybe Bool)
+cBefore = lens _cBefore (\ s a -> s{_cBefore = a})
+
+instance FromJSON Cursor where
+        parseJSON
+          = withObject "Cursor"
+              (\ o ->
+                 Cursor' <$>
+                   (o .:? "values" .!= mempty) <*> (o .:? "before"))
+
+instance ToJSON Cursor where
+        toJSON Cursor'{..}
+          = object
+              (catMaybes
+                 [("values" .=) <$> _cValues,
+                  ("before" .=) <$> _cBefore])
+
+-- | Metadata for google.longrunning.Operation results from
+-- FirestoreAdmin.ImportDocuments.
+--
+-- /See:/ 'googleFirestoreAdminV1ImportDocumentsMetadata' smart constructor.
+data GoogleFirestoreAdminV1ImportDocumentsMetadata = GoogleFirestoreAdminV1ImportDocumentsMetadata'
+    { _gfavidmProgressBytes     :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfavidmStartTime         :: !(Maybe DateTime')
+    , _gfavidmInputURIPrefix    :: !(Maybe Text)
+    , _gfavidmCollectionIds     :: !(Maybe [Text])
+    , _gfavidmProgressDocuments :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfavidmEndTime           :: !(Maybe DateTime')
+    , _gfavidmOperationState    :: !(Maybe GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ImportDocumentsMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavidmProgressBytes'
+--
+-- * 'gfavidmStartTime'
+--
+-- * 'gfavidmInputURIPrefix'
+--
+-- * 'gfavidmCollectionIds'
+--
+-- * 'gfavidmProgressDocuments'
+--
+-- * 'gfavidmEndTime'
+--
+-- * 'gfavidmOperationState'
+googleFirestoreAdminV1ImportDocumentsMetadata
+    :: GoogleFirestoreAdminV1ImportDocumentsMetadata
+googleFirestoreAdminV1ImportDocumentsMetadata =
+    GoogleFirestoreAdminV1ImportDocumentsMetadata'
+    { _gfavidmProgressBytes = Nothing
+    , _gfavidmStartTime = Nothing
+    , _gfavidmInputURIPrefix = Nothing
+    , _gfavidmCollectionIds = Nothing
+    , _gfavidmProgressDocuments = Nothing
+    , _gfavidmEndTime = Nothing
+    , _gfavidmOperationState = Nothing
+    }
+
+-- | The progress, in bytes, of this operation.
+gfavidmProgressBytes :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfavidmProgressBytes
+  = lens _gfavidmProgressBytes
+      (\ s a -> s{_gfavidmProgressBytes = a})
+
+-- | The time this operation started.
+gfavidmStartTime :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata (Maybe UTCTime)
+gfavidmStartTime
+  = lens _gfavidmStartTime
+      (\ s a -> s{_gfavidmStartTime = a})
+      . mapping _DateTime
+
+-- | The location of the documents being imported.
+gfavidmInputURIPrefix :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata (Maybe Text)
+gfavidmInputURIPrefix
+  = lens _gfavidmInputURIPrefix
+      (\ s a -> s{_gfavidmInputURIPrefix = a})
+
+-- | Which collection ids are being imported.
+gfavidmCollectionIds :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata [Text]
+gfavidmCollectionIds
+  = lens _gfavidmCollectionIds
+      (\ s a -> s{_gfavidmCollectionIds = a})
+      . _Default
+      . _Coerce
+
+-- | The progress, in documents, of this operation.
+gfavidmProgressDocuments :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfavidmProgressDocuments
+  = lens _gfavidmProgressDocuments
+      (\ s a -> s{_gfavidmProgressDocuments = a})
+
+-- | The time this operation completed. Will be unset if operation still in
+-- progress.
+gfavidmEndTime :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata (Maybe UTCTime)
+gfavidmEndTime
+  = lens _gfavidmEndTime
+      (\ s a -> s{_gfavidmEndTime = a})
+      . mapping _DateTime
+
+-- | The state of the import operation.
+gfavidmOperationState :: Lens' GoogleFirestoreAdminV1ImportDocumentsMetadata (Maybe GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState)
+gfavidmOperationState
+  = lens _gfavidmOperationState
+      (\ s a -> s{_gfavidmOperationState = a})
+
+instance FromJSON
+         GoogleFirestoreAdminV1ImportDocumentsMetadata where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ImportDocumentsMetadata"
+              (\ o ->
+                 GoogleFirestoreAdminV1ImportDocumentsMetadata' <$>
+                   (o .:? "progressBytes") <*> (o .:? "startTime") <*>
+                     (o .:? "inputUriPrefix")
+                     <*> (o .:? "collectionIds" .!= mempty)
+                     <*> (o .:? "progressDocuments")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "operationState"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ImportDocumentsMetadata where
+        toJSON
+          GoogleFirestoreAdminV1ImportDocumentsMetadata'{..}
+          = object
+              (catMaybes
+                 [("progressBytes" .=) <$> _gfavidmProgressBytes,
+                  ("startTime" .=) <$> _gfavidmStartTime,
+                  ("inputUriPrefix" .=) <$> _gfavidmInputURIPrefix,
+                  ("collectionIds" .=) <$> _gfavidmCollectionIds,
+                  ("progressDocuments" .=) <$>
+                    _gfavidmProgressDocuments,
+                  ("endTime" .=) <$> _gfavidmEndTime,
+                  ("operationState" .=) <$> _gfavidmOperationState])
+
+-- | The request for Firestore.BeginTransaction.
+--
+-- /See:/ 'beginTransactionRequest' smart constructor.
+newtype BeginTransactionRequest = BeginTransactionRequest'
+    { _btrOptions :: Maybe TransactionOptions
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BeginTransactionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'btrOptions'
+beginTransactionRequest
+    :: BeginTransactionRequest
+beginTransactionRequest =
+    BeginTransactionRequest'
+    { _btrOptions = Nothing
+    }
+
+-- | The options for the transaction. Defaults to a read-write transaction.
+btrOptions :: Lens' BeginTransactionRequest (Maybe TransactionOptions)
+btrOptions
+  = lens _btrOptions (\ s a -> s{_btrOptions = a})
+
+instance FromJSON BeginTransactionRequest where
+        parseJSON
+          = withObject "BeginTransactionRequest"
+              (\ o ->
+                 BeginTransactionRequest' <$> (o .:? "options"))
+
+instance ToJSON BeginTransactionRequest where
+        toJSON BeginTransactionRequest'{..}
+          = object (catMaybes [("options" .=) <$> _btrOptions])
+
+-- | The request for Firestore.RunQuery.
+--
+-- /See:/ 'runQueryRequest' smart constructor.
+data RunQueryRequest = RunQueryRequest'
+    { _rqrReadTime        :: !(Maybe DateTime')
+    , _rqrNewTransaction  :: !(Maybe TransactionOptions)
+    , _rqrStructuredQuery :: !(Maybe StructuredQuery)
+    , _rqrTransaction     :: !(Maybe Bytes)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunQueryRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rqrReadTime'
+--
+-- * 'rqrNewTransaction'
+--
+-- * 'rqrStructuredQuery'
+--
+-- * 'rqrTransaction'
+runQueryRequest
+    :: RunQueryRequest
+runQueryRequest =
+    RunQueryRequest'
+    { _rqrReadTime = Nothing
+    , _rqrNewTransaction = Nothing
+    , _rqrStructuredQuery = Nothing
+    , _rqrTransaction = Nothing
+    }
+
+-- | Reads documents as they were at the given time. This may not be older
+-- than 60 seconds.
+rqrReadTime :: Lens' RunQueryRequest (Maybe UTCTime)
+rqrReadTime
+  = lens _rqrReadTime (\ s a -> s{_rqrReadTime = a}) .
+      mapping _DateTime
+
+-- | Starts a new transaction and reads the documents. Defaults to a
+-- read-only transaction. The new transaction ID will be returned as the
+-- first response in the stream.
+rqrNewTransaction :: Lens' RunQueryRequest (Maybe TransactionOptions)
+rqrNewTransaction
+  = lens _rqrNewTransaction
+      (\ s a -> s{_rqrNewTransaction = a})
+
+-- | A structured query.
+rqrStructuredQuery :: Lens' RunQueryRequest (Maybe StructuredQuery)
+rqrStructuredQuery
+  = lens _rqrStructuredQuery
+      (\ s a -> s{_rqrStructuredQuery = a})
+
+-- | Reads documents in a transaction.
+rqrTransaction :: Lens' RunQueryRequest (Maybe ByteString)
+rqrTransaction
+  = lens _rqrTransaction
+      (\ s a -> s{_rqrTransaction = a})
+      . mapping _Bytes
+
+instance FromJSON RunQueryRequest where
+        parseJSON
+          = withObject "RunQueryRequest"
+              (\ o ->
+                 RunQueryRequest' <$>
+                   (o .:? "readTime") <*> (o .:? "newTransaction") <*>
+                     (o .:? "structuredQuery")
+                     <*> (o .:? "transaction"))
+
+instance ToJSON RunQueryRequest where
+        toJSON RunQueryRequest'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _rqrReadTime,
+                  ("newTransaction" .=) <$> _rqrNewTransaction,
+                  ("structuredQuery" .=) <$> _rqrStructuredQuery,
+                  ("transaction" .=) <$> _rqrTransaction])
+
+-- | Information about an index configuration change.
+--
+-- /See:/ 'googleFirestoreAdminV1IndexConfigDelta' smart constructor.
+data GoogleFirestoreAdminV1IndexConfigDelta = GoogleFirestoreAdminV1IndexConfigDelta'
+    { _gfavicdIndex      :: !(Maybe GoogleFirestoreAdminV1Index)
+    , _gfavicdChangeType :: !(Maybe GoogleFirestoreAdminV1IndexConfigDeltaChangeType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1IndexConfigDelta' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavicdIndex'
+--
+-- * 'gfavicdChangeType'
+googleFirestoreAdminV1IndexConfigDelta
+    :: GoogleFirestoreAdminV1IndexConfigDelta
+googleFirestoreAdminV1IndexConfigDelta =
+    GoogleFirestoreAdminV1IndexConfigDelta'
+    { _gfavicdIndex = Nothing
+    , _gfavicdChangeType = Nothing
+    }
+
+-- | The index being changed.
+gfavicdIndex :: Lens' GoogleFirestoreAdminV1IndexConfigDelta (Maybe GoogleFirestoreAdminV1Index)
+gfavicdIndex
+  = lens _gfavicdIndex (\ s a -> s{_gfavicdIndex = a})
+
+-- | Specifies how the index is changing.
+gfavicdChangeType :: Lens' GoogleFirestoreAdminV1IndexConfigDelta (Maybe GoogleFirestoreAdminV1IndexConfigDeltaChangeType)
+gfavicdChangeType
+  = lens _gfavicdChangeType
+      (\ s a -> s{_gfavicdChangeType = a})
+
+instance FromJSON
+         GoogleFirestoreAdminV1IndexConfigDelta where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1IndexConfigDelta"
+              (\ o ->
+                 GoogleFirestoreAdminV1IndexConfigDelta' <$>
+                   (o .:? "index") <*> (o .:? "changeType"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1IndexConfigDelta where
+        toJSON GoogleFirestoreAdminV1IndexConfigDelta'{..}
+          = object
+              (catMaybes
+                 [("index" .=) <$> _gfavicdIndex,
+                  ("changeType" .=) <$> _gfavicdChangeType])
+
+-- | The index configuration for this field.
+--
+-- /See:/ 'googleFirestoreAdminV1IndexConfig' smart constructor.
+data GoogleFirestoreAdminV1IndexConfig = GoogleFirestoreAdminV1IndexConfig'
+    { _gfavicAncestorField      :: !(Maybe Text)
+    , _gfavicReverting          :: !(Maybe Bool)
+    , _gfavicIndexes            :: !(Maybe [GoogleFirestoreAdminV1Index])
+    , _gfavicUsesAncestorConfig :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1IndexConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavicAncestorField'
+--
+-- * 'gfavicReverting'
+--
+-- * 'gfavicIndexes'
+--
+-- * 'gfavicUsesAncestorConfig'
+googleFirestoreAdminV1IndexConfig
+    :: GoogleFirestoreAdminV1IndexConfig
+googleFirestoreAdminV1IndexConfig =
+    GoogleFirestoreAdminV1IndexConfig'
+    { _gfavicAncestorField = Nothing
+    , _gfavicReverting = Nothing
+    , _gfavicIndexes = Nothing
+    , _gfavicUsesAncestorConfig = Nothing
+    }
+
+-- | Output only. Specifies the resource name of the \`Field\` from which
+-- this field\'s index configuration is set (when \`uses_ancestor_config\`
+-- is true), or from which it *would* be set if this field had no index
+-- configuration (when \`uses_ancestor_config\` is false).
+gfavicAncestorField :: Lens' GoogleFirestoreAdminV1IndexConfig (Maybe Text)
+gfavicAncestorField
+  = lens _gfavicAncestorField
+      (\ s a -> s{_gfavicAncestorField = a})
+
+-- | Output only When true, the \`Field\`\'s index configuration is in the
+-- process of being reverted. Once complete, the index config will
+-- transition to the same state as the field specified by
+-- \`ancestor_field\`, at which point \`uses_ancestor_config\` will be
+-- \`true\` and \`reverting\` will be \`false\`.
+gfavicReverting :: Lens' GoogleFirestoreAdminV1IndexConfig (Maybe Bool)
+gfavicReverting
+  = lens _gfavicReverting
+      (\ s a -> s{_gfavicReverting = a})
+
+-- | The indexes supported for this field.
+gfavicIndexes :: Lens' GoogleFirestoreAdminV1IndexConfig [GoogleFirestoreAdminV1Index]
+gfavicIndexes
+  = lens _gfavicIndexes
+      (\ s a -> s{_gfavicIndexes = a})
+      . _Default
+      . _Coerce
+
+-- | Output only. When true, the \`Field\`\'s index configuration is set from
+-- the configuration specified by the \`ancestor_field\`. When false, the
+-- \`Field\`\'s index configuration is defined explicitly.
+gfavicUsesAncestorConfig :: Lens' GoogleFirestoreAdminV1IndexConfig (Maybe Bool)
+gfavicUsesAncestorConfig
+  = lens _gfavicUsesAncestorConfig
+      (\ s a -> s{_gfavicUsesAncestorConfig = a})
+
+instance FromJSON GoogleFirestoreAdminV1IndexConfig
+         where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1IndexConfig"
+              (\ o ->
+                 GoogleFirestoreAdminV1IndexConfig' <$>
+                   (o .:? "ancestorField") <*> (o .:? "reverting") <*>
+                     (o .:? "indexes" .!= mempty)
+                     <*> (o .:? "usesAncestorConfig"))
+
+instance ToJSON GoogleFirestoreAdminV1IndexConfig
+         where
+        toJSON GoogleFirestoreAdminV1IndexConfig'{..}
+          = object
+              (catMaybes
+                 [("ancestorField" .=) <$> _gfavicAncestorField,
+                  ("reverting" .=) <$> _gfavicReverting,
+                  ("indexes" .=) <$> _gfavicIndexes,
+                  ("usesAncestorConfig" .=) <$>
+                    _gfavicUsesAncestorConfig])
+
+-- | A field in an index. The field_path describes which field is indexed,
+-- the value_mode describes how the field value is indexed.
+--
+-- /See:/ 'googleFirestoreAdminV1IndexField' smart constructor.
+data GoogleFirestoreAdminV1IndexField = GoogleFirestoreAdminV1IndexField'
+    { _gfavifFieldPath   :: !(Maybe Text)
+    , _gfavifArrayConfig :: !(Maybe GoogleFirestoreAdminV1IndexFieldArrayConfig)
+    , _gfavifOrder       :: !(Maybe GoogleFirestoreAdminV1IndexFieldOrder)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1IndexField' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavifFieldPath'
+--
+-- * 'gfavifArrayConfig'
+--
+-- * 'gfavifOrder'
+googleFirestoreAdminV1IndexField
+    :: GoogleFirestoreAdminV1IndexField
+googleFirestoreAdminV1IndexField =
+    GoogleFirestoreAdminV1IndexField'
+    { _gfavifFieldPath = Nothing
+    , _gfavifArrayConfig = Nothing
+    , _gfavifOrder = Nothing
+    }
+
+-- | Can be __name__. For single field indexes, this must match the name of
+-- the field or may be omitted.
+gfavifFieldPath :: Lens' GoogleFirestoreAdminV1IndexField (Maybe Text)
+gfavifFieldPath
+  = lens _gfavifFieldPath
+      (\ s a -> s{_gfavifFieldPath = a})
+
+-- | Indicates that this field supports operations on \`array_value\`s.
+gfavifArrayConfig :: Lens' GoogleFirestoreAdminV1IndexField (Maybe GoogleFirestoreAdminV1IndexFieldArrayConfig)
+gfavifArrayConfig
+  = lens _gfavifArrayConfig
+      (\ s a -> s{_gfavifArrayConfig = a})
+
+-- | Indicates that this field supports ordering by the specified order or
+-- comparing using =, \<, \<=, >, >=.
+gfavifOrder :: Lens' GoogleFirestoreAdminV1IndexField (Maybe GoogleFirestoreAdminV1IndexFieldOrder)
+gfavifOrder
+  = lens _gfavifOrder (\ s a -> s{_gfavifOrder = a})
+
+instance FromJSON GoogleFirestoreAdminV1IndexField
+         where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1IndexField"
+              (\ o ->
+                 GoogleFirestoreAdminV1IndexField' <$>
+                   (o .:? "fieldPath") <*> (o .:? "arrayConfig") <*>
+                     (o .:? "order"))
+
+instance ToJSON GoogleFirestoreAdminV1IndexField
+         where
+        toJSON GoogleFirestoreAdminV1IndexField'{..}
+          = object
+              (catMaybes
+                 [("fieldPath" .=) <$> _gfavifFieldPath,
+                  ("arrayConfig" .=) <$> _gfavifArrayConfig,
+                  ("order" .=) <$> _gfavifOrder])
+
+-- | A write on a document.
+--
+-- /See:/ 'write' smart constructor.
+data Write = Write'
+    { _wTransform       :: !(Maybe DocumentTransform)
+    , _wUpdateMask      :: !(Maybe DocumentMask)
+    , _wCurrentDocument :: !(Maybe Precondition)
+    , _wDelete          :: !(Maybe Text)
+    , _wUpdate          :: !(Maybe Document)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Write' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wTransform'
+--
+-- * 'wUpdateMask'
+--
+-- * 'wCurrentDocument'
+--
+-- * 'wDelete'
+--
+-- * 'wUpdate'
+write
+    :: Write
+write =
+    Write'
+    { _wTransform = Nothing
+    , _wUpdateMask = Nothing
+    , _wCurrentDocument = Nothing
+    , _wDelete = Nothing
+    , _wUpdate = Nothing
+    }
+
+-- | Applies a tranformation to a document. At most one \`transform\` per
+-- document is allowed in a given request. An \`update\` cannot follow a
+-- \`transform\` on the same document in a given request.
+wTransform :: Lens' Write (Maybe DocumentTransform)
+wTransform
+  = lens _wTransform (\ s a -> s{_wTransform = a})
+
+-- | The fields to update in this write. This field can be set only when the
+-- operation is \`update\`. If the mask is not set for an \`update\` and
+-- the document exists, any existing data will be overwritten. If the mask
+-- is set and the document on the server has fields not covered by the
+-- mask, they are left unchanged. Fields referenced in the mask, but not
+-- present in the input document, are deleted from the document on the
+-- server. The field paths in this mask must not contain a reserved field
+-- name.
+wUpdateMask :: Lens' Write (Maybe DocumentMask)
+wUpdateMask
+  = lens _wUpdateMask (\ s a -> s{_wUpdateMask = a})
+
+-- | An optional precondition on the document. The write will fail if this is
+-- set and not met by the target document.
+wCurrentDocument :: Lens' Write (Maybe Precondition)
+wCurrentDocument
+  = lens _wCurrentDocument
+      (\ s a -> s{_wCurrentDocument = a})
+
+-- | A document name to delete. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+wDelete :: Lens' Write (Maybe Text)
+wDelete = lens _wDelete (\ s a -> s{_wDelete = a})
+
+-- | A document to write.
+wUpdate :: Lens' Write (Maybe Document)
+wUpdate = lens _wUpdate (\ s a -> s{_wUpdate = a})
+
+instance FromJSON Write where
+        parseJSON
+          = withObject "Write"
+              (\ o ->
+                 Write' <$>
+                   (o .:? "transform") <*> (o .:? "updateMask") <*>
+                     (o .:? "currentDocument")
+                     <*> (o .:? "delete")
+                     <*> (o .:? "update"))
+
+instance ToJSON Write where
+        toJSON Write'{..}
+          = object
+              (catMaybes
+                 [("transform" .=) <$> _wTransform,
+                  ("updateMask" .=) <$> _wUpdateMask,
+                  ("currentDocument" .=) <$> _wCurrentDocument,
+                  ("delete" .=) <$> _wDelete,
+                  ("update" .=) <$> _wUpdate])
+
+-- | A resource that represents Google Cloud Platform location.
+--
+-- /See:/ 'location' smart constructor.
+data Location = Location'
+    { _lName        :: !(Maybe Text)
+    , _lMetadata    :: !(Maybe LocationMetadata)
+    , _lDisplayName :: !(Maybe Text)
+    , _lLabels      :: !(Maybe LocationLabels)
+    , _lLocationId  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Location' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lName'
+--
+-- * 'lMetadata'
+--
+-- * 'lDisplayName'
+--
+-- * 'lLabels'
+--
+-- * 'lLocationId'
+location
+    :: Location
+location =
+    Location'
+    { _lName = Nothing
+    , _lMetadata = Nothing
+    , _lDisplayName = Nothing
+    , _lLabels = Nothing
+    , _lLocationId = Nothing
+    }
+
+-- | Resource name for the location, which may vary between implementations.
+-- For example: \`\"projects\/example-project\/locations\/us-east1\"\`
+lName :: Lens' Location (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a})
+
+-- | Service-specific metadata. For example the available capacity at the
+-- given location.
+lMetadata :: Lens' Location (Maybe LocationMetadata)
+lMetadata
+  = lens _lMetadata (\ s a -> s{_lMetadata = a})
+
+-- | The friendly name for this location, typically a nearby city name. For
+-- example, \"Tokyo\".
+lDisplayName :: Lens' Location (Maybe Text)
+lDisplayName
+  = lens _lDisplayName (\ s a -> s{_lDisplayName = a})
+
+-- | Cross-service attributes for the location. For example
+-- {\"cloud.googleapis.com\/region\": \"us-east1\"}
+lLabels :: Lens' Location (Maybe LocationLabels)
+lLabels = lens _lLabels (\ s a -> s{_lLabels = a})
+
+-- | The canonical id for this location. For example: \`\"us-east1\"\`.
+lLocationId :: Lens' Location (Maybe Text)
+lLocationId
+  = lens _lLocationId (\ s a -> s{_lLocationId = a})
+
+instance FromJSON Location where
+        parseJSON
+          = withObject "Location"
+              (\ o ->
+                 Location' <$>
+                   (o .:? "name") <*> (o .:? "metadata") <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "locationId"))
+
+instance ToJSON Location where
+        toJSON Location'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _lName,
+                  ("metadata" .=) <$> _lMetadata,
+                  ("displayName" .=) <$> _lDisplayName,
+                  ("labels" .=) <$> _lLabels,
+                  ("locationId" .=) <$> _lLocationId])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | The streamed response for Firestore.BatchGetDocuments.
+--
+-- /See:/ 'batchGetDocumentsResponse' smart constructor.
+data BatchGetDocumentsResponse = BatchGetDocumentsResponse'
+    { _bgdrReadTime    :: !(Maybe DateTime')
+    , _bgdrFound       :: !(Maybe Document)
+    , _bgdrTransaction :: !(Maybe Bytes)
+    , _bgdrMissing     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchGetDocumentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgdrReadTime'
+--
+-- * 'bgdrFound'
+--
+-- * 'bgdrTransaction'
+--
+-- * 'bgdrMissing'
+batchGetDocumentsResponse
+    :: BatchGetDocumentsResponse
+batchGetDocumentsResponse =
+    BatchGetDocumentsResponse'
+    { _bgdrReadTime = Nothing
+    , _bgdrFound = Nothing
+    , _bgdrTransaction = Nothing
+    , _bgdrMissing = Nothing
+    }
+
+-- | The time at which the document was read. This may be monotically
+-- increasing, in this case the previous documents in the result stream are
+-- guaranteed not to have changed between their read_time and this one.
+bgdrReadTime :: Lens' BatchGetDocumentsResponse (Maybe UTCTime)
+bgdrReadTime
+  = lens _bgdrReadTime (\ s a -> s{_bgdrReadTime = a})
+      . mapping _DateTime
+
+-- | A document that was requested.
+bgdrFound :: Lens' BatchGetDocumentsResponse (Maybe Document)
+bgdrFound
+  = lens _bgdrFound (\ s a -> s{_bgdrFound = a})
+
+-- | The transaction that was started as part of this request. Will only be
+-- set in the first response, and only if
+-- BatchGetDocumentsRequest.new_transaction was set in the request.
+bgdrTransaction :: Lens' BatchGetDocumentsResponse (Maybe ByteString)
+bgdrTransaction
+  = lens _bgdrTransaction
+      (\ s a -> s{_bgdrTransaction = a})
+      . mapping _Bytes
+
+-- | A document name that was requested but does not exist. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+bgdrMissing :: Lens' BatchGetDocumentsResponse (Maybe Text)
+bgdrMissing
+  = lens _bgdrMissing (\ s a -> s{_bgdrMissing = a})
+
+instance FromJSON BatchGetDocumentsResponse where
+        parseJSON
+          = withObject "BatchGetDocumentsResponse"
+              (\ o ->
+                 BatchGetDocumentsResponse' <$>
+                   (o .:? "readTime") <*> (o .:? "found") <*>
+                     (o .:? "transaction")
+                     <*> (o .:? "missing"))
+
+instance ToJSON BatchGetDocumentsResponse where
+        toJSON BatchGetDocumentsResponse'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _bgdrReadTime,
+                  ("found" .=) <$> _bgdrFound,
+                  ("transaction" .=) <$> _bgdrTransaction,
+                  ("missing" .=) <$> _bgdrMissing])
+
+-- | A filter that merges multiple other filters using the given operator.
+--
+-- /See:/ 'compositeFilter' smart constructor.
+data CompositeFilter = CompositeFilter'
+    { _cfOp      :: !(Maybe CompositeFilterOp)
+    , _cfFilters :: !(Maybe [Filter])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompositeFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfOp'
+--
+-- * 'cfFilters'
+compositeFilter
+    :: CompositeFilter
+compositeFilter =
+    CompositeFilter'
+    { _cfOp = Nothing
+    , _cfFilters = Nothing
+    }
+
+-- | The operator for combining multiple filters.
+cfOp :: Lens' CompositeFilter (Maybe CompositeFilterOp)
+cfOp = lens _cfOp (\ s a -> s{_cfOp = a})
+
+-- | The list of filters to combine. Must contain at least one filter.
+cfFilters :: Lens' CompositeFilter [Filter]
+cfFilters
+  = lens _cfFilters (\ s a -> s{_cfFilters = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CompositeFilter where
+        parseJSON
+          = withObject "CompositeFilter"
+              (\ o ->
+                 CompositeFilter' <$>
+                   (o .:? "op") <*> (o .:? "filters" .!= mempty))
+
+instance ToJSON CompositeFilter where
+        toJSON CompositeFilter'{..}
+          = object
+              (catMaybes
+                 [("op" .=) <$> _cfOp, ("filters" .=) <$> _cfFilters])
+
+-- | A target specified by a set of documents names.
+--
+-- /See:/ 'documentsTarget' smart constructor.
+newtype DocumentsTarget = DocumentsTarget'
+    { _dtDocuments :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentsTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtDocuments'
+documentsTarget
+    :: DocumentsTarget
+documentsTarget =
+    DocumentsTarget'
+    { _dtDocuments = Nothing
+    }
+
+-- | The names of the documents to retrieve. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+-- The request will fail if any of the document is not a child resource of
+-- the given \`database\`. Duplicate names will be elided.
+dtDocuments :: Lens' DocumentsTarget [Text]
+dtDocuments
+  = lens _dtDocuments (\ s a -> s{_dtDocuments = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DocumentsTarget where
+        parseJSON
+          = withObject "DocumentsTarget"
+              (\ o ->
+                 DocumentsTarget' <$> (o .:? "documents" .!= mempty))
+
+instance ToJSON DocumentsTarget where
+        toJSON DocumentsTarget'{..}
+          = object
+              (catMaybes [("documents" .=) <$> _dtDocuments])
+
+-- | Labels associated with this target change.
+--
+-- /See:/ 'listenRequestLabels' smart constructor.
+newtype ListenRequestLabels = ListenRequestLabels'
+    { _lrlAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListenRequestLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrlAddtional'
+listenRequestLabels
+    :: HashMap Text Text -- ^ 'lrlAddtional'
+    -> ListenRequestLabels
+listenRequestLabels pLrlAddtional_ =
+    ListenRequestLabels'
+    { _lrlAddtional = _Coerce # pLrlAddtional_
+    }
+
+lrlAddtional :: Lens' ListenRequestLabels (HashMap Text Text)
+lrlAddtional
+  = lens _lrlAddtional (\ s a -> s{_lrlAddtional = a})
+      . _Coerce
+
+instance FromJSON ListenRequestLabels where
+        parseJSON
+          = withObject "ListenRequestLabels"
+              (\ o -> ListenRequestLabels' <$> (parseJSONObject o))
+
+instance ToJSON ListenRequestLabels where
+        toJSON = toJSON . _lrlAddtional
+
+-- | Cloud Firestore indexes enable simple and complex queries against
+-- documents in a database.
+--
+-- /See:/ 'googleFirestoreAdminV1Index' smart constructor.
+data GoogleFirestoreAdminV1Index = GoogleFirestoreAdminV1Index'
+    { _gfaviState      :: !(Maybe GoogleFirestoreAdminV1IndexState)
+    , _gfaviQueryScope :: !(Maybe GoogleFirestoreAdminV1IndexQueryScope)
+    , _gfaviName       :: !(Maybe Text)
+    , _gfaviFields     :: !(Maybe [GoogleFirestoreAdminV1IndexField])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1Index' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfaviState'
+--
+-- * 'gfaviQueryScope'
+--
+-- * 'gfaviName'
+--
+-- * 'gfaviFields'
+googleFirestoreAdminV1Index
+    :: GoogleFirestoreAdminV1Index
+googleFirestoreAdminV1Index =
+    GoogleFirestoreAdminV1Index'
+    { _gfaviState = Nothing
+    , _gfaviQueryScope = Nothing
+    , _gfaviName = Nothing
+    , _gfaviFields = Nothing
+    }
+
+-- | Output only. The serving state of the index.
+gfaviState :: Lens' GoogleFirestoreAdminV1Index (Maybe GoogleFirestoreAdminV1IndexState)
+gfaviState
+  = lens _gfaviState (\ s a -> s{_gfaviState = a})
+
+-- | Indexes with a collection query scope specified allow queries against a
+-- collection that is the child of a specific document, specified at query
+-- time, and that has the same collection id. Indexes with a collection
+-- group query scope specified allow queries against all collections
+-- descended from a specific document, specified at query time, and that
+-- have the same collection id as this index.
+gfaviQueryScope :: Lens' GoogleFirestoreAdminV1Index (Maybe GoogleFirestoreAdminV1IndexQueryScope)
+gfaviQueryScope
+  = lens _gfaviQueryScope
+      (\ s a -> s{_gfaviQueryScope = a})
+
+-- | Output only. A server defined name for this index. The form of this name
+-- for composite indexes will be:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/indexes\/{composite_index_id}\`
+-- For single field indexes, this field will be empty.
+gfaviName :: Lens' GoogleFirestoreAdminV1Index (Maybe Text)
+gfaviName
+  = lens _gfaviName (\ s a -> s{_gfaviName = a})
+
+-- | The fields supported by this index. For composite indexes, this is
+-- always 2 or more fields. The last field entry is always for the field
+-- path \`__name__\`. If, on creation, \`__name__\` was not specified as
+-- the last field, it will be added automatically with the same direction
+-- as that of the last field defined. If the final field in a composite
+-- index is not directional, the \`__name__\` will be ordered ASCENDING
+-- (unless explicitly specified). For single field indexes, this will
+-- always be exactly one entry with a field path equal to the field path of
+-- the associated field.
+gfaviFields :: Lens' GoogleFirestoreAdminV1Index [GoogleFirestoreAdminV1IndexField]
+gfaviFields
+  = lens _gfaviFields (\ s a -> s{_gfaviFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON GoogleFirestoreAdminV1Index where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1Index"
+              (\ o ->
+                 GoogleFirestoreAdminV1Index' <$>
+                   (o .:? "state") <*> (o .:? "queryScope") <*>
+                     (o .:? "name")
+                     <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON GoogleFirestoreAdminV1Index where
+        toJSON GoogleFirestoreAdminV1Index'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _gfaviState,
+                  ("queryScope" .=) <$> _gfaviQueryScope,
+                  ("name" .=) <$> _gfaviName,
+                  ("fields" .=) <$> _gfaviFields])
+
+-- | The response for Firestore.BeginTransaction.
+--
+-- /See:/ 'beginTransactionResponse' smart constructor.
+newtype BeginTransactionResponse = BeginTransactionResponse'
+    { _btrTransaction :: Maybe Bytes
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BeginTransactionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'btrTransaction'
+beginTransactionResponse
+    :: BeginTransactionResponse
+beginTransactionResponse =
+    BeginTransactionResponse'
+    { _btrTransaction = Nothing
+    }
+
+-- | The transaction that was started.
+btrTransaction :: Lens' BeginTransactionResponse (Maybe ByteString)
+btrTransaction
+  = lens _btrTransaction
+      (\ s a -> s{_btrTransaction = a})
+      . mapping _Bytes
+
+instance FromJSON BeginTransactionResponse where
+        parseJSON
+          = withObject "BeginTransactionResponse"
+              (\ o ->
+                 BeginTransactionResponse' <$> (o .:? "transaction"))
+
+instance ToJSON BeginTransactionResponse where
+        toJSON BeginTransactionResponse'{..}
+          = object
+              (catMaybes [("transaction" .=) <$> _btrTransaction])
+
+-- | The response for Firestore.RunQuery.
+--
+-- /See:/ 'runQueryResponse' smart constructor.
+data RunQueryResponse = RunQueryResponse'
+    { _rReadTime       :: !(Maybe DateTime')
+    , _rSkippedResults :: !(Maybe (Textual Int32))
+    , _rTransaction    :: !(Maybe Bytes)
+    , _rDocument       :: !(Maybe Document)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunQueryResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rReadTime'
+--
+-- * 'rSkippedResults'
+--
+-- * 'rTransaction'
+--
+-- * 'rDocument'
+runQueryResponse
+    :: RunQueryResponse
+runQueryResponse =
+    RunQueryResponse'
+    { _rReadTime = Nothing
+    , _rSkippedResults = Nothing
+    , _rTransaction = Nothing
+    , _rDocument = Nothing
+    }
+
+-- | The time at which the document was read. This may be monotonically
+-- increasing; in this case, the previous documents in the result stream
+-- are guaranteed not to have changed between their \`read_time\` and this
+-- one. If the query returns no results, a response with \`read_time\` and
+-- no \`document\` will be sent, and this represents the time at which the
+-- query was run.
+rReadTime :: Lens' RunQueryResponse (Maybe UTCTime)
+rReadTime
+  = lens _rReadTime (\ s a -> s{_rReadTime = a}) .
+      mapping _DateTime
+
+-- | The number of results that have been skipped due to an offset between
+-- the last response and the current response.
+rSkippedResults :: Lens' RunQueryResponse (Maybe Int32)
+rSkippedResults
+  = lens _rSkippedResults
+      (\ s a -> s{_rSkippedResults = a})
+      . mapping _Coerce
+
+-- | The transaction that was started as part of this request. Can only be
+-- set in the first response, and only if RunQueryRequest.new_transaction
+-- was set in the request. If set, no other fields will be set in this
+-- response.
+rTransaction :: Lens' RunQueryResponse (Maybe ByteString)
+rTransaction
+  = lens _rTransaction (\ s a -> s{_rTransaction = a})
+      . mapping _Bytes
+
+-- | A query result. Not set when reporting partial progress.
+rDocument :: Lens' RunQueryResponse (Maybe Document)
+rDocument
+  = lens _rDocument (\ s a -> s{_rDocument = a})
+
+instance FromJSON RunQueryResponse where
+        parseJSON
+          = withObject "RunQueryResponse"
+              (\ o ->
+                 RunQueryResponse' <$>
+                   (o .:? "readTime") <*> (o .:? "skippedResults") <*>
+                     (o .:? "transaction")
+                     <*> (o .:? "document"))
+
+instance ToJSON RunQueryResponse where
+        toJSON RunQueryResponse'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _rReadTime,
+                  ("skippedResults" .=) <$> _rSkippedResults,
+                  ("transaction" .=) <$> _rTransaction,
+                  ("document" .=) <$> _rDocument])
+
+-- | Metadata for google.longrunning.Operation results from
+-- FirestoreAdmin.ExportDocuments.
+--
+-- /See:/ 'googleFirestoreAdminV1ExportDocumentsMetadata' smart constructor.
+data GoogleFirestoreAdminV1ExportDocumentsMetadata = GoogleFirestoreAdminV1ExportDocumentsMetadata'
+    { _gfavedmProgressBytes     :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfavedmStartTime         :: !(Maybe DateTime')
+    , _gfavedmCollectionIds     :: !(Maybe [Text])
+    , _gfavedmProgressDocuments :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfavedmEndTime           :: !(Maybe DateTime')
+    , _gfavedmOperationState    :: !(Maybe GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState)
+    , _gfavedmOutputURIPrefix   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ExportDocumentsMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavedmProgressBytes'
+--
+-- * 'gfavedmStartTime'
+--
+-- * 'gfavedmCollectionIds'
+--
+-- * 'gfavedmProgressDocuments'
+--
+-- * 'gfavedmEndTime'
+--
+-- * 'gfavedmOperationState'
+--
+-- * 'gfavedmOutputURIPrefix'
+googleFirestoreAdminV1ExportDocumentsMetadata
+    :: GoogleFirestoreAdminV1ExportDocumentsMetadata
+googleFirestoreAdminV1ExportDocumentsMetadata =
+    GoogleFirestoreAdminV1ExportDocumentsMetadata'
+    { _gfavedmProgressBytes = Nothing
+    , _gfavedmStartTime = Nothing
+    , _gfavedmCollectionIds = Nothing
+    , _gfavedmProgressDocuments = Nothing
+    , _gfavedmEndTime = Nothing
+    , _gfavedmOperationState = Nothing
+    , _gfavedmOutputURIPrefix = Nothing
+    }
+
+-- | The progress, in bytes, of this operation.
+gfavedmProgressBytes :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfavedmProgressBytes
+  = lens _gfavedmProgressBytes
+      (\ s a -> s{_gfavedmProgressBytes = a})
+
+-- | The time this operation started.
+gfavedmStartTime :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata (Maybe UTCTime)
+gfavedmStartTime
+  = lens _gfavedmStartTime
+      (\ s a -> s{_gfavedmStartTime = a})
+      . mapping _DateTime
+
+-- | Which collection ids are being exported.
+gfavedmCollectionIds :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata [Text]
+gfavedmCollectionIds
+  = lens _gfavedmCollectionIds
+      (\ s a -> s{_gfavedmCollectionIds = a})
+      . _Default
+      . _Coerce
+
+-- | The progress, in documents, of this operation.
+gfavedmProgressDocuments :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfavedmProgressDocuments
+  = lens _gfavedmProgressDocuments
+      (\ s a -> s{_gfavedmProgressDocuments = a})
+
+-- | The time this operation completed. Will be unset if operation still in
+-- progress.
+gfavedmEndTime :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata (Maybe UTCTime)
+gfavedmEndTime
+  = lens _gfavedmEndTime
+      (\ s a -> s{_gfavedmEndTime = a})
+      . mapping _DateTime
+
+-- | The state of the export operation.
+gfavedmOperationState :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata (Maybe GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState)
+gfavedmOperationState
+  = lens _gfavedmOperationState
+      (\ s a -> s{_gfavedmOperationState = a})
+
+-- | Where the entities are being exported to.
+gfavedmOutputURIPrefix :: Lens' GoogleFirestoreAdminV1ExportDocumentsMetadata (Maybe Text)
+gfavedmOutputURIPrefix
+  = lens _gfavedmOutputURIPrefix
+      (\ s a -> s{_gfavedmOutputURIPrefix = a})
+
+instance FromJSON
+         GoogleFirestoreAdminV1ExportDocumentsMetadata where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ExportDocumentsMetadata"
+              (\ o ->
+                 GoogleFirestoreAdminV1ExportDocumentsMetadata' <$>
+                   (o .:? "progressBytes") <*> (o .:? "startTime") <*>
+                     (o .:? "collectionIds" .!= mempty)
+                     <*> (o .:? "progressDocuments")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "operationState")
+                     <*> (o .:? "outputUriPrefix"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ExportDocumentsMetadata where
+        toJSON
+          GoogleFirestoreAdminV1ExportDocumentsMetadata'{..}
+          = object
+              (catMaybes
+                 [("progressBytes" .=) <$> _gfavedmProgressBytes,
+                  ("startTime" .=) <$> _gfavedmStartTime,
+                  ("collectionIds" .=) <$> _gfavedmCollectionIds,
+                  ("progressDocuments" .=) <$>
+                    _gfavedmProgressDocuments,
+                  ("endTime" .=) <$> _gfavedmEndTime,
+                  ("operationState" .=) <$> _gfavedmOperationState,
+                  ("outputUriPrefix" .=) <$> _gfavedmOutputURIPrefix])
+
+-- | Describes the progress of the operation. Unit of work is generic and
+-- must be interpreted based on where Progress is used.
+--
+-- /See:/ 'googleFirestoreAdminV1Progress' smart constructor.
+data GoogleFirestoreAdminV1Progress = GoogleFirestoreAdminV1Progress'
+    { _gfavpCompletedWork :: !(Maybe (Textual Int64))
+    , _gfavpEstimatedWork :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1Progress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavpCompletedWork'
+--
+-- * 'gfavpEstimatedWork'
+googleFirestoreAdminV1Progress
+    :: GoogleFirestoreAdminV1Progress
+googleFirestoreAdminV1Progress =
+    GoogleFirestoreAdminV1Progress'
+    { _gfavpCompletedWork = Nothing
+    , _gfavpEstimatedWork = Nothing
+    }
+
+-- | The amount of work completed.
+gfavpCompletedWork :: Lens' GoogleFirestoreAdminV1Progress (Maybe Int64)
+gfavpCompletedWork
+  = lens _gfavpCompletedWork
+      (\ s a -> s{_gfavpCompletedWork = a})
+      . mapping _Coerce
+
+-- | The amount of work estimated.
+gfavpEstimatedWork :: Lens' GoogleFirestoreAdminV1Progress (Maybe Int64)
+gfavpEstimatedWork
+  = lens _gfavpEstimatedWork
+      (\ s a -> s{_gfavpEstimatedWork = a})
+      . mapping _Coerce
+
+instance FromJSON GoogleFirestoreAdminV1Progress
+         where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1Progress"
+              (\ o ->
+                 GoogleFirestoreAdminV1Progress' <$>
+                   (o .:? "completedWork") <*> (o .:? "estimatedWork"))
+
+instance ToJSON GoogleFirestoreAdminV1Progress where
+        toJSON GoogleFirestoreAdminV1Progress'{..}
+          = object
+              (catMaybes
+                 [("completedWork" .=) <$> _gfavpCompletedWork,
+                  ("estimatedWork" .=) <$> _gfavpEstimatedWork])
+
+-- | A set of field paths on a document. Used to restrict a get or update
+-- operation on a document to a subset of its fields. This is different
+-- from standard field masks, as this is always scoped to a Document, and
+-- takes in account the dynamic nature of Value.
+--
+-- /See:/ 'documentMask' smart constructor.
+newtype DocumentMask = DocumentMask'
+    { _dmFieldPaths :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentMask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmFieldPaths'
+documentMask
+    :: DocumentMask
+documentMask =
+    DocumentMask'
+    { _dmFieldPaths = Nothing
+    }
+
+-- | The list of field paths in the mask. See Document.fields for a field
+-- path syntax reference.
+dmFieldPaths :: Lens' DocumentMask [Text]
+dmFieldPaths
+  = lens _dmFieldPaths (\ s a -> s{_dmFieldPaths = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DocumentMask where
+        parseJSON
+          = withObject "DocumentMask"
+              (\ o ->
+                 DocumentMask' <$> (o .:? "fieldPaths" .!= mempty))
+
+instance ToJSON DocumentMask where
+        toJSON DocumentMask'{..}
+          = object
+              (catMaybes [("fieldPaths" .=) <$> _dmFieldPaths])
+
+-- | A target specified by a query.
+--
+-- /See:/ 'queryTarget' smart constructor.
+data QueryTarget = QueryTarget'
+    { _qtParent          :: !(Maybe Text)
+    , _qtStructuredQuery :: !(Maybe StructuredQuery)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qtParent'
+--
+-- * 'qtStructuredQuery'
+queryTarget
+    :: QueryTarget
+queryTarget =
+    QueryTarget'
+    { _qtParent = Nothing
+    , _qtStructuredQuery = Nothing
+    }
+
+-- | The parent resource name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\` or
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+-- For example: \`projects\/my-project\/databases\/my-database\/documents\`
+-- or
+-- \`projects\/my-project\/databases\/my-database\/documents\/chatrooms\/my-chatroom\`
+qtParent :: Lens' QueryTarget (Maybe Text)
+qtParent = lens _qtParent (\ s a -> s{_qtParent = a})
+
+-- | A structured query.
+qtStructuredQuery :: Lens' QueryTarget (Maybe StructuredQuery)
+qtStructuredQuery
+  = lens _qtStructuredQuery
+      (\ s a -> s{_qtStructuredQuery = a})
+
+instance FromJSON QueryTarget where
+        parseJSON
+          = withObject "QueryTarget"
+              (\ o ->
+                 QueryTarget' <$>
+                   (o .:? "parent") <*> (o .:? "structuredQuery"))
+
+instance ToJSON QueryTarget where
+        toJSON QueryTarget'{..}
+          = object
+              (catMaybes
+                 [("parent" .=) <$> _qtParent,
+                  ("structuredQuery" .=) <$> _qtStructuredQuery])
+
+-- | A message that can hold any of the supported value types.
+--
+-- /See:/ 'value' smart constructor.
+data Value = Value'
+    { _vGeoPointValue  :: !(Maybe LatLng)
+    , _vBytesValue     :: !(Maybe Bytes)
+    , _vIntegerValue   :: !(Maybe (Textual Int64))
+    , _vTimestampValue :: !(Maybe DateTime')
+    , _vDoubleValue    :: !(Maybe (Textual Double))
+    , _vStringValue    :: !(Maybe Text)
+    , _vBooleanValue   :: !(Maybe Bool)
+    , _vMapValue       :: !(Maybe MapValue)
+    , _vArrayValue     :: !(Maybe ArrayValue)
+    , _vReferenceValue :: !(Maybe Text)
+    , _vNullValue      :: !(Maybe ValueNullValue)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Value' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vGeoPointValue'
+--
+-- * 'vBytesValue'
+--
+-- * 'vIntegerValue'
+--
+-- * 'vTimestampValue'
+--
+-- * 'vDoubleValue'
+--
+-- * 'vStringValue'
+--
+-- * 'vBooleanValue'
+--
+-- * 'vMapValue'
+--
+-- * 'vArrayValue'
+--
+-- * 'vReferenceValue'
+--
+-- * 'vNullValue'
+value
+    :: Value
+value =
+    Value'
+    { _vGeoPointValue = Nothing
+    , _vBytesValue = Nothing
+    , _vIntegerValue = Nothing
+    , _vTimestampValue = Nothing
+    , _vDoubleValue = Nothing
+    , _vStringValue = Nothing
+    , _vBooleanValue = Nothing
+    , _vMapValue = Nothing
+    , _vArrayValue = Nothing
+    , _vReferenceValue = Nothing
+    , _vNullValue = Nothing
+    }
+
+-- | A geo point value representing a point on the surface of Earth.
+vGeoPointValue :: Lens' Value (Maybe LatLng)
+vGeoPointValue
+  = lens _vGeoPointValue
+      (\ s a -> s{_vGeoPointValue = a})
+
+-- | A bytes value. Must not exceed 1 MiB - 89 bytes. Only the first 1,500
+-- bytes are considered by queries.
+vBytesValue :: Lens' Value (Maybe ByteString)
+vBytesValue
+  = lens _vBytesValue (\ s a -> s{_vBytesValue = a}) .
+      mapping _Bytes
+
+-- | An integer value.
+vIntegerValue :: Lens' Value (Maybe Int64)
+vIntegerValue
+  = lens _vIntegerValue
+      (\ s a -> s{_vIntegerValue = a})
+      . mapping _Coerce
+
+-- | A timestamp value. Precise only to microseconds. When stored, any
+-- additional precision is rounded down.
+vTimestampValue :: Lens' Value (Maybe UTCTime)
+vTimestampValue
+  = lens _vTimestampValue
+      (\ s a -> s{_vTimestampValue = a})
+      . mapping _DateTime
+
+-- | A double value.
+vDoubleValue :: Lens' Value (Maybe Double)
+vDoubleValue
+  = lens _vDoubleValue (\ s a -> s{_vDoubleValue = a})
+      . mapping _Coerce
+
+-- | A string value. The string, represented as UTF-8, must not exceed 1 MiB
+-- - 89 bytes. Only the first 1,500 bytes of the UTF-8 representation are
+-- considered by queries.
+vStringValue :: Lens' Value (Maybe Text)
+vStringValue
+  = lens _vStringValue (\ s a -> s{_vStringValue = a})
+
+-- | A boolean value.
+vBooleanValue :: Lens' Value (Maybe Bool)
+vBooleanValue
+  = lens _vBooleanValue
+      (\ s a -> s{_vBooleanValue = a})
+
+-- | A map value.
+vMapValue :: Lens' Value (Maybe MapValue)
+vMapValue
+  = lens _vMapValue (\ s a -> s{_vMapValue = a})
+
+-- | An array value. Cannot directly contain another array value, though can
+-- contain an map which contains another array.
+vArrayValue :: Lens' Value (Maybe ArrayValue)
+vArrayValue
+  = lens _vArrayValue (\ s a -> s{_vArrayValue = a})
+
+-- | A reference to a document. For example:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+vReferenceValue :: Lens' Value (Maybe Text)
+vReferenceValue
+  = lens _vReferenceValue
+      (\ s a -> s{_vReferenceValue = a})
+
+-- | A null value.
+vNullValue :: Lens' Value (Maybe ValueNullValue)
+vNullValue
+  = lens _vNullValue (\ s a -> s{_vNullValue = a})
+
+instance FromJSON Value where
+        parseJSON
+          = withObject "Value"
+              (\ o ->
+                 Value' <$>
+                   (o .:? "geoPointValue") <*> (o .:? "bytesValue") <*>
+                     (o .:? "integerValue")
+                     <*> (o .:? "timestampValue")
+                     <*> (o .:? "doubleValue")
+                     <*> (o .:? "stringValue")
+                     <*> (o .:? "booleanValue")
+                     <*> (o .:? "mapValue")
+                     <*> (o .:? "arrayValue")
+                     <*> (o .:? "referenceValue")
+                     <*> (o .:? "nullValue"))
+
+instance ToJSON Value where
+        toJSON Value'{..}
+          = object
+              (catMaybes
+                 [("geoPointValue" .=) <$> _vGeoPointValue,
+                  ("bytesValue" .=) <$> _vBytesValue,
+                  ("integerValue" .=) <$> _vIntegerValue,
+                  ("timestampValue" .=) <$> _vTimestampValue,
+                  ("doubleValue" .=) <$> _vDoubleValue,
+                  ("stringValue" .=) <$> _vStringValue,
+                  ("booleanValue" .=) <$> _vBooleanValue,
+                  ("mapValue" .=) <$> _vMapValue,
+                  ("arrayValue" .=) <$> _vArrayValue,
+                  ("referenceValue" .=) <$> _vReferenceValue,
+                  ("nullValue" .=) <$> _vNullValue])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | A transformation of a document.
+--
+-- /See:/ 'documentTransform' smart constructor.
+data DocumentTransform = DocumentTransform'
+    { _dtDocument        :: !(Maybe Text)
+    , _dtFieldTransforms :: !(Maybe [FieldTransform])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentTransform' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtDocument'
+--
+-- * 'dtFieldTransforms'
+documentTransform
+    :: DocumentTransform
+documentTransform =
+    DocumentTransform'
+    { _dtDocument = Nothing
+    , _dtFieldTransforms = Nothing
+    }
+
+-- | The name of the document to transform.
+dtDocument :: Lens' DocumentTransform (Maybe Text)
+dtDocument
+  = lens _dtDocument (\ s a -> s{_dtDocument = a})
+
+-- | The list of transformations to apply to the fields of the document, in
+-- order. This must not be empty.
+dtFieldTransforms :: Lens' DocumentTransform [FieldTransform]
+dtFieldTransforms
+  = lens _dtFieldTransforms
+      (\ s a -> s{_dtFieldTransforms = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DocumentTransform where
+        parseJSON
+          = withObject "DocumentTransform"
+              (\ o ->
+                 DocumentTransform' <$>
+                   (o .:? "document") <*>
+                     (o .:? "fieldTransforms" .!= mempty))
+
+instance ToJSON DocumentTransform where
+        toJSON DocumentTransform'{..}
+          = object
+              (catMaybes
+                 [("document" .=) <$> _dtDocument,
+                  ("fieldTransforms" .=) <$> _dtFieldTransforms])
+
+-- | A Firestore query.
+--
+-- /See:/ 'structuredQuery' smart constructor.
+data StructuredQuery = StructuredQuery'
+    { _sqWhere   :: !(Maybe Filter)
+    , _sqOrderBy :: !(Maybe [Order])
+    , _sqStartAt :: !(Maybe Cursor)
+    , _sqOffSet  :: !(Maybe (Textual Int32))
+    , _sqFrom    :: !(Maybe [CollectionSelector])
+    , _sqEndAt   :: !(Maybe Cursor)
+    , _sqLimit   :: !(Maybe (Textual Int32))
+    , _sqSelect  :: !(Maybe Projection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StructuredQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sqWhere'
+--
+-- * 'sqOrderBy'
+--
+-- * 'sqStartAt'
+--
+-- * 'sqOffSet'
+--
+-- * 'sqFrom'
+--
+-- * 'sqEndAt'
+--
+-- * 'sqLimit'
+--
+-- * 'sqSelect'
+structuredQuery
+    :: StructuredQuery
+structuredQuery =
+    StructuredQuery'
+    { _sqWhere = Nothing
+    , _sqOrderBy = Nothing
+    , _sqStartAt = Nothing
+    , _sqOffSet = Nothing
+    , _sqFrom = Nothing
+    , _sqEndAt = Nothing
+    , _sqLimit = Nothing
+    , _sqSelect = Nothing
+    }
+
+-- | The filter to apply.
+sqWhere :: Lens' StructuredQuery (Maybe Filter)
+sqWhere = lens _sqWhere (\ s a -> s{_sqWhere = a})
+
+-- | The order to apply to the query results. Firestore guarantees a stable
+-- ordering through the following rules: * Any field required to appear in
+-- \`order_by\`, that is not already specified in \`order_by\`, is appended
+-- to the order in field name order by default. * If an order on
+-- \`__name__\` is not specified, it is appended by default. Fields are
+-- appended with the same sort direction as the last order specified, or
+-- \'ASCENDING\' if no order was specified. For example: * \`SELECT * FROM
+-- Foo ORDER BY A\` becomes \`SELECT * FROM Foo ORDER BY A, __name__\` *
+-- \`SELECT * FROM Foo ORDER BY A DESC\` becomes \`SELECT * FROM Foo ORDER
+-- BY A DESC, __name__ DESC\` * \`SELECT * FROM Foo WHERE A > 1\` becomes
+-- \`SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__\`
+sqOrderBy :: Lens' StructuredQuery [Order]
+sqOrderBy
+  = lens _sqOrderBy (\ s a -> s{_sqOrderBy = a}) .
+      _Default
+      . _Coerce
+
+-- | A starting point for the query results.
+sqStartAt :: Lens' StructuredQuery (Maybe Cursor)
+sqStartAt
+  = lens _sqStartAt (\ s a -> s{_sqStartAt = a})
+
+-- | The number of results to skip. Applies before limit, but after all other
+-- constraints. Must be >= 0 if specified.
+sqOffSet :: Lens' StructuredQuery (Maybe Int32)
+sqOffSet
+  = lens _sqOffSet (\ s a -> s{_sqOffSet = a}) .
+      mapping _Coerce
+
+-- | The collections to query.
+sqFrom :: Lens' StructuredQuery [CollectionSelector]
+sqFrom
+  = lens _sqFrom (\ s a -> s{_sqFrom = a}) . _Default .
+      _Coerce
+
+-- | A end point for the query results.
+sqEndAt :: Lens' StructuredQuery (Maybe Cursor)
+sqEndAt = lens _sqEndAt (\ s a -> s{_sqEndAt = a})
+
+-- | The maximum number of results to return. Applies after all other
+-- constraints. Must be >= 0 if specified.
+sqLimit :: Lens' StructuredQuery (Maybe Int32)
+sqLimit
+  = lens _sqLimit (\ s a -> s{_sqLimit = a}) .
+      mapping _Coerce
+
+-- | The projection to return.
+sqSelect :: Lens' StructuredQuery (Maybe Projection)
+sqSelect = lens _sqSelect (\ s a -> s{_sqSelect = a})
+
+instance FromJSON StructuredQuery where
+        parseJSON
+          = withObject "StructuredQuery"
+              (\ o ->
+                 StructuredQuery' <$>
+                   (o .:? "where") <*> (o .:? "orderBy" .!= mempty) <*>
+                     (o .:? "startAt")
+                     <*> (o .:? "offset")
+                     <*> (o .:? "from" .!= mempty)
+                     <*> (o .:? "endAt")
+                     <*> (o .:? "limit")
+                     <*> (o .:? "select"))
+
+instance ToJSON StructuredQuery where
+        toJSON StructuredQuery'{..}
+          = object
+              (catMaybes
+                 [("where" .=) <$> _sqWhere,
+                  ("orderBy" .=) <$> _sqOrderBy,
+                  ("startAt" .=) <$> _sqStartAt,
+                  ("offset" .=) <$> _sqOffSet, ("from" .=) <$> _sqFrom,
+                  ("endAt" .=) <$> _sqEndAt, ("limit" .=) <$> _sqLimit,
+                  ("select" .=) <$> _sqSelect])
+
+-- | A digest of all the documents that match a given target.
+--
+-- /See:/ 'existenceFilter' smart constructor.
+data ExistenceFilter = ExistenceFilter'
+    { _efTargetId :: !(Maybe (Textual Int32))
+    , _efCount    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExistenceFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'efTargetId'
+--
+-- * 'efCount'
+existenceFilter
+    :: ExistenceFilter
+existenceFilter =
+    ExistenceFilter'
+    { _efTargetId = Nothing
+    , _efCount = Nothing
+    }
+
+-- | The target ID to which this filter applies.
+efTargetId :: Lens' ExistenceFilter (Maybe Int32)
+efTargetId
+  = lens _efTargetId (\ s a -> s{_efTargetId = a}) .
+      mapping _Coerce
+
+-- | The total count of documents that match target_id. If different from the
+-- count of documents in the client that match, the client must manually
+-- determine which documents no longer match the target.
+efCount :: Lens' ExistenceFilter (Maybe Int32)
+efCount
+  = lens _efCount (\ s a -> s{_efCount = a}) .
+      mapping _Coerce
+
+instance FromJSON ExistenceFilter where
+        parseJSON
+          = withObject "ExistenceFilter"
+              (\ o ->
+                 ExistenceFilter' <$>
+                   (o .:? "targetId") <*> (o .:? "count"))
+
+instance ToJSON ExistenceFilter where
+        toJSON ExistenceFilter'{..}
+          = object
+              (catMaybes
+                 [("targetId" .=) <$> _efTargetId,
+                  ("count" .=) <$> _efCount])
+
+-- | The response for FirestoreAdmin.ListFields.
+--
+-- /See:/ 'googleFirestoreAdminV1ListFieldsResponse' smart constructor.
+data GoogleFirestoreAdminV1ListFieldsResponse = GoogleFirestoreAdminV1ListFieldsResponse'
+    { _gfavlfrNextPageToken :: !(Maybe Text)
+    , _gfavlfrFields        :: !(Maybe [GoogleFirestoreAdminV1Field])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ListFieldsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavlfrNextPageToken'
+--
+-- * 'gfavlfrFields'
+googleFirestoreAdminV1ListFieldsResponse
+    :: GoogleFirestoreAdminV1ListFieldsResponse
+googleFirestoreAdminV1ListFieldsResponse =
+    GoogleFirestoreAdminV1ListFieldsResponse'
+    { _gfavlfrNextPageToken = Nothing
+    , _gfavlfrFields = Nothing
+    }
+
+-- | A page token that may be used to request another page of results. If
+-- blank, this is the last page.
+gfavlfrNextPageToken :: Lens' GoogleFirestoreAdminV1ListFieldsResponse (Maybe Text)
+gfavlfrNextPageToken
+  = lens _gfavlfrNextPageToken
+      (\ s a -> s{_gfavlfrNextPageToken = a})
+
+-- | The requested fields.
+gfavlfrFields :: Lens' GoogleFirestoreAdminV1ListFieldsResponse [GoogleFirestoreAdminV1Field]
+gfavlfrFields
+  = lens _gfavlfrFields
+      (\ s a -> s{_gfavlfrFields = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         GoogleFirestoreAdminV1ListFieldsResponse where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ListFieldsResponse"
+              (\ o ->
+                 GoogleFirestoreAdminV1ListFieldsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "fields" .!= mempty))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ListFieldsResponse where
+        toJSON GoogleFirestoreAdminV1ListFieldsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gfavlfrNextPageToken,
+                  ("fields" .=) <$> _gfavlfrFields])
+
+-- | The request for FirestoreAdmin.ImportDocuments.
+--
+-- /See:/ 'googleFirestoreAdminV1ImportDocumentsRequest' smart constructor.
+data GoogleFirestoreAdminV1ImportDocumentsRequest = GoogleFirestoreAdminV1ImportDocumentsRequest'
+    { _gfavidrInputURIPrefix :: !(Maybe Text)
+    , _gfavidrCollectionIds  :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ImportDocumentsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavidrInputURIPrefix'
+--
+-- * 'gfavidrCollectionIds'
+googleFirestoreAdminV1ImportDocumentsRequest
+    :: GoogleFirestoreAdminV1ImportDocumentsRequest
+googleFirestoreAdminV1ImportDocumentsRequest =
+    GoogleFirestoreAdminV1ImportDocumentsRequest'
+    { _gfavidrInputURIPrefix = Nothing
+    , _gfavidrCollectionIds = Nothing
+    }
+
+-- | Location of the exported files. This must match the output_uri_prefix of
+-- an ExportDocumentsResponse from an export that has completed
+-- successfully. See:
+-- google.firestore.admin.v1.ExportDocumentsResponse.output_uri_prefix.
+gfavidrInputURIPrefix :: Lens' GoogleFirestoreAdminV1ImportDocumentsRequest (Maybe Text)
+gfavidrInputURIPrefix
+  = lens _gfavidrInputURIPrefix
+      (\ s a -> s{_gfavidrInputURIPrefix = a})
+
+-- | Which collection ids to import. Unspecified means all collections
+-- included in the import.
+gfavidrCollectionIds :: Lens' GoogleFirestoreAdminV1ImportDocumentsRequest [Text]
+gfavidrCollectionIds
+  = lens _gfavidrCollectionIds
+      (\ s a -> s{_gfavidrCollectionIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         GoogleFirestoreAdminV1ImportDocumentsRequest where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ImportDocumentsRequest"
+              (\ o ->
+                 GoogleFirestoreAdminV1ImportDocumentsRequest' <$>
+                   (o .:? "inputUriPrefix") <*>
+                     (o .:? "collectionIds" .!= mempty))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ImportDocumentsRequest where
+        toJSON
+          GoogleFirestoreAdminV1ImportDocumentsRequest'{..}
+          = object
+              (catMaybes
+                 [("inputUriPrefix" .=) <$> _gfavidrInputURIPrefix,
+                  ("collectionIds" .=) <$> _gfavidrCollectionIds])
+
+-- | The metadata message for google.cloud.location.Location.metadata.
+--
+-- /See:/ 'googleFirestoreAdminV1LocationMetadata' smart constructor.
+data GoogleFirestoreAdminV1LocationMetadata =
+    GoogleFirestoreAdminV1LocationMetadata'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1LocationMetadata' with the minimum fields required to make a request.
+--
+googleFirestoreAdminV1LocationMetadata
+    :: GoogleFirestoreAdminV1LocationMetadata
+googleFirestoreAdminV1LocationMetadata =
+    GoogleFirestoreAdminV1LocationMetadata'
+
+instance FromJSON
+         GoogleFirestoreAdminV1LocationMetadata where
+        parseJSON
+          = withObject "GoogleFirestoreAdminV1LocationMetadata"
+              (\ o -> pure GoogleFirestoreAdminV1LocationMetadata')
+
+instance ToJSON
+         GoogleFirestoreAdminV1LocationMetadata where
+        toJSON = const emptyObject
+
+-- | The request message for Operations.CancelOperation.
+--
+-- /See:/ 'googleLongrunningCancelOperationRequest' smart constructor.
+data GoogleLongrunningCancelOperationRequest =
+    GoogleLongrunningCancelOperationRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleLongrunningCancelOperationRequest' with the minimum fields required to make a request.
+--
+googleLongrunningCancelOperationRequest
+    :: GoogleLongrunningCancelOperationRequest
+googleLongrunningCancelOperationRequest =
+    GoogleLongrunningCancelOperationRequest'
+
+instance FromJSON
+         GoogleLongrunningCancelOperationRequest where
+        parseJSON
+          = withObject
+              "GoogleLongrunningCancelOperationRequest"
+              (\ o ->
+                 pure GoogleLongrunningCancelOperationRequest')
+
+instance ToJSON
+         GoogleLongrunningCancelOperationRequest where
+        toJSON = const emptyObject
+
+-- | The response from Firestore.ListCollectionIds.
+--
+-- /See:/ 'listCollectionIdsResponse' smart constructor.
+data ListCollectionIdsResponse = ListCollectionIdsResponse'
+    { _lcirNextPageToken :: !(Maybe Text)
+    , _lcirCollectionIds :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCollectionIdsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcirNextPageToken'
+--
+-- * 'lcirCollectionIds'
+listCollectionIdsResponse
+    :: ListCollectionIdsResponse
+listCollectionIdsResponse =
+    ListCollectionIdsResponse'
+    { _lcirNextPageToken = Nothing
+    , _lcirCollectionIds = Nothing
+    }
+
+-- | A page token that may be used to continue the list.
+lcirNextPageToken :: Lens' ListCollectionIdsResponse (Maybe Text)
+lcirNextPageToken
+  = lens _lcirNextPageToken
+      (\ s a -> s{_lcirNextPageToken = a})
+
+-- | The collection ids.
+lcirCollectionIds :: Lens' ListCollectionIdsResponse [Text]
+lcirCollectionIds
+  = lens _lcirCollectionIds
+      (\ s a -> s{_lcirCollectionIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListCollectionIdsResponse where
+        parseJSON
+          = withObject "ListCollectionIdsResponse"
+              (\ o ->
+                 ListCollectionIdsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "collectionIds" .!= mempty))
+
+instance ToJSON ListCollectionIdsResponse where
+        toJSON ListCollectionIdsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lcirNextPageToken,
+                  ("collectionIds" .=) <$> _lcirCollectionIds])
+
+-- | A reference to a field, such as \`max(messages.time) as max_time\`.
+--
+-- /See:/ 'fieldReference' smart constructor.
+newtype FieldReference = FieldReference'
+    { _frFieldPath :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FieldReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frFieldPath'
+fieldReference
+    :: FieldReference
+fieldReference =
+    FieldReference'
+    { _frFieldPath = Nothing
+    }
+
+frFieldPath :: Lens' FieldReference (Maybe Text)
+frFieldPath
+  = lens _frFieldPath (\ s a -> s{_frFieldPath = a})
+
+instance FromJSON FieldReference where
+        parseJSON
+          = withObject "FieldReference"
+              (\ o -> FieldReference' <$> (o .:? "fieldPath"))
+
+instance ToJSON FieldReference where
+        toJSON FieldReference'{..}
+          = object
+              (catMaybes [("fieldPath" .=) <$> _frFieldPath])
+
+-- | A Document has been removed from the view of the targets. Sent if the
+-- document is no longer relevant to a target and is out of view. Can be
+-- sent instead of a DocumentDelete or a DocumentChange if the server can
+-- not send the new value of the document. Multiple DocumentRemove messages
+-- may be returned for the same logical write or delete, if multiple
+-- targets are affected.
+--
+-- /See:/ 'documentRemove' smart constructor.
+data DocumentRemove = DocumentRemove'
+    { _drReadTime         :: !(Maybe DateTime')
+    , _drDocument         :: !(Maybe Text)
+    , _drRemovedTargetIds :: !(Maybe [Textual Int32])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentRemove' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drReadTime'
+--
+-- * 'drDocument'
+--
+-- * 'drRemovedTargetIds'
+documentRemove
+    :: DocumentRemove
+documentRemove =
+    DocumentRemove'
+    { _drReadTime = Nothing
+    , _drDocument = Nothing
+    , _drRemovedTargetIds = Nothing
+    }
+
+-- | The read timestamp at which the remove was observed. Greater or equal to
+-- the \`commit_time\` of the change\/delete\/remove.
+drReadTime :: Lens' DocumentRemove (Maybe UTCTime)
+drReadTime
+  = lens _drReadTime (\ s a -> s{_drReadTime = a}) .
+      mapping _DateTime
+
+-- | The resource name of the Document that has gone out of view.
+drDocument :: Lens' DocumentRemove (Maybe Text)
+drDocument
+  = lens _drDocument (\ s a -> s{_drDocument = a})
+
+-- | A set of target IDs for targets that previously matched this document.
+drRemovedTargetIds :: Lens' DocumentRemove [Int32]
+drRemovedTargetIds
+  = lens _drRemovedTargetIds
+      (\ s a -> s{_drRemovedTargetIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DocumentRemove where
+        parseJSON
+          = withObject "DocumentRemove"
+              (\ o ->
+                 DocumentRemove' <$>
+                   (o .:? "readTime") <*> (o .:? "document") <*>
+                     (o .:? "removedTargetIds" .!= mempty))
+
+instance ToJSON DocumentRemove where
+        toJSON DocumentRemove'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _drReadTime,
+                  ("document" .=) <$> _drDocument,
+                  ("removedTargetIds" .=) <$> _drRemovedTargetIds])
+
+-- | A Document has changed. May be the result of multiple writes, including
+-- deletes, that ultimately resulted in a new value for the Document.
+-- Multiple DocumentChange messages may be returned for the same logical
+-- change, if multiple targets are affected.
+--
+-- /See:/ 'documentChange' smart constructor.
+data DocumentChange = DocumentChange'
+    { _dcDocument         :: !(Maybe Document)
+    , _dcTargetIds        :: !(Maybe [Textual Int32])
+    , _dcRemovedTargetIds :: !(Maybe [Textual Int32])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcDocument'
+--
+-- * 'dcTargetIds'
+--
+-- * 'dcRemovedTargetIds'
+documentChange
+    :: DocumentChange
+documentChange =
+    DocumentChange'
+    { _dcDocument = Nothing
+    , _dcTargetIds = Nothing
+    , _dcRemovedTargetIds = Nothing
+    }
+
+-- | The new state of the Document. If \`mask\` is set, contains only fields
+-- that were updated or added.
+dcDocument :: Lens' DocumentChange (Maybe Document)
+dcDocument
+  = lens _dcDocument (\ s a -> s{_dcDocument = a})
+
+-- | A set of target IDs of targets that match this document.
+dcTargetIds :: Lens' DocumentChange [Int32]
+dcTargetIds
+  = lens _dcTargetIds (\ s a -> s{_dcTargetIds = a}) .
+      _Default
+      . _Coerce
+
+-- | A set of target IDs for targets that no longer match this document.
+dcRemovedTargetIds :: Lens' DocumentChange [Int32]
+dcRemovedTargetIds
+  = lens _dcRemovedTargetIds
+      (\ s a -> s{_dcRemovedTargetIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DocumentChange where
+        parseJSON
+          = withObject "DocumentChange"
+              (\ o ->
+                 DocumentChange' <$>
+                   (o .:? "document") <*> (o .:? "targetIds" .!= mempty)
+                     <*> (o .:? "removedTargetIds" .!= mempty))
+
+instance ToJSON DocumentChange where
+        toJSON DocumentChange'{..}
+          = object
+              (catMaybes
+                 [("document" .=) <$> _dcDocument,
+                  ("targetIds" .=) <$> _dcTargetIds,
+                  ("removedTargetIds" .=) <$> _dcRemovedTargetIds])
+
+-- | Metadata for google.longrunning.Operation results from
+-- FirestoreAdmin.UpdateField.
+--
+-- /See:/ 'googleFirestoreAdminV1FieldOperationMetadata' smart constructor.
+data GoogleFirestoreAdminV1FieldOperationMetadata = GoogleFirestoreAdminV1FieldOperationMetadata'
+    { _gfavfomProgressBytes     :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfavfomState             :: !(Maybe GoogleFirestoreAdminV1FieldOperationMetadataState)
+    , _gfavfomField             :: !(Maybe Text)
+    , _gfavfomStartTime         :: !(Maybe DateTime')
+    , _gfavfomProgressDocuments :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfavfomIndexConfigDeltas :: !(Maybe [GoogleFirestoreAdminV1IndexConfigDelta])
+    , _gfavfomEndTime           :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1FieldOperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavfomProgressBytes'
+--
+-- * 'gfavfomState'
+--
+-- * 'gfavfomField'
+--
+-- * 'gfavfomStartTime'
+--
+-- * 'gfavfomProgressDocuments'
+--
+-- * 'gfavfomIndexConfigDeltas'
+--
+-- * 'gfavfomEndTime'
+googleFirestoreAdminV1FieldOperationMetadata
+    :: GoogleFirestoreAdminV1FieldOperationMetadata
+googleFirestoreAdminV1FieldOperationMetadata =
+    GoogleFirestoreAdminV1FieldOperationMetadata'
+    { _gfavfomProgressBytes = Nothing
+    , _gfavfomState = Nothing
+    , _gfavfomField = Nothing
+    , _gfavfomStartTime = Nothing
+    , _gfavfomProgressDocuments = Nothing
+    , _gfavfomIndexConfigDeltas = Nothing
+    , _gfavfomEndTime = Nothing
+    }
+
+-- | The progress, in bytes, of this operation.
+gfavfomProgressBytes :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfavfomProgressBytes
+  = lens _gfavfomProgressBytes
+      (\ s a -> s{_gfavfomProgressBytes = a})
+
+-- | The state of the operation.
+gfavfomState :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata (Maybe GoogleFirestoreAdminV1FieldOperationMetadataState)
+gfavfomState
+  = lens _gfavfomState (\ s a -> s{_gfavfomState = a})
+
+-- | The field resource that this operation is acting on. For example:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/fields\/{field_path}\`
+gfavfomField :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata (Maybe Text)
+gfavfomField
+  = lens _gfavfomField (\ s a -> s{_gfavfomField = a})
+
+-- | The time this operation started.
+gfavfomStartTime :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata (Maybe UTCTime)
+gfavfomStartTime
+  = lens _gfavfomStartTime
+      (\ s a -> s{_gfavfomStartTime = a})
+      . mapping _DateTime
+
+-- | The progress, in documents, of this operation.
+gfavfomProgressDocuments :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfavfomProgressDocuments
+  = lens _gfavfomProgressDocuments
+      (\ s a -> s{_gfavfomProgressDocuments = a})
+
+-- | A list of IndexConfigDelta, which describe the intent of this operation.
+gfavfomIndexConfigDeltas :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata [GoogleFirestoreAdminV1IndexConfigDelta]
+gfavfomIndexConfigDeltas
+  = lens _gfavfomIndexConfigDeltas
+      (\ s a -> s{_gfavfomIndexConfigDeltas = a})
+      . _Default
+      . _Coerce
+
+-- | The time this operation completed. Will be unset if operation still in
+-- progress.
+gfavfomEndTime :: Lens' GoogleFirestoreAdminV1FieldOperationMetadata (Maybe UTCTime)
+gfavfomEndTime
+  = lens _gfavfomEndTime
+      (\ s a -> s{_gfavfomEndTime = a})
+      . mapping _DateTime
+
+instance FromJSON
+         GoogleFirestoreAdminV1FieldOperationMetadata where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1FieldOperationMetadata"
+              (\ o ->
+                 GoogleFirestoreAdminV1FieldOperationMetadata' <$>
+                   (o .:? "progressBytes") <*> (o .:? "state") <*>
+                     (o .:? "field")
+                     <*> (o .:? "startTime")
+                     <*> (o .:? "progressDocuments")
+                     <*> (o .:? "indexConfigDeltas" .!= mempty)
+                     <*> (o .:? "endTime"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1FieldOperationMetadata where
+        toJSON
+          GoogleFirestoreAdminV1FieldOperationMetadata'{..}
+          = object
+              (catMaybes
+                 [("progressBytes" .=) <$> _gfavfomProgressBytes,
+                  ("state" .=) <$> _gfavfomState,
+                  ("field" .=) <$> _gfavfomField,
+                  ("startTime" .=) <$> _gfavfomStartTime,
+                  ("progressDocuments" .=) <$>
+                    _gfavfomProgressDocuments,
+                  ("indexConfigDeltas" .=) <$>
+                    _gfavfomIndexConfigDeltas,
+                  ("endTime" .=) <$> _gfavfomEndTime])
+
+-- | The response for FirestoreAdmin.ListIndexes.
+--
+-- /See:/ 'googleFirestoreAdminV1ListIndexesResponse' smart constructor.
+data GoogleFirestoreAdminV1ListIndexesResponse = GoogleFirestoreAdminV1ListIndexesResponse'
+    { _gfavlirNextPageToken :: !(Maybe Text)
+    , _gfavlirIndexes       :: !(Maybe [GoogleFirestoreAdminV1Index])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ListIndexesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfavlirNextPageToken'
+--
+-- * 'gfavlirIndexes'
+googleFirestoreAdminV1ListIndexesResponse
+    :: GoogleFirestoreAdminV1ListIndexesResponse
+googleFirestoreAdminV1ListIndexesResponse =
+    GoogleFirestoreAdminV1ListIndexesResponse'
+    { _gfavlirNextPageToken = Nothing
+    , _gfavlirIndexes = Nothing
+    }
+
+-- | A page token that may be used to request another page of results. If
+-- blank, this is the last page.
+gfavlirNextPageToken :: Lens' GoogleFirestoreAdminV1ListIndexesResponse (Maybe Text)
+gfavlirNextPageToken
+  = lens _gfavlirNextPageToken
+      (\ s a -> s{_gfavlirNextPageToken = a})
+
+-- | The requested indexes.
+gfavlirIndexes :: Lens' GoogleFirestoreAdminV1ListIndexesResponse [GoogleFirestoreAdminV1Index]
+gfavlirIndexes
+  = lens _gfavlirIndexes
+      (\ s a -> s{_gfavlirIndexes = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         GoogleFirestoreAdminV1ListIndexesResponse where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ListIndexesResponse"
+              (\ o ->
+                 GoogleFirestoreAdminV1ListIndexesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "indexes" .!= mempty))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ListIndexesResponse where
+        toJSON GoogleFirestoreAdminV1ListIndexesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gfavlirNextPageToken,
+                  ("indexes" .=) <$> _gfavlirIndexes])
+
+-- | A map value.
+--
+-- /See:/ 'mapValue' smart constructor.
+newtype MapValue = MapValue'
+    { _mvFields :: Maybe MapValueFields
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MapValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mvFields'
+mapValue
+    :: MapValue
+mapValue =
+    MapValue'
+    { _mvFields = Nothing
+    }
+
+-- | The map\'s fields. The map keys represent field names. Field names
+-- matching the regular expression \`__.*__\` are reserved. Reserved field
+-- names are forbidden except in certain documented contexts. The map keys,
+-- represented as UTF-8, must not exceed 1,500 bytes and cannot be empty.
+mvFields :: Lens' MapValue (Maybe MapValueFields)
+mvFields = lens _mvFields (\ s a -> s{_mvFields = a})
+
+instance FromJSON MapValue where
+        parseJSON
+          = withObject "MapValue"
+              (\ o -> MapValue' <$> (o .:? "fields"))
+
+instance ToJSON MapValue where
+        toJSON MapValue'{..}
+          = object (catMaybes [("fields" .=) <$> _mvFields])
+
+-- | The request for Firestore.BatchGetDocuments.
+--
+-- /See:/ 'batchGetDocumentsRequest' smart constructor.
+data BatchGetDocumentsRequest = BatchGetDocumentsRequest'
+    { _bReadTime       :: !(Maybe DateTime')
+    , _bNewTransaction :: !(Maybe TransactionOptions)
+    , _bTransaction    :: !(Maybe Bytes)
+    , _bDocuments      :: !(Maybe [Text])
+    , _bMask           :: !(Maybe DocumentMask)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchGetDocumentsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bReadTime'
+--
+-- * 'bNewTransaction'
+--
+-- * 'bTransaction'
+--
+-- * 'bDocuments'
+--
+-- * 'bMask'
+batchGetDocumentsRequest
+    :: BatchGetDocumentsRequest
+batchGetDocumentsRequest =
+    BatchGetDocumentsRequest'
+    { _bReadTime = Nothing
+    , _bNewTransaction = Nothing
+    , _bTransaction = Nothing
+    , _bDocuments = Nothing
+    , _bMask = Nothing
+    }
+
+-- | Reads documents as they were at the given time. This may not be older
+-- than 60 seconds.
+bReadTime :: Lens' BatchGetDocumentsRequest (Maybe UTCTime)
+bReadTime
+  = lens _bReadTime (\ s a -> s{_bReadTime = a}) .
+      mapping _DateTime
+
+-- | Starts a new transaction and reads the documents. Defaults to a
+-- read-only transaction. The new transaction ID will be returned as the
+-- first response in the stream.
+bNewTransaction :: Lens' BatchGetDocumentsRequest (Maybe TransactionOptions)
+bNewTransaction
+  = lens _bNewTransaction
+      (\ s a -> s{_bNewTransaction = a})
+
+-- | Reads documents in a transaction.
+bTransaction :: Lens' BatchGetDocumentsRequest (Maybe ByteString)
+bTransaction
+  = lens _bTransaction (\ s a -> s{_bTransaction = a})
+      . mapping _Bytes
+
+-- | The names of the documents to retrieve. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+-- The request will fail if any of the document is not a child resource of
+-- the given \`database\`. Duplicate names will be elided.
+bDocuments :: Lens' BatchGetDocumentsRequest [Text]
+bDocuments
+  = lens _bDocuments (\ s a -> s{_bDocuments = a}) .
+      _Default
+      . _Coerce
+
+-- | The fields to return. If not set, returns all fields. If a document has
+-- a field that is not present in this mask, that field will not be
+-- returned in the response.
+bMask :: Lens' BatchGetDocumentsRequest (Maybe DocumentMask)
+bMask = lens _bMask (\ s a -> s{_bMask = a})
+
+instance FromJSON BatchGetDocumentsRequest where
+        parseJSON
+          = withObject "BatchGetDocumentsRequest"
+              (\ o ->
+                 BatchGetDocumentsRequest' <$>
+                   (o .:? "readTime") <*> (o .:? "newTransaction") <*>
+                     (o .:? "transaction")
+                     <*> (o .:? "documents" .!= mempty)
+                     <*> (o .:? "mask"))
+
+instance ToJSON BatchGetDocumentsRequest where
+        toJSON BatchGetDocumentsRequest'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _bReadTime,
+                  ("newTransaction" .=) <$> _bNewTransaction,
+                  ("transaction" .=) <$> _bTransaction,
+                  ("documents" .=) <$> _bDocuments,
+                  ("mask" .=) <$> _bMask])
+
+-- | A Firestore document. Must not exceed 1 MiB - 4 bytes.
+--
+-- /See:/ 'document' smart constructor.
+data Document = Document'
+    { _dUpdateTime :: !(Maybe DateTime')
+    , _dName       :: !(Maybe Text)
+    , _dCreateTime :: !(Maybe DateTime')
+    , _dFields     :: !(Maybe DocumentFields)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Document' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dUpdateTime'
+--
+-- * 'dName'
+--
+-- * 'dCreateTime'
+--
+-- * 'dFields'
+document
+    :: Document
+document =
+    Document'
+    { _dUpdateTime = Nothing
+    , _dName = Nothing
+    , _dCreateTime = Nothing
+    , _dFields = Nothing
+    }
+
+-- | Output only. The time at which the document was last changed. This value
+-- is initially set to the \`create_time\` then increases monotonically
+-- with each change to the document. It can also be compared to values from
+-- other documents and the \`read_time\` of a query.
+dUpdateTime :: Lens' Document (Maybe UTCTime)
+dUpdateTime
+  = lens _dUpdateTime (\ s a -> s{_dUpdateTime = a}) .
+      mapping _DateTime
+
+-- | The resource name of the document, for example
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+dName :: Lens' Document (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a})
+
+-- | Output only. The time at which the document was created. This value
+-- increases monotonically when a document is deleted then recreated. It
+-- can also be compared to values from other documents and the
+-- \`read_time\` of a query.
+dCreateTime :: Lens' Document (Maybe UTCTime)
+dCreateTime
+  = lens _dCreateTime (\ s a -> s{_dCreateTime = a}) .
+      mapping _DateTime
+
+-- | The document\'s fields. The map keys represent field names. A simple
+-- field name contains only characters \`a\` to \`z\`, \`A\` to \`Z\`,
+-- \`0\` to \`9\`, or \`_\`, and must not start with \`0\` to \`9\`. For
+-- example, \`foo_bar_17\`. Field names matching the regular expression
+-- \`__.*__\` are reserved. Reserved field names are forbidden except in
+-- certain documented contexts. The map keys, represented as UTF-8, must
+-- not exceed 1,500 bytes and cannot be empty. Field paths may be used in
+-- other contexts to refer to structured fields defined here. For
+-- \`map_value\`, the field path is represented by the simple or quoted
+-- field names of the containing fields, delimited by \`.\`. For example,
+-- the structured field \`\"foo\" : { map_value: { \"x&y\" : {
+-- string_value: \"hello\" }}}\` would be represented by the field path
+-- \`foo.x&y\`. Within a field path, a quoted field name starts and ends
+-- with \`\` \` \`\` and may contain any character. Some characters,
+-- including \`\` \` \`\`, must be escaped using a \`\\\`. For example,
+-- \`\` \`x&y\` \`\` represents \`x&y\` and \`\` \`bak\\\`tik\` \`\`
+-- represents \`\` bak\`tik \`\`.
+dFields :: Lens' Document (Maybe DocumentFields)
+dFields = lens _dFields (\ s a -> s{_dFields = a})
+
+instance FromJSON Document where
+        parseJSON
+          = withObject "Document"
+              (\ o ->
+                 Document' <$>
+                   (o .:? "updateTime") <*> (o .:? "name") <*>
+                     (o .:? "createTime")
+                     <*> (o .:? "fields"))
+
+instance ToJSON Document where
+        toJSON Document'{..}
+          = object
+              (catMaybes
+                 [("updateTime" .=) <$> _dUpdateTime,
+                  ("name" .=) <$> _dName,
+                  ("createTime" .=) <$> _dCreateTime,
+                  ("fields" .=) <$> _dFields])
+
+-- | An array value.
+--
+-- /See:/ 'arrayValue' smart constructor.
+newtype ArrayValue = ArrayValue'
+    { _avValues :: Maybe [Value]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ArrayValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avValues'
+arrayValue
+    :: ArrayValue
+arrayValue =
+    ArrayValue'
+    { _avValues = Nothing
+    }
+
+-- | Values in the array.
+avValues :: Lens' ArrayValue [Value]
+avValues
+  = lens _avValues (\ s a -> s{_avValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ArrayValue where
+        parseJSON
+          = withObject "ArrayValue"
+              (\ o -> ArrayValue' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON ArrayValue where
+        toJSON ArrayValue'{..}
+          = object (catMaybes [("values" .=) <$> _avValues])
+
+-- | The response for Firestore.Commit.
+--
+-- /See:/ 'commitResponse' smart constructor.
+data CommitResponse = CommitResponse'
+    { _crCommitTime   :: !(Maybe DateTime')
+    , _crWriteResults :: !(Maybe [WriteResult])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommitResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crCommitTime'
+--
+-- * 'crWriteResults'
+commitResponse
+    :: CommitResponse
+commitResponse =
+    CommitResponse'
+    { _crCommitTime = Nothing
+    , _crWriteResults = Nothing
+    }
+
+-- | The time at which the commit occurred.
+crCommitTime :: Lens' CommitResponse (Maybe UTCTime)
+crCommitTime
+  = lens _crCommitTime (\ s a -> s{_crCommitTime = a})
+      . mapping _DateTime
+
+-- | The result of applying the writes. This i-th write result corresponds to
+-- the i-th write in the request.
+crWriteResults :: Lens' CommitResponse [WriteResult]
+crWriteResults
+  = lens _crWriteResults
+      (\ s a -> s{_crWriteResults = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON CommitResponse where
+        parseJSON
+          = withObject "CommitResponse"
+              (\ o ->
+                 CommitResponse' <$>
+                   (o .:? "commitTime") <*>
+                     (o .:? "writeResults" .!= mempty))
+
+instance ToJSON CommitResponse where
+        toJSON CommitResponse'{..}
+          = object
+              (catMaybes
+                 [("commitTime" .=) <$> _crCommitTime,
+                  ("writeResults" .=) <$> _crWriteResults])
+
+-- | The response for Firestore.Listen.
+--
+-- /See:/ 'listenResponse' smart constructor.
+data ListenResponse = ListenResponse'
+    { _lrTargetChange   :: !(Maybe TargetChange)
+    , _lrDocumentRemove :: !(Maybe DocumentRemove)
+    , _lrDocumentChange :: !(Maybe DocumentChange)
+    , _lrFilter         :: !(Maybe ExistenceFilter)
+    , _lrDocumentDelete :: !(Maybe DocumentDelete)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListenResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrTargetChange'
+--
+-- * 'lrDocumentRemove'
+--
+-- * 'lrDocumentChange'
+--
+-- * 'lrFilter'
+--
+-- * 'lrDocumentDelete'
+listenResponse
+    :: ListenResponse
+listenResponse =
+    ListenResponse'
+    { _lrTargetChange = Nothing
+    , _lrDocumentRemove = Nothing
+    , _lrDocumentChange = Nothing
+    , _lrFilter = Nothing
+    , _lrDocumentDelete = Nothing
+    }
+
+-- | Targets have changed.
+lrTargetChange :: Lens' ListenResponse (Maybe TargetChange)
+lrTargetChange
+  = lens _lrTargetChange
+      (\ s a -> s{_lrTargetChange = a})
+
+-- | A Document has been removed from a target (because it is no longer
+-- relevant to that target).
+lrDocumentRemove :: Lens' ListenResponse (Maybe DocumentRemove)
+lrDocumentRemove
+  = lens _lrDocumentRemove
+      (\ s a -> s{_lrDocumentRemove = a})
+
+-- | A Document has changed.
+lrDocumentChange :: Lens' ListenResponse (Maybe DocumentChange)
+lrDocumentChange
+  = lens _lrDocumentChange
+      (\ s a -> s{_lrDocumentChange = a})
+
+-- | A filter to apply to the set of documents previously returned for the
+-- given target. Returned when documents may have been removed from the
+-- given target, but the exact documents are unknown.
+lrFilter :: Lens' ListenResponse (Maybe ExistenceFilter)
+lrFilter = lens _lrFilter (\ s a -> s{_lrFilter = a})
+
+-- | A Document has been deleted.
+lrDocumentDelete :: Lens' ListenResponse (Maybe DocumentDelete)
+lrDocumentDelete
+  = lens _lrDocumentDelete
+      (\ s a -> s{_lrDocumentDelete = a})
+
+instance FromJSON ListenResponse where
+        parseJSON
+          = withObject "ListenResponse"
+              (\ o ->
+                 ListenResponse' <$>
+                   (o .:? "targetChange") <*> (o .:? "documentRemove")
+                     <*> (o .:? "documentChange")
+                     <*> (o .:? "filter")
+                     <*> (o .:? "documentDelete"))
+
+instance ToJSON ListenResponse where
+        toJSON ListenResponse'{..}
+          = object
+              (catMaybes
+                 [("targetChange" .=) <$> _lrTargetChange,
+                  ("documentRemove" .=) <$> _lrDocumentRemove,
+                  ("documentChange" .=) <$> _lrDocumentChange,
+                  ("filter" .=) <$> _lrFilter,
+                  ("documentDelete" .=) <$> _lrDocumentDelete])
+
+-- | A filter on a specific field.
+--
+-- /See:/ 'fieldFilter' smart constructor.
+data FieldFilter = FieldFilter'
+    { _ffOp    :: !(Maybe FieldFilterOp)
+    , _ffField :: !(Maybe FieldReference)
+    , _ffValue :: !(Maybe Value)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FieldFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ffOp'
+--
+-- * 'ffField'
+--
+-- * 'ffValue'
+fieldFilter
+    :: FieldFilter
+fieldFilter =
+    FieldFilter'
+    { _ffOp = Nothing
+    , _ffField = Nothing
+    , _ffValue = Nothing
+    }
+
+-- | The operator to filter by.
+ffOp :: Lens' FieldFilter (Maybe FieldFilterOp)
+ffOp = lens _ffOp (\ s a -> s{_ffOp = a})
+
+-- | The field to filter by.
+ffField :: Lens' FieldFilter (Maybe FieldReference)
+ffField = lens _ffField (\ s a -> s{_ffField = a})
+
+-- | The value to compare to.
+ffValue :: Lens' FieldFilter (Maybe Value)
+ffValue = lens _ffValue (\ s a -> s{_ffValue = a})
+
+instance FromJSON FieldFilter where
+        parseJSON
+          = withObject "FieldFilter"
+              (\ o ->
+                 FieldFilter' <$>
+                   (o .:? "op") <*> (o .:? "field") <*> (o .:? "value"))
+
+instance ToJSON FieldFilter where
+        toJSON FieldFilter'{..}
+          = object
+              (catMaybes
+                 [("op" .=) <$> _ffOp, ("field" .=) <$> _ffField,
+                  ("value" .=) <$> _ffValue])
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as \`Delete\`, the response is
+-- \`google.protobuf.Empty\`. If the original method is standard
+-- \`Get\`\/\`Create\`\/\`Update\`, the response should be the resource.
+-- For other methods, the response should have the type \`XxxResponse\`,
+-- where \`Xxx\` is the original method name. For example, if the original
+-- method name is \`TakeSnapshot()\`, the inferred response type is
+-- \`TakeSnapshotResponse\`.
+--
+-- /See:/ 'googleLongrunningOperationResponse' smart constructor.
+newtype GoogleLongrunningOperationResponse = GoogleLongrunningOperationResponse'
+    { _glorAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleLongrunningOperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glorAddtional'
+googleLongrunningOperationResponse
+    :: HashMap Text JSONValue -- ^ 'glorAddtional'
+    -> GoogleLongrunningOperationResponse
+googleLongrunningOperationResponse pGlorAddtional_ =
+    GoogleLongrunningOperationResponse'
+    { _glorAddtional = _Coerce # pGlorAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+glorAddtional :: Lens' GoogleLongrunningOperationResponse (HashMap Text JSONValue)
+glorAddtional
+  = lens _glorAddtional
+      (\ s a -> s{_glorAddtional = a})
+      . _Coerce
+
+instance FromJSON GoogleLongrunningOperationResponse
+         where
+        parseJSON
+          = withObject "GoogleLongrunningOperationResponse"
+              (\ o ->
+                 GoogleLongrunningOperationResponse' <$>
+                   (parseJSONObject o))
+
+instance ToJSON GoogleLongrunningOperationResponse
+         where
+        toJSON = toJSON . _glorAddtional
+
+-- | The response for Firestore.ListDocuments.
+--
+-- /See:/ 'listDocumentsResponse' smart constructor.
+data ListDocumentsResponse = ListDocumentsResponse'
+    { _ldrNextPageToken :: !(Maybe Text)
+    , _ldrDocuments     :: !(Maybe [Document])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListDocumentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrNextPageToken'
+--
+-- * 'ldrDocuments'
+listDocumentsResponse
+    :: ListDocumentsResponse
+listDocumentsResponse =
+    ListDocumentsResponse'
+    { _ldrNextPageToken = Nothing
+    , _ldrDocuments = Nothing
+    }
+
+-- | The next page token.
+ldrNextPageToken :: Lens' ListDocumentsResponse (Maybe Text)
+ldrNextPageToken
+  = lens _ldrNextPageToken
+      (\ s a -> s{_ldrNextPageToken = a})
+
+-- | The Documents found.
+ldrDocuments :: Lens' ListDocumentsResponse [Document]
+ldrDocuments
+  = lens _ldrDocuments (\ s a -> s{_ldrDocuments = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListDocumentsResponse where
+        parseJSON
+          = withObject "ListDocumentsResponse"
+              (\ o ->
+                 ListDocumentsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "documents" .!= mempty))
+
+instance ToJSON ListDocumentsResponse where
+        toJSON ListDocumentsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ldrNextPageToken,
+                  ("documents" .=) <$> _ldrDocuments])
+
+-- | Returned in the google.longrunning.Operation response field.
+--
+-- /See:/ 'googleFirestoreAdminV1ExportDocumentsResponse' smart constructor.
+newtype GoogleFirestoreAdminV1ExportDocumentsResponse = GoogleFirestoreAdminV1ExportDocumentsResponse'
+    { _gOutputURIPrefix :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1ExportDocumentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gOutputURIPrefix'
+googleFirestoreAdminV1ExportDocumentsResponse
+    :: GoogleFirestoreAdminV1ExportDocumentsResponse
+googleFirestoreAdminV1ExportDocumentsResponse =
+    GoogleFirestoreAdminV1ExportDocumentsResponse'
+    { _gOutputURIPrefix = Nothing
+    }
+
+-- | Location of the output files. This can be used to begin an import into
+-- Cloud Firestore (this project or another project) after the operation
+-- completes successfully.
+gOutputURIPrefix :: Lens' GoogleFirestoreAdminV1ExportDocumentsResponse (Maybe Text)
+gOutputURIPrefix
+  = lens _gOutputURIPrefix
+      (\ s a -> s{_gOutputURIPrefix = a})
+
+instance FromJSON
+         GoogleFirestoreAdminV1ExportDocumentsResponse where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1ExportDocumentsResponse"
+              (\ o ->
+                 GoogleFirestoreAdminV1ExportDocumentsResponse' <$>
+                   (o .:? "outputUriPrefix"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1ExportDocumentsResponse where
+        toJSON
+          GoogleFirestoreAdminV1ExportDocumentsResponse'{..}
+          = object
+              (catMaybes
+                 [("outputUriPrefix" .=) <$> _gOutputURIPrefix])
+
+-- | The projection of document\'s fields to return.
+--
+-- /See:/ 'projection' smart constructor.
+newtype Projection = Projection'
+    { _pFields :: Maybe [FieldReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Projection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pFields'
+projection
+    :: Projection
+projection =
+    Projection'
+    { _pFields = Nothing
+    }
+
+-- | The fields to return. If empty, all fields are returned. To only return
+-- the name of the document, use \`[\'__name__\']\`.
+pFields :: Lens' Projection [FieldReference]
+pFields
+  = lens _pFields (\ s a -> s{_pFields = a}) . _Default
+      . _Coerce
+
+instance FromJSON Projection where
+        parseJSON
+          = withObject "Projection"
+              (\ o -> Projection' <$> (o .:? "fields" .!= mempty))
+
+instance ToJSON Projection where
+        toJSON Projection'{..}
+          = object (catMaybes [("fields" .=) <$> _pFields])
+
+-- | A filter.
+--
+-- /See:/ 'filter'' smart constructor.
+data Filter = Filter'
+    { _fCompositeFilter :: !(Maybe CompositeFilter)
+    , _fFieldFilter     :: !(Maybe FieldFilter)
+    , _fUnaryFilter     :: !(Maybe UnaryFilter)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Filter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fCompositeFilter'
+--
+-- * 'fFieldFilter'
+--
+-- * 'fUnaryFilter'
+filter'
+    :: Filter
+filter' =
+    Filter'
+    { _fCompositeFilter = Nothing
+    , _fFieldFilter = Nothing
+    , _fUnaryFilter = Nothing
+    }
+
+-- | A composite filter.
+fCompositeFilter :: Lens' Filter (Maybe CompositeFilter)
+fCompositeFilter
+  = lens _fCompositeFilter
+      (\ s a -> s{_fCompositeFilter = a})
+
+-- | A filter on a document field.
+fFieldFilter :: Lens' Filter (Maybe FieldFilter)
+fFieldFilter
+  = lens _fFieldFilter (\ s a -> s{_fFieldFilter = a})
+
+-- | A filter that takes exactly one argument.
+fUnaryFilter :: Lens' Filter (Maybe UnaryFilter)
+fUnaryFilter
+  = lens _fUnaryFilter (\ s a -> s{_fUnaryFilter = a})
+
+instance FromJSON Filter where
+        parseJSON
+          = withObject "Filter"
+              (\ o ->
+                 Filter' <$>
+                   (o .:? "compositeFilter") <*> (o .:? "fieldFilter")
+                     <*> (o .:? "unaryFilter"))
+
+instance ToJSON Filter where
+        toJSON Filter'{..}
+          = object
+              (catMaybes
+                 [("compositeFilter" .=) <$> _fCompositeFilter,
+                  ("fieldFilter" .=) <$> _fFieldFilter,
+                  ("unaryFilter" .=) <$> _fUnaryFilter])
+
+-- | Metadata for google.longrunning.Operation results from
+-- FirestoreAdmin.CreateIndex.
+--
+-- /See:/ 'googleFirestoreAdminV1IndexOperationMetadata' smart constructor.
+data GoogleFirestoreAdminV1IndexOperationMetadata = GoogleFirestoreAdminV1IndexOperationMetadata'
+    { _gfaviomProgressBytes     :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfaviomState             :: !(Maybe GoogleFirestoreAdminV1IndexOperationMetadataState)
+    , _gfaviomStartTime         :: !(Maybe DateTime')
+    , _gfaviomProgressDocuments :: !(Maybe GoogleFirestoreAdminV1Progress)
+    , _gfaviomEndTime           :: !(Maybe DateTime')
+    , _gfaviomIndex             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleFirestoreAdminV1IndexOperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfaviomProgressBytes'
+--
+-- * 'gfaviomState'
+--
+-- * 'gfaviomStartTime'
+--
+-- * 'gfaviomProgressDocuments'
+--
+-- * 'gfaviomEndTime'
+--
+-- * 'gfaviomIndex'
+googleFirestoreAdminV1IndexOperationMetadata
+    :: GoogleFirestoreAdminV1IndexOperationMetadata
+googleFirestoreAdminV1IndexOperationMetadata =
+    GoogleFirestoreAdminV1IndexOperationMetadata'
+    { _gfaviomProgressBytes = Nothing
+    , _gfaviomState = Nothing
+    , _gfaviomStartTime = Nothing
+    , _gfaviomProgressDocuments = Nothing
+    , _gfaviomEndTime = Nothing
+    , _gfaviomIndex = Nothing
+    }
+
+-- | The progress, in bytes, of this operation.
+gfaviomProgressBytes :: Lens' GoogleFirestoreAdminV1IndexOperationMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfaviomProgressBytes
+  = lens _gfaviomProgressBytes
+      (\ s a -> s{_gfaviomProgressBytes = a})
+
+-- | The state of the operation.
+gfaviomState :: Lens' GoogleFirestoreAdminV1IndexOperationMetadata (Maybe GoogleFirestoreAdminV1IndexOperationMetadataState)
+gfaviomState
+  = lens _gfaviomState (\ s a -> s{_gfaviomState = a})
+
+-- | The time this operation started.
+gfaviomStartTime :: Lens' GoogleFirestoreAdminV1IndexOperationMetadata (Maybe UTCTime)
+gfaviomStartTime
+  = lens _gfaviomStartTime
+      (\ s a -> s{_gfaviomStartTime = a})
+      . mapping _DateTime
+
+-- | The progress, in documents, of this operation.
+gfaviomProgressDocuments :: Lens' GoogleFirestoreAdminV1IndexOperationMetadata (Maybe GoogleFirestoreAdminV1Progress)
+gfaviomProgressDocuments
+  = lens _gfaviomProgressDocuments
+      (\ s a -> s{_gfaviomProgressDocuments = a})
+
+-- | The time this operation completed. Will be unset if operation still in
+-- progress.
+gfaviomEndTime :: Lens' GoogleFirestoreAdminV1IndexOperationMetadata (Maybe UTCTime)
+gfaviomEndTime
+  = lens _gfaviomEndTime
+      (\ s a -> s{_gfaviomEndTime = a})
+      . mapping _DateTime
+
+-- | The index resource that this operation is acting on. For example:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/indexes\/{index_id}\`
+gfaviomIndex :: Lens' GoogleFirestoreAdminV1IndexOperationMetadata (Maybe Text)
+gfaviomIndex
+  = lens _gfaviomIndex (\ s a -> s{_gfaviomIndex = a})
+
+instance FromJSON
+         GoogleFirestoreAdminV1IndexOperationMetadata where
+        parseJSON
+          = withObject
+              "GoogleFirestoreAdminV1IndexOperationMetadata"
+              (\ o ->
+                 GoogleFirestoreAdminV1IndexOperationMetadata' <$>
+                   (o .:? "progressBytes") <*> (o .:? "state") <*>
+                     (o .:? "startTime")
+                     <*> (o .:? "progressDocuments")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "index"))
+
+instance ToJSON
+         GoogleFirestoreAdminV1IndexOperationMetadata where
+        toJSON
+          GoogleFirestoreAdminV1IndexOperationMetadata'{..}
+          = object
+              (catMaybes
+                 [("progressBytes" .=) <$> _gfaviomProgressBytes,
+                  ("state" .=) <$> _gfaviomState,
+                  ("startTime" .=) <$> _gfaviomStartTime,
+                  ("progressDocuments" .=) <$>
+                    _gfaviomProgressDocuments,
+                  ("endTime" .=) <$> _gfaviomEndTime,
+                  ("index" .=) <$> _gfaviomIndex])
+
+-- | Cross-service attributes for the location. For example
+-- {\"cloud.googleapis.com\/region\": \"us-east1\"}
+--
+-- /See:/ 'locationLabels' smart constructor.
+newtype LocationLabels = LocationLabels'
+    { _llAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocationLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llAddtional'
+locationLabels
+    :: HashMap Text Text -- ^ 'llAddtional'
+    -> LocationLabels
+locationLabels pLlAddtional_ =
+    LocationLabels'
+    { _llAddtional = _Coerce # pLlAddtional_
+    }
+
+llAddtional :: Lens' LocationLabels (HashMap Text Text)
+llAddtional
+  = lens _llAddtional (\ s a -> s{_llAddtional = a}) .
+      _Coerce
+
+instance FromJSON LocationLabels where
+        parseJSON
+          = withObject "LocationLabels"
+              (\ o -> LocationLabels' <$> (parseJSONObject o))
+
+instance ToJSON LocationLabels where
+        toJSON = toJSON . _llAddtional
+
+-- | A request for Firestore.Listen
+--
+-- /See:/ 'listenRequest' smart constructor.
+data ListenRequest = ListenRequest'
+    { _lrRemoveTarget :: !(Maybe (Textual Int32))
+    , _lrLabels       :: !(Maybe ListenRequestLabels)
+    , _lrAddTarget    :: !(Maybe Target)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListenRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrRemoveTarget'
+--
+-- * 'lrLabels'
+--
+-- * 'lrAddTarget'
+listenRequest
+    :: ListenRequest
+listenRequest =
+    ListenRequest'
+    { _lrRemoveTarget = Nothing
+    , _lrLabels = Nothing
+    , _lrAddTarget = Nothing
+    }
+
+-- | The ID of a target to remove from this stream.
+lrRemoveTarget :: Lens' ListenRequest (Maybe Int32)
+lrRemoveTarget
+  = lens _lrRemoveTarget
+      (\ s a -> s{_lrRemoveTarget = a})
+      . mapping _Coerce
+
+-- | Labels associated with this target change.
+lrLabels :: Lens' ListenRequest (Maybe ListenRequestLabels)
+lrLabels = lens _lrLabels (\ s a -> s{_lrLabels = a})
+
+-- | A target to add to this stream.
+lrAddTarget :: Lens' ListenRequest (Maybe Target)
+lrAddTarget
+  = lens _lrAddTarget (\ s a -> s{_lrAddTarget = a})
+
+instance FromJSON ListenRequest where
+        parseJSON
+          = withObject "ListenRequest"
+              (\ o ->
+                 ListenRequest' <$>
+                   (o .:? "removeTarget") <*> (o .:? "labels") <*>
+                     (o .:? "addTarget"))
+
+instance ToJSON ListenRequest where
+        toJSON ListenRequest'{..}
+          = object
+              (catMaybes
+                 [("removeTarget" .=) <$> _lrRemoveTarget,
+                  ("labels" .=) <$> _lrLabels,
+                  ("addTarget" .=) <$> _lrAddTarget])
+
+-- | The request for Firestore.Commit.
+--
+-- /See:/ 'commitRequest' smart constructor.
+data CommitRequest = CommitRequest'
+    { _crTransaction :: !(Maybe Bytes)
+    , _crWrites      :: !(Maybe [Write])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommitRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crTransaction'
+--
+-- * 'crWrites'
+commitRequest
+    :: CommitRequest
+commitRequest =
+    CommitRequest'
+    { _crTransaction = Nothing
+    , _crWrites = Nothing
+    }
+
+-- | If set, applies all writes in this transaction, and commits it.
+crTransaction :: Lens' CommitRequest (Maybe ByteString)
+crTransaction
+  = lens _crTransaction
+      (\ s a -> s{_crTransaction = a})
+      . mapping _Bytes
+
+-- | The writes to apply. Always executed atomically and in order.
+crWrites :: Lens' CommitRequest [Write]
+crWrites
+  = lens _crWrites (\ s a -> s{_crWrites = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CommitRequest where
+        parseJSON
+          = withObject "CommitRequest"
+              (\ o ->
+                 CommitRequest' <$>
+                   (o .:? "transaction") <*>
+                     (o .:? "writes" .!= mempty))
+
+instance ToJSON CommitRequest where
+        toJSON CommitRequest'{..}
+          = object
+              (catMaybes
+                 [("transaction" .=) <$> _crTransaction,
+                  ("writes" .=) <$> _crWrites])
+
+-- | Service-specific metadata. For example the available capacity at the
+-- given location.
+--
+-- /See:/ 'locationMetadata' smart constructor.
+newtype LocationMetadata = LocationMetadata'
+    { _lmAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmAddtional'
+locationMetadata
+    :: HashMap Text JSONValue -- ^ 'lmAddtional'
+    -> LocationMetadata
+locationMetadata pLmAddtional_ =
+    LocationMetadata'
+    { _lmAddtional = _Coerce # pLmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+lmAddtional :: Lens' LocationMetadata (HashMap Text JSONValue)
+lmAddtional
+  = lens _lmAddtional (\ s a -> s{_lmAddtional = a}) .
+      _Coerce
+
+instance FromJSON LocationMetadata where
+        parseJSON
+          = withObject "LocationMetadata"
+              (\ o -> LocationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON LocationMetadata where
+        toJSON = toJSON . _lmAddtional
+
+-- | The response message for Operations.ListOperations.
+--
+-- /See:/ 'googleLongrunningListOperationsResponse' smart constructor.
+data GoogleLongrunningListOperationsResponse = GoogleLongrunningListOperationsResponse'
+    { _gllorNextPageToken :: !(Maybe Text)
+    , _gllorOperations    :: !(Maybe [GoogleLongrunningOperation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleLongrunningListOperationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gllorNextPageToken'
+--
+-- * 'gllorOperations'
+googleLongrunningListOperationsResponse
+    :: GoogleLongrunningListOperationsResponse
+googleLongrunningListOperationsResponse =
+    GoogleLongrunningListOperationsResponse'
+    { _gllorNextPageToken = Nothing
+    , _gllorOperations = Nothing
+    }
+
+-- | The standard List next-page token.
+gllorNextPageToken :: Lens' GoogleLongrunningListOperationsResponse (Maybe Text)
+gllorNextPageToken
+  = lens _gllorNextPageToken
+      (\ s a -> s{_gllorNextPageToken = a})
+
+-- | A list of operations that matches the specified filter in the request.
+gllorOperations :: Lens' GoogleLongrunningListOperationsResponse [GoogleLongrunningOperation]
+gllorOperations
+  = lens _gllorOperations
+      (\ s a -> s{_gllorOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         GoogleLongrunningListOperationsResponse where
+        parseJSON
+          = withObject
+              "GoogleLongrunningListOperationsResponse"
+              (\ o ->
+                 GoogleLongrunningListOperationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON
+         GoogleLongrunningListOperationsResponse where
+        toJSON GoogleLongrunningListOperationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _gllorNextPageToken,
+                  ("operations" .=) <$> _gllorOperations])
+
+-- | A selection of a collection, such as \`messages as m1\`.
+--
+-- /See:/ 'collectionSelector' smart constructor.
+data CollectionSelector = CollectionSelector'
+    { _csAllDescendants :: !(Maybe Bool)
+    , _csCollectionId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CollectionSelector' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csAllDescendants'
+--
+-- * 'csCollectionId'
+collectionSelector
+    :: CollectionSelector
+collectionSelector =
+    CollectionSelector'
+    { _csAllDescendants = Nothing
+    , _csCollectionId = Nothing
+    }
+
+-- | When false, selects only collections that are immediate children of the
+-- \`parent\` specified in the containing \`RunQueryRequest\`. When true,
+-- selects all descendant collections.
+csAllDescendants :: Lens' CollectionSelector (Maybe Bool)
+csAllDescendants
+  = lens _csAllDescendants
+      (\ s a -> s{_csAllDescendants = a})
+
+-- | The collection ID. When set, selects only collections with this ID.
+csCollectionId :: Lens' CollectionSelector (Maybe Text)
+csCollectionId
+  = lens _csCollectionId
+      (\ s a -> s{_csCollectionId = a})
+
+instance FromJSON CollectionSelector where
+        parseJSON
+          = withObject "CollectionSelector"
+              (\ o ->
+                 CollectionSelector' <$>
+                   (o .:? "allDescendants") <*> (o .:? "collectionId"))
+
+instance ToJSON CollectionSelector where
+        toJSON CollectionSelector'{..}
+          = object
+              (catMaybes
+                 [("allDescendants" .=) <$> _csAllDescendants,
+                  ("collectionId" .=) <$> _csCollectionId])
+
+-- | The request for Firestore.ListCollectionIds.
+--
+-- /See:/ 'listCollectionIdsRequest' smart constructor.
+data ListCollectionIdsRequest = ListCollectionIdsRequest'
+    { _lcirPageToken :: !(Maybe Text)
+    , _lcirPageSize  :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCollectionIdsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcirPageToken'
+--
+-- * 'lcirPageSize'
+listCollectionIdsRequest
+    :: ListCollectionIdsRequest
+listCollectionIdsRequest =
+    ListCollectionIdsRequest'
+    { _lcirPageToken = Nothing
+    , _lcirPageSize = Nothing
+    }
+
+-- | A page token. Must be a value from ListCollectionIdsResponse.
+lcirPageToken :: Lens' ListCollectionIdsRequest (Maybe Text)
+lcirPageToken
+  = lens _lcirPageToken
+      (\ s a -> s{_lcirPageToken = a})
+
+-- | The maximum number of results to return.
+lcirPageSize :: Lens' ListCollectionIdsRequest (Maybe Int32)
+lcirPageSize
+  = lens _lcirPageSize (\ s a -> s{_lcirPageSize = a})
+      . mapping _Coerce
+
+instance FromJSON ListCollectionIdsRequest where
+        parseJSON
+          = withObject "ListCollectionIdsRequest"
+              (\ o ->
+                 ListCollectionIdsRequest' <$>
+                   (o .:? "pageToken") <*> (o .:? "pageSize"))
+
+instance ToJSON ListCollectionIdsRequest where
+        toJSON ListCollectionIdsRequest'{..}
+          = object
+              (catMaybes
+                 [("pageToken" .=) <$> _lcirPageToken,
+                  ("pageSize" .=) <$> _lcirPageSize])
+
+-- | The response for Firestore.Write.
+--
+-- /See:/ 'writeResponse' smart constructor.
+data WriteResponse = WriteResponse'
+    { _wStreamToken  :: !(Maybe Bytes)
+    , _wCommitTime   :: !(Maybe DateTime')
+    , _wWriteResults :: !(Maybe [WriteResult])
+    , _wStreamId     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wStreamToken'
+--
+-- * 'wCommitTime'
+--
+-- * 'wWriteResults'
+--
+-- * 'wStreamId'
+writeResponse
+    :: WriteResponse
+writeResponse =
+    WriteResponse'
+    { _wStreamToken = Nothing
+    , _wCommitTime = Nothing
+    , _wWriteResults = Nothing
+    , _wStreamId = Nothing
+    }
+
+-- | A token that represents the position of this response in the stream.
+-- This can be used by a client to resume the stream at this point. This
+-- field is always set.
+wStreamToken :: Lens' WriteResponse (Maybe ByteString)
+wStreamToken
+  = lens _wStreamToken (\ s a -> s{_wStreamToken = a})
+      . mapping _Bytes
+
+-- | The time at which the commit occurred.
+wCommitTime :: Lens' WriteResponse (Maybe UTCTime)
+wCommitTime
+  = lens _wCommitTime (\ s a -> s{_wCommitTime = a}) .
+      mapping _DateTime
+
+-- | The result of applying the writes. This i-th write result corresponds to
+-- the i-th write in the request.
+wWriteResults :: Lens' WriteResponse [WriteResult]
+wWriteResults
+  = lens _wWriteResults
+      (\ s a -> s{_wWriteResults = a})
+      . _Default
+      . _Coerce
+
+-- | The ID of the stream. Only set on the first message, when a new stream
+-- was created.
+wStreamId :: Lens' WriteResponse (Maybe Text)
+wStreamId
+  = lens _wStreamId (\ s a -> s{_wStreamId = a})
+
+instance FromJSON WriteResponse where
+        parseJSON
+          = withObject "WriteResponse"
+              (\ o ->
+                 WriteResponse' <$>
+                   (o .:? "streamToken") <*> (o .:? "commitTime") <*>
+                     (o .:? "writeResults" .!= mempty)
+                     <*> (o .:? "streamId"))
+
+instance ToJSON WriteResponse where
+        toJSON WriteResponse'{..}
+          = object
+              (catMaybes
+                 [("streamToken" .=) <$> _wStreamToken,
+                  ("commitTime" .=) <$> _wCommitTime,
+                  ("writeResults" .=) <$> _wWriteResults,
+                  ("streamId" .=) <$> _wStreamId])
+
+-- | An order on a field.
+--
+-- /See:/ 'order' smart constructor.
+data Order = Order'
+    { _oField     :: !(Maybe FieldReference)
+    , _oDirection :: !(Maybe OrderDirection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Order' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oField'
+--
+-- * 'oDirection'
+order
+    :: Order
+order =
+    Order'
+    { _oField = Nothing
+    , _oDirection = Nothing
+    }
+
+-- | The field to order by.
+oField :: Lens' Order (Maybe FieldReference)
+oField = lens _oField (\ s a -> s{_oField = a})
+
+-- | The direction to order by. Defaults to \`ASCENDING\`.
+oDirection :: Lens' Order (Maybe OrderDirection)
+oDirection
+  = lens _oDirection (\ s a -> s{_oDirection = a})
+
+instance FromJSON Order where
+        parseJSON
+          = withObject "Order"
+              (\ o ->
+                 Order' <$> (o .:? "field") <*> (o .:? "direction"))
+
+instance ToJSON Order where
+        toJSON Order'{..}
+          = object
+              (catMaybes
+                 [("field" .=) <$> _oField,
+                  ("direction" .=) <$> _oDirection])
+
+-- | A Document has been deleted. May be the result of multiple writes,
+-- including updates, the last of which deleted the Document. Multiple
+-- DocumentDelete messages may be returned for the same logical delete, if
+-- multiple targets are affected.
+--
+-- /See:/ 'documentDelete' smart constructor.
+data DocumentDelete = DocumentDelete'
+    { _ddReadTime         :: !(Maybe DateTime')
+    , _ddDocument         :: !(Maybe Text)
+    , _ddRemovedTargetIds :: !(Maybe [Textual Int32])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddReadTime'
+--
+-- * 'ddDocument'
+--
+-- * 'ddRemovedTargetIds'
+documentDelete
+    :: DocumentDelete
+documentDelete =
+    DocumentDelete'
+    { _ddReadTime = Nothing
+    , _ddDocument = Nothing
+    , _ddRemovedTargetIds = Nothing
+    }
+
+-- | The read timestamp at which the delete was observed. Greater or equal to
+-- the \`commit_time\` of the delete.
+ddReadTime :: Lens' DocumentDelete (Maybe UTCTime)
+ddReadTime
+  = lens _ddReadTime (\ s a -> s{_ddReadTime = a}) .
+      mapping _DateTime
+
+-- | The resource name of the Document that was deleted.
+ddDocument :: Lens' DocumentDelete (Maybe Text)
+ddDocument
+  = lens _ddDocument (\ s a -> s{_ddDocument = a})
+
+-- | A set of target IDs for targets that previously matched this entity.
+ddRemovedTargetIds :: Lens' DocumentDelete [Int32]
+ddRemovedTargetIds
+  = lens _ddRemovedTargetIds
+      (\ s a -> s{_ddRemovedTargetIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DocumentDelete where
+        parseJSON
+          = withObject "DocumentDelete"
+              (\ o ->
+                 DocumentDelete' <$>
+                   (o .:? "readTime") <*> (o .:? "document") <*>
+                     (o .:? "removedTargetIds" .!= mempty))
+
+instance ToJSON DocumentDelete where
+        toJSON DocumentDelete'{..}
+          = object
+              (catMaybes
+                 [("readTime" .=) <$> _ddReadTime,
+                  ("document" .=) <$> _ddDocument,
+                  ("removedTargetIds" .=) <$> _ddRemovedTargetIds])
+
+-- | A transformation of a field of the document.
+--
+-- /See:/ 'fieldTransform' smart constructor.
+data FieldTransform = FieldTransform'
+    { _ftFieldPath             :: !(Maybe Text)
+    , _ftAppendMissingElements :: !(Maybe ArrayValue)
+    , _ftSetToServerValue      :: !(Maybe FieldTransformSetToServerValue)
+    , _ftRemoveAllFromArray    :: !(Maybe ArrayValue)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FieldTransform' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ftFieldPath'
+--
+-- * 'ftAppendMissingElements'
+--
+-- * 'ftSetToServerValue'
+--
+-- * 'ftRemoveAllFromArray'
+fieldTransform
+    :: FieldTransform
+fieldTransform =
+    FieldTransform'
+    { _ftFieldPath = Nothing
+    , _ftAppendMissingElements = Nothing
+    , _ftSetToServerValue = Nothing
+    , _ftRemoveAllFromArray = Nothing
+    }
+
+-- | The path of the field. See Document.fields for the field path syntax
+-- reference.
+ftFieldPath :: Lens' FieldTransform (Maybe Text)
+ftFieldPath
+  = lens _ftFieldPath (\ s a -> s{_ftFieldPath = a})
+
+-- | Append the given elements in order if they are not already present in
+-- the current field value. If the field is not an array, or if the field
+-- does not yet exist, it is first set to the empty array. Equivalent
+-- numbers of different types (e.g. 3L and 3.0) are considered equal when
+-- checking if a value is missing. NaN is equal to NaN, and Null is equal
+-- to Null. If the input contains multiple equivalent values, only the
+-- first will be considered. The corresponding transform_result will be the
+-- null value.
+ftAppendMissingElements :: Lens' FieldTransform (Maybe ArrayValue)
+ftAppendMissingElements
+  = lens _ftAppendMissingElements
+      (\ s a -> s{_ftAppendMissingElements = a})
+
+-- | Sets the field to the given server value.
+ftSetToServerValue :: Lens' FieldTransform (Maybe FieldTransformSetToServerValue)
+ftSetToServerValue
+  = lens _ftSetToServerValue
+      (\ s a -> s{_ftSetToServerValue = a})
+
+-- | Remove all of the given elements from the array in the field. If the
+-- field is not an array, or if the field does not yet exist, it is set to
+-- the empty array. Equivalent numbers of the different types (e.g. 3L and
+-- 3.0) are considered equal when deciding whether an element should be
+-- removed. NaN is equal to NaN, and Null is equal to Null. This will
+-- remove all equivalent values if there are duplicates. The corresponding
+-- transform_result will be the null value.
+ftRemoveAllFromArray :: Lens' FieldTransform (Maybe ArrayValue)
+ftRemoveAllFromArray
+  = lens _ftRemoveAllFromArray
+      (\ s a -> s{_ftRemoveAllFromArray = a})
+
+instance FromJSON FieldTransform where
+        parseJSON
+          = withObject "FieldTransform"
+              (\ o ->
+                 FieldTransform' <$>
+                   (o .:? "fieldPath") <*>
+                     (o .:? "appendMissingElements")
+                     <*> (o .:? "setToServerValue")
+                     <*> (o .:? "removeAllFromArray"))
+
+instance ToJSON FieldTransform where
+        toJSON FieldTransform'{..}
+          = object
+              (catMaybes
+                 [("fieldPath" .=) <$> _ftFieldPath,
+                  ("appendMissingElements" .=) <$>
+                    _ftAppendMissingElements,
+                  ("setToServerValue" .=) <$> _ftSetToServerValue,
+                  ("removeAllFromArray" .=) <$> _ftRemoveAllFromArray])
+
+-- | The map\'s fields. The map keys represent field names. Field names
+-- matching the regular expression \`__.*__\` are reserved. Reserved field
+-- names are forbidden except in certain documented contexts. The map keys,
+-- represented as UTF-8, must not exceed 1,500 bytes and cannot be empty.
+--
+-- /See:/ 'mapValueFields' smart constructor.
+newtype MapValueFields = MapValueFields'
+    { _mvfAddtional :: HashMap Text Value
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MapValueFields' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mvfAddtional'
+mapValueFields
+    :: HashMap Text Value -- ^ 'mvfAddtional'
+    -> MapValueFields
+mapValueFields pMvfAddtional_ =
+    MapValueFields'
+    { _mvfAddtional = _Coerce # pMvfAddtional_
+    }
+
+mvfAddtional :: Lens' MapValueFields (HashMap Text Value)
+mvfAddtional
+  = lens _mvfAddtional (\ s a -> s{_mvfAddtional = a})
+      . _Coerce
+
+instance FromJSON MapValueFields where
+        parseJSON
+          = withObject "MapValueFields"
+              (\ o -> MapValueFields' <$> (parseJSONObject o))
+
+instance ToJSON MapValueFields where
+        toJSON = toJSON . _mvfAddtional
+
+-- | The document\'s fields. The map keys represent field names. A simple
+-- field name contains only characters \`a\` to \`z\`, \`A\` to \`Z\`,
+-- \`0\` to \`9\`, or \`_\`, and must not start with \`0\` to \`9\`. For
+-- example, \`foo_bar_17\`. Field names matching the regular expression
+-- \`__.*__\` are reserved. Reserved field names are forbidden except in
+-- certain documented contexts. The map keys, represented as UTF-8, must
+-- not exceed 1,500 bytes and cannot be empty. Field paths may be used in
+-- other contexts to refer to structured fields defined here. For
+-- \`map_value\`, the field path is represented by the simple or quoted
+-- field names of the containing fields, delimited by \`.\`. For example,
+-- the structured field \`\"foo\" : { map_value: { \"x&y\" : {
+-- string_value: \"hello\" }}}\` would be represented by the field path
+-- \`foo.x&y\`. Within a field path, a quoted field name starts and ends
+-- with \`\` \` \`\` and may contain any character. Some characters,
+-- including \`\` \` \`\`, must be escaped using a \`\\\`. For example,
+-- \`\` \`x&y\` \`\` represents \`x&y\` and \`\` \`bak\\\`tik\` \`\`
+-- represents \`\` bak\`tik \`\`.
+--
+-- /See:/ 'documentFields' smart constructor.
+newtype DocumentFields = DocumentFields'
+    { _dfAddtional :: HashMap Text Value
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentFields' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfAddtional'
+documentFields
+    :: HashMap Text Value -- ^ 'dfAddtional'
+    -> DocumentFields
+documentFields pDfAddtional_ =
+    DocumentFields'
+    { _dfAddtional = _Coerce # pDfAddtional_
+    }
+
+dfAddtional :: Lens' DocumentFields (HashMap Text Value)
+dfAddtional
+  = lens _dfAddtional (\ s a -> s{_dfAddtional = a}) .
+      _Coerce
+
+instance FromJSON DocumentFields where
+        parseJSON
+          = withObject "DocumentFields"
+              (\ o -> DocumentFields' <$> (parseJSONObject o))
+
+instance ToJSON DocumentFields where
+        toJSON = toJSON . _dfAddtional
+
+-- | Options for a transaction that can only be used to read documents.
+--
+-- /See:/ 'readOnly' smart constructor.
+newtype ReadOnly = ReadOnly'
+    { _roReadTime :: Maybe DateTime'
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReadOnly' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'roReadTime'
+readOnly
+    :: ReadOnly
+readOnly =
+    ReadOnly'
+    { _roReadTime = Nothing
+    }
+
+-- | Reads documents at the given time. This may not be older than 60
+-- seconds.
+roReadTime :: Lens' ReadOnly (Maybe UTCTime)
+roReadTime
+  = lens _roReadTime (\ s a -> s{_roReadTime = a}) .
+      mapping _DateTime
+
+instance FromJSON ReadOnly where
+        parseJSON
+          = withObject "ReadOnly"
+              (\ o -> ReadOnly' <$> (o .:? "readTime"))
+
+instance ToJSON ReadOnly where
+        toJSON ReadOnly'{..}
+          = object
+              (catMaybes [("readTime" .=) <$> _roReadTime])
+
+-- | A specification of a set of documents to listen to.
+--
+-- /See:/ 'target' smart constructor.
+data Target = Target'
+    { _tTargetId    :: !(Maybe (Textual Int32))
+    , _tOnce        :: !(Maybe Bool)
+    , _tReadTime    :: !(Maybe DateTime')
+    , _tResumeToken :: !(Maybe Bytes)
+    , _tDocuments   :: !(Maybe DocumentsTarget)
+    , _tQuery       :: !(Maybe QueryTarget)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Target' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tTargetId'
+--
+-- * 'tOnce'
+--
+-- * 'tReadTime'
+--
+-- * 'tResumeToken'
+--
+-- * 'tDocuments'
+--
+-- * 'tQuery'
+target
+    :: Target
+target =
+    Target'
+    { _tTargetId = Nothing
+    , _tOnce = Nothing
+    , _tReadTime = Nothing
+    , _tResumeToken = Nothing
+    , _tDocuments = Nothing
+    , _tQuery = Nothing
+    }
+
+-- | A client provided target ID. If not set, the server will assign an ID
+-- for the target. Used for resuming a target without changing IDs. The IDs
+-- can either be client-assigned or be server-assigned in a previous
+-- stream. All targets with client provided IDs must be added before adding
+-- a target that needs a server-assigned id.
+tTargetId :: Lens' Target (Maybe Int32)
+tTargetId
+  = lens _tTargetId (\ s a -> s{_tTargetId = a}) .
+      mapping _Coerce
+
+-- | If the target should be removed once it is current and consistent.
+tOnce :: Lens' Target (Maybe Bool)
+tOnce = lens _tOnce (\ s a -> s{_tOnce = a})
+
+-- | Start listening after a specific \`read_time\`. The client must know the
+-- state of matching documents at this time.
+tReadTime :: Lens' Target (Maybe UTCTime)
+tReadTime
+  = lens _tReadTime (\ s a -> s{_tReadTime = a}) .
+      mapping _DateTime
+
+-- | A resume token from a prior TargetChange for an identical target. Using
+-- a resume token with a different target is unsupported and may fail.
+tResumeToken :: Lens' Target (Maybe ByteString)
+tResumeToken
+  = lens _tResumeToken (\ s a -> s{_tResumeToken = a})
+      . mapping _Bytes
+
+-- | A target specified by a set of document names.
+tDocuments :: Lens' Target (Maybe DocumentsTarget)
+tDocuments
+  = lens _tDocuments (\ s a -> s{_tDocuments = a})
+
+-- | A target specified by a query.
+tQuery :: Lens' Target (Maybe QueryTarget)
+tQuery = lens _tQuery (\ s a -> s{_tQuery = a})
+
+instance FromJSON Target where
+        parseJSON
+          = withObject "Target"
+              (\ o ->
+                 Target' <$>
+                   (o .:? "targetId") <*> (o .:? "once") <*>
+                     (o .:? "readTime")
+                     <*> (o .:? "resumeToken")
+                     <*> (o .:? "documents")
+                     <*> (o .:? "query"))
+
+instance ToJSON Target where
+        toJSON Target'{..}
+          = object
+              (catMaybes
+                 [("targetId" .=) <$> _tTargetId,
+                  ("once" .=) <$> _tOnce,
+                  ("readTime" .=) <$> _tReadTime,
+                  ("resumeToken" .=) <$> _tResumeToken,
+                  ("documents" .=) <$> _tDocuments,
+                  ("query" .=) <$> _tQuery])
+
+-- | Labels associated with this write request.
+--
+-- /See:/ 'writeRequestLabels' smart constructor.
+newtype WriteRequestLabels = WriteRequestLabels'
+    { _wrlAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteRequestLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wrlAddtional'
+writeRequestLabels
+    :: HashMap Text Text -- ^ 'wrlAddtional'
+    -> WriteRequestLabels
+writeRequestLabels pWrlAddtional_ =
+    WriteRequestLabels'
+    { _wrlAddtional = _Coerce # pWrlAddtional_
+    }
+
+wrlAddtional :: Lens' WriteRequestLabels (HashMap Text Text)
+wrlAddtional
+  = lens _wrlAddtional (\ s a -> s{_wrlAddtional = a})
+      . _Coerce
+
+instance FromJSON WriteRequestLabels where
+        parseJSON
+          = withObject "WriteRequestLabels"
+              (\ o -> WriteRequestLabels' <$> (parseJSONObject o))
+
+instance ToJSON WriteRequestLabels where
+        toJSON = toJSON . _wrlAddtional
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'googleLongrunningOperation' smart constructor.
+data GoogleLongrunningOperation = GoogleLongrunningOperation'
+    { _gloDone     :: !(Maybe Bool)
+    , _gloError    :: !(Maybe Status)
+    , _gloResponse :: !(Maybe GoogleLongrunningOperationResponse)
+    , _gloName     :: !(Maybe Text)
+    , _gloMetadata :: !(Maybe GoogleLongrunningOperationMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GoogleLongrunningOperation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gloDone'
+--
+-- * 'gloError'
+--
+-- * 'gloResponse'
+--
+-- * 'gloName'
+--
+-- * 'gloMetadata'
+googleLongrunningOperation
+    :: GoogleLongrunningOperation
+googleLongrunningOperation =
+    GoogleLongrunningOperation'
+    { _gloDone = Nothing
+    , _gloError = Nothing
+    , _gloResponse = Nothing
+    , _gloName = Nothing
+    , _gloMetadata = Nothing
+    }
+
+-- | If the value is \`false\`, it means the operation is still in progress.
+-- If \`true\`, the operation is completed, and either \`error\` or
+-- \`response\` is available.
+gloDone :: Lens' GoogleLongrunningOperation (Maybe Bool)
+gloDone = lens _gloDone (\ s a -> s{_gloDone = a})
+
+-- | The error result of the operation in case of failure or cancellation.
+gloError :: Lens' GoogleLongrunningOperation (Maybe Status)
+gloError = lens _gloError (\ s a -> s{_gloError = a})
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as \`Delete\`, the response is
+-- \`google.protobuf.Empty\`. If the original method is standard
+-- \`Get\`\/\`Create\`\/\`Update\`, the response should be the resource.
+-- For other methods, the response should have the type \`XxxResponse\`,
+-- where \`Xxx\` is the original method name. For example, if the original
+-- method name is \`TakeSnapshot()\`, the inferred response type is
+-- \`TakeSnapshotResponse\`.
+gloResponse :: Lens' GoogleLongrunningOperation (Maybe GoogleLongrunningOperationResponse)
+gloResponse
+  = lens _gloResponse (\ s a -> s{_gloResponse = a})
+
+-- | The server-assigned name, which is only unique within the same service
+-- that originally returns it. If you use the default HTTP mapping, the
+-- \`name\` should have the format of \`operations\/some\/unique\/name\`.
+gloName :: Lens' GoogleLongrunningOperation (Maybe Text)
+gloName = lens _gloName (\ s a -> s{_gloName = a})
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+gloMetadata :: Lens' GoogleLongrunningOperation (Maybe GoogleLongrunningOperationMetadata)
+gloMetadata
+  = lens _gloMetadata (\ s a -> s{_gloMetadata = a})
+
+instance FromJSON GoogleLongrunningOperation where
+        parseJSON
+          = withObject "GoogleLongrunningOperation"
+              (\ o ->
+                 GoogleLongrunningOperation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON GoogleLongrunningOperation where
+        toJSON GoogleLongrunningOperation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _gloDone,
+                  ("error" .=) <$> _gloError,
+                  ("response" .=) <$> _gloResponse,
+                  ("name" .=) <$> _gloName,
+                  ("metadata" .=) <$> _gloMetadata])
+
+-- | A filter with a single operand.
+--
+-- /See:/ 'unaryFilter' smart constructor.
+data UnaryFilter = UnaryFilter'
+    { _ufOp    :: !(Maybe UnaryFilterOp)
+    , _ufField :: !(Maybe FieldReference)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnaryFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufOp'
+--
+-- * 'ufField'
+unaryFilter
+    :: UnaryFilter
+unaryFilter =
+    UnaryFilter'
+    { _ufOp = Nothing
+    , _ufField = Nothing
+    }
+
+-- | The unary operator to apply.
+ufOp :: Lens' UnaryFilter (Maybe UnaryFilterOp)
+ufOp = lens _ufOp (\ s a -> s{_ufOp = a})
+
+-- | The field to which to apply the operator.
+ufField :: Lens' UnaryFilter (Maybe FieldReference)
+ufField = lens _ufField (\ s a -> s{_ufField = a})
+
+instance FromJSON UnaryFilter where
+        parseJSON
+          = withObject "UnaryFilter"
+              (\ o ->
+                 UnaryFilter' <$> (o .:? "op") <*> (o .:? "field"))
+
+instance ToJSON UnaryFilter where
+        toJSON UnaryFilter'{..}
+          = object
+              (catMaybes
+                 [("op" .=) <$> _ufOp, ("field" .=) <$> _ufField])
diff --git a/gen/Network/Google/FireStore/Types/Sum.hs b/gen/Network/Google/FireStore/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FireStore/Types/Sum.hs
@@ -0,0 +1,731 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.FireStore.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.FireStore.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Indicates that this field supports ordering by the specified order or
+-- comparing using =, \<, \<=, >, >=.
+data GoogleFirestoreAdminV1IndexFieldOrder
+    = OrderUnspecified
+      -- ^ @ORDER_UNSPECIFIED@
+      -- The ordering is unspecified. Not a valid option.
+    | Ascending
+      -- ^ @ASCENDING@
+      -- The field is ordered by ascending field value.
+    | Descending
+      -- ^ @DESCENDING@
+      -- The field is ordered by descending field value.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1IndexFieldOrder
+
+instance FromHttpApiData GoogleFirestoreAdminV1IndexFieldOrder where
+    parseQueryParam = \case
+        "ORDER_UNSPECIFIED" -> Right OrderUnspecified
+        "ASCENDING" -> Right Ascending
+        "DESCENDING" -> Right Descending
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1IndexFieldOrder from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1IndexFieldOrder where
+    toQueryParam = \case
+        OrderUnspecified -> "ORDER_UNSPECIFIED"
+        Ascending -> "ASCENDING"
+        Descending -> "DESCENDING"
+
+instance FromJSON GoogleFirestoreAdminV1IndexFieldOrder where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1IndexFieldOrder"
+
+instance ToJSON GoogleFirestoreAdminV1IndexFieldOrder where
+    toJSON = toJSONText
+
+-- | Specifies how the index is changing.
+data GoogleFirestoreAdminV1IndexConfigDeltaChangeType
+    = ChangeTypeUnspecified
+      -- ^ @CHANGE_TYPE_UNSPECIFIED@
+      -- The type of change is not specified or known.
+    | Add
+      -- ^ @ADD@
+      -- The single field index is being added.
+    | Remove
+      -- ^ @REMOVE@
+      -- The single field index is being removed.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1IndexConfigDeltaChangeType
+
+instance FromHttpApiData GoogleFirestoreAdminV1IndexConfigDeltaChangeType where
+    parseQueryParam = \case
+        "CHANGE_TYPE_UNSPECIFIED" -> Right ChangeTypeUnspecified
+        "ADD" -> Right Add
+        "REMOVE" -> Right Remove
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1IndexConfigDeltaChangeType from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1IndexConfigDeltaChangeType where
+    toQueryParam = \case
+        ChangeTypeUnspecified -> "CHANGE_TYPE_UNSPECIFIED"
+        Add -> "ADD"
+        Remove -> "REMOVE"
+
+instance FromJSON GoogleFirestoreAdminV1IndexConfigDeltaChangeType where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1IndexConfigDeltaChangeType"
+
+instance ToJSON GoogleFirestoreAdminV1IndexConfigDeltaChangeType where
+    toJSON = toJSONText
+
+-- | Output only. The serving state of the index.
+data GoogleFirestoreAdminV1IndexState
+    = StateUnspecified
+      -- ^ @STATE_UNSPECIFIED@
+      -- The state is unspecified.
+    | Creating
+      -- ^ @CREATING@
+      -- The index is being created. There is an active long-running operation
+      -- for the index. The index is updated when writing a document. Some index
+      -- data may exist.
+    | Ready
+      -- ^ @READY@
+      -- The index is ready to be used. The index is updated when writing a
+      -- document. The index is fully populated from all stored documents it
+      -- applies to.
+    | NeedsRepair
+      -- ^ @NEEDS_REPAIR@
+      -- The index was being created, but something went wrong. There is no
+      -- active long-running operation for the index, and the most recently
+      -- finished long-running operation failed. The index is not updated when
+      -- writing a document. Some index data may exist. Use the
+      -- google.longrunning.Operations API to determine why the operation that
+      -- last attempted to create this index failed, then re-create the index.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1IndexState
+
+instance FromHttpApiData GoogleFirestoreAdminV1IndexState where
+    parseQueryParam = \case
+        "STATE_UNSPECIFIED" -> Right StateUnspecified
+        "CREATING" -> Right Creating
+        "READY" -> Right Ready
+        "NEEDS_REPAIR" -> Right NeedsRepair
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1IndexState from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1IndexState where
+    toQueryParam = \case
+        StateUnspecified -> "STATE_UNSPECIFIED"
+        Creating -> "CREATING"
+        Ready -> "READY"
+        NeedsRepair -> "NEEDS_REPAIR"
+
+instance FromJSON GoogleFirestoreAdminV1IndexState where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1IndexState"
+
+instance ToJSON GoogleFirestoreAdminV1IndexState where
+    toJSON = toJSONText
+
+-- | The operator for combining multiple filters.
+data CompositeFilterOp
+    = OperatorUnspecified
+      -- ^ @OPERATOR_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | And
+      -- ^ @AND@
+      -- The results are required to satisfy each of the combined filters.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CompositeFilterOp
+
+instance FromHttpApiData CompositeFilterOp where
+    parseQueryParam = \case
+        "OPERATOR_UNSPECIFIED" -> Right OperatorUnspecified
+        "AND" -> Right And
+        x -> Left ("Unable to parse CompositeFilterOp from: " <> x)
+
+instance ToHttpApiData CompositeFilterOp where
+    toQueryParam = \case
+        OperatorUnspecified -> "OPERATOR_UNSPECIFIED"
+        And -> "AND"
+
+instance FromJSON CompositeFilterOp where
+    parseJSON = parseJSONText "CompositeFilterOp"
+
+instance ToJSON CompositeFilterOp where
+    toJSON = toJSONText
+
+-- | Indexes with a collection query scope specified allow queries against a
+-- collection that is the child of a specific document, specified at query
+-- time, and that has the same collection id. Indexes with a collection
+-- group query scope specified allow queries against all collections
+-- descended from a specific document, specified at query time, and that
+-- have the same collection id as this index.
+data GoogleFirestoreAdminV1IndexQueryScope
+    = QueryScopeUnspecified
+      -- ^ @QUERY_SCOPE_UNSPECIFIED@
+      -- The query scope is unspecified. Not a valid option.
+    | Collection
+      -- ^ @COLLECTION@
+      -- Indexes with a collection query scope specified allow queries against a
+      -- collection that is the child of a specific document, specified at query
+      -- time, and that has the collection id specified by the index.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1IndexQueryScope
+
+instance FromHttpApiData GoogleFirestoreAdminV1IndexQueryScope where
+    parseQueryParam = \case
+        "QUERY_SCOPE_UNSPECIFIED" -> Right QueryScopeUnspecified
+        "COLLECTION" -> Right Collection
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1IndexQueryScope from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1IndexQueryScope where
+    toQueryParam = \case
+        QueryScopeUnspecified -> "QUERY_SCOPE_UNSPECIFIED"
+        Collection -> "COLLECTION"
+
+instance FromJSON GoogleFirestoreAdminV1IndexQueryScope where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1IndexQueryScope"
+
+instance ToJSON GoogleFirestoreAdminV1IndexQueryScope where
+    toJSON = toJSONText
+
+-- | The direction to order by. Defaults to \`ASCENDING\`.
+data OrderDirection
+    = ODDirectionUnspecified
+      -- ^ @DIRECTION_UNSPECIFIED@
+      -- Unspecified.
+    | ODAscending
+      -- ^ @ASCENDING@
+      -- Ascending.
+    | ODDescending
+      -- ^ @DESCENDING@
+      -- Descending.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OrderDirection
+
+instance FromHttpApiData OrderDirection where
+    parseQueryParam = \case
+        "DIRECTION_UNSPECIFIED" -> Right ODDirectionUnspecified
+        "ASCENDING" -> Right ODAscending
+        "DESCENDING" -> Right ODDescending
+        x -> Left ("Unable to parse OrderDirection from: " <> x)
+
+instance ToHttpApiData OrderDirection where
+    toQueryParam = \case
+        ODDirectionUnspecified -> "DIRECTION_UNSPECIFIED"
+        ODAscending -> "ASCENDING"
+        ODDescending -> "DESCENDING"
+
+instance FromJSON OrderDirection where
+    parseJSON = parseJSONText "OrderDirection"
+
+instance ToJSON OrderDirection where
+    toJSON = toJSONText
+
+-- | A null value.
+data ValueNullValue
+    = NullValue
+      -- ^ @NULL_VALUE@
+      -- Null value.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ValueNullValue
+
+instance FromHttpApiData ValueNullValue where
+    parseQueryParam = \case
+        "NULL_VALUE" -> Right NullValue
+        x -> Left ("Unable to parse ValueNullValue from: " <> x)
+
+instance ToHttpApiData ValueNullValue where
+    toQueryParam = \case
+        NullValue -> "NULL_VALUE"
+
+instance FromJSON ValueNullValue where
+    parseJSON = parseJSONText "ValueNullValue"
+
+instance ToJSON ValueNullValue where
+    toJSON = toJSONText
+
+-- | The unary operator to apply.
+data UnaryFilterOp
+    = UFOOperatorUnspecified
+      -- ^ @OPERATOR_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | UFOIsNan
+      -- ^ @IS_NAN@
+      -- Test if a field is equal to NaN.
+    | UFOIsNull
+      -- ^ @IS_NULL@
+      -- Test if an exprestion evaluates to Null.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable UnaryFilterOp
+
+instance FromHttpApiData UnaryFilterOp where
+    parseQueryParam = \case
+        "OPERATOR_UNSPECIFIED" -> Right UFOOperatorUnspecified
+        "IS_NAN" -> Right UFOIsNan
+        "IS_NULL" -> Right UFOIsNull
+        x -> Left ("Unable to parse UnaryFilterOp from: " <> x)
+
+instance ToHttpApiData UnaryFilterOp where
+    toQueryParam = \case
+        UFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
+        UFOIsNan -> "IS_NAN"
+        UFOIsNull -> "IS_NULL"
+
+instance FromJSON UnaryFilterOp where
+    parseJSON = parseJSONText "UnaryFilterOp"
+
+instance ToJSON UnaryFilterOp where
+    toJSON = toJSONText
+
+-- | Indicates that this field supports operations on \`array_value\`s.
+data GoogleFirestoreAdminV1IndexFieldArrayConfig
+    = ArrayConfigUnspecified
+      -- ^ @ARRAY_CONFIG_UNSPECIFIED@
+      -- The index does not support additional array queries.
+    | Contains
+      -- ^ @CONTAINS@
+      -- The index supports array containment queries.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1IndexFieldArrayConfig
+
+instance FromHttpApiData GoogleFirestoreAdminV1IndexFieldArrayConfig where
+    parseQueryParam = \case
+        "ARRAY_CONFIG_UNSPECIFIED" -> Right ArrayConfigUnspecified
+        "CONTAINS" -> Right Contains
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1IndexFieldArrayConfig from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1IndexFieldArrayConfig where
+    toQueryParam = \case
+        ArrayConfigUnspecified -> "ARRAY_CONFIG_UNSPECIFIED"
+        Contains -> "CONTAINS"
+
+instance FromJSON GoogleFirestoreAdminV1IndexFieldArrayConfig where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1IndexFieldArrayConfig"
+
+instance ToJSON GoogleFirestoreAdminV1IndexFieldArrayConfig where
+    toJSON = toJSONText
+
+-- | The state of the operation.
+data GoogleFirestoreAdminV1IndexOperationMetadataState
+    = OperationStateUnspecified
+      -- ^ @OPERATION_STATE_UNSPECIFIED@
+      -- Unspecified.
+    | Initializing
+      -- ^ @INITIALIZING@
+      -- Request is being prepared for processing.
+    | Processing
+      -- ^ @PROCESSING@
+      -- Request is actively being processed.
+    | Cancelling
+      -- ^ @CANCELLING@
+      -- Request is in the process of being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation on the operation.
+    | Finalizing
+      -- ^ @FINALIZING@
+      -- Request has been processed and is in its finalization stage.
+    | Successful
+      -- ^ @SUCCESSFUL@
+      -- Request has completed successfully.
+    | Failed
+      -- ^ @FAILED@
+      -- Request has finished being processed, but encountered an error.
+    | Cancelled
+      -- ^ @CANCELLED@
+      -- Request has finished being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1IndexOperationMetadataState
+
+instance FromHttpApiData GoogleFirestoreAdminV1IndexOperationMetadataState where
+    parseQueryParam = \case
+        "OPERATION_STATE_UNSPECIFIED" -> Right OperationStateUnspecified
+        "INITIALIZING" -> Right Initializing
+        "PROCESSING" -> Right Processing
+        "CANCELLING" -> Right Cancelling
+        "FINALIZING" -> Right Finalizing
+        "SUCCESSFUL" -> Right Successful
+        "FAILED" -> Right Failed
+        "CANCELLED" -> Right Cancelled
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1IndexOperationMetadataState from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1IndexOperationMetadataState where
+    toQueryParam = \case
+        OperationStateUnspecified -> "OPERATION_STATE_UNSPECIFIED"
+        Initializing -> "INITIALIZING"
+        Processing -> "PROCESSING"
+        Cancelling -> "CANCELLING"
+        Finalizing -> "FINALIZING"
+        Successful -> "SUCCESSFUL"
+        Failed -> "FAILED"
+        Cancelled -> "CANCELLED"
+
+instance FromJSON GoogleFirestoreAdminV1IndexOperationMetadataState where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1IndexOperationMetadataState"
+
+instance ToJSON GoogleFirestoreAdminV1IndexOperationMetadataState where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | The operator to filter by.
+data FieldFilterOp
+    = FFOOperatorUnspecified
+      -- ^ @OPERATOR_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | FFOLessThan
+      -- ^ @LESS_THAN@
+      -- Less than. Requires that the field come first in \`order_by\`.
+    | FFOLessThanOrEqual
+      -- ^ @LESS_THAN_OR_EQUAL@
+      -- Less than or equal. Requires that the field come first in \`order_by\`.
+    | FFOGreaterThan
+      -- ^ @GREATER_THAN@
+      -- Greater than. Requires that the field come first in \`order_by\`.
+    | FFOGreaterThanOrEqual
+      -- ^ @GREATER_THAN_OR_EQUAL@
+      -- Greater than or equal. Requires that the field come first in
+      -- \`order_by\`.
+    | FFOEqual
+      -- ^ @EQUAL@
+      -- Equal.
+    | FFOArrayContains
+      -- ^ @ARRAY_CONTAINS@
+      -- Contains. Requires that the field is an array.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable FieldFilterOp
+
+instance FromHttpApiData FieldFilterOp where
+    parseQueryParam = \case
+        "OPERATOR_UNSPECIFIED" -> Right FFOOperatorUnspecified
+        "LESS_THAN" -> Right FFOLessThan
+        "LESS_THAN_OR_EQUAL" -> Right FFOLessThanOrEqual
+        "GREATER_THAN" -> Right FFOGreaterThan
+        "GREATER_THAN_OR_EQUAL" -> Right FFOGreaterThanOrEqual
+        "EQUAL" -> Right FFOEqual
+        "ARRAY_CONTAINS" -> Right FFOArrayContains
+        x -> Left ("Unable to parse FieldFilterOp from: " <> x)
+
+instance ToHttpApiData FieldFilterOp where
+    toQueryParam = \case
+        FFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
+        FFOLessThan -> "LESS_THAN"
+        FFOLessThanOrEqual -> "LESS_THAN_OR_EQUAL"
+        FFOGreaterThan -> "GREATER_THAN"
+        FFOGreaterThanOrEqual -> "GREATER_THAN_OR_EQUAL"
+        FFOEqual -> "EQUAL"
+        FFOArrayContains -> "ARRAY_CONTAINS"
+
+instance FromJSON FieldFilterOp where
+    parseJSON = parseJSONText "FieldFilterOp"
+
+instance ToJSON FieldFilterOp where
+    toJSON = toJSONText
+
+-- | The type of change that occurred.
+data TargetChangeTargetChangeType
+    = TCTCTNoChange
+      -- ^ @NO_CHANGE@
+      -- No change has occurred. Used only to send an updated \`resume_token\`.
+    | TCTCTAdd
+      -- ^ @ADD@
+      -- The targets have been added.
+    | TCTCTRemove
+      -- ^ @REMOVE@
+      -- The targets have been removed.
+    | TCTCTCurrent
+      -- ^ @CURRENT@
+      -- The targets reflect all changes committed before the targets were added
+      -- to the stream. This will be sent after or with a \`read_time\` that is
+      -- greater than or equal to the time at which the targets were added.
+      -- Listeners can wait for this change if read-after-write semantics are
+      -- desired.
+    | TCTCTReset
+      -- ^ @RESET@
+      -- The targets have been reset, and a new initial state for the targets
+      -- will be returned in subsequent changes. After the initial state is
+      -- complete, \`CURRENT\` will be returned even if the target was previously
+      -- indicated to be \`CURRENT\`.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetChangeTargetChangeType
+
+instance FromHttpApiData TargetChangeTargetChangeType where
+    parseQueryParam = \case
+        "NO_CHANGE" -> Right TCTCTNoChange
+        "ADD" -> Right TCTCTAdd
+        "REMOVE" -> Right TCTCTRemove
+        "CURRENT" -> Right TCTCTCurrent
+        "RESET" -> Right TCTCTReset
+        x -> Left ("Unable to parse TargetChangeTargetChangeType from: " <> x)
+
+instance ToHttpApiData TargetChangeTargetChangeType where
+    toQueryParam = \case
+        TCTCTNoChange -> "NO_CHANGE"
+        TCTCTAdd -> "ADD"
+        TCTCTRemove -> "REMOVE"
+        TCTCTCurrent -> "CURRENT"
+        TCTCTReset -> "RESET"
+
+instance FromJSON TargetChangeTargetChangeType where
+    parseJSON = parseJSONText "TargetChangeTargetChangeType"
+
+instance ToJSON TargetChangeTargetChangeType where
+    toJSON = toJSONText
+
+-- | The state of the import operation.
+data GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState
+    = GFAVIDMOSOperationStateUnspecified
+      -- ^ @OPERATION_STATE_UNSPECIFIED@
+      -- Unspecified.
+    | GFAVIDMOSInitializing
+      -- ^ @INITIALIZING@
+      -- Request is being prepared for processing.
+    | GFAVIDMOSProcessing
+      -- ^ @PROCESSING@
+      -- Request is actively being processed.
+    | GFAVIDMOSCancelling
+      -- ^ @CANCELLING@
+      -- Request is in the process of being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation on the operation.
+    | GFAVIDMOSFinalizing
+      -- ^ @FINALIZING@
+      -- Request has been processed and is in its finalization stage.
+    | GFAVIDMOSSuccessful
+      -- ^ @SUCCESSFUL@
+      -- Request has completed successfully.
+    | GFAVIDMOSFailed
+      -- ^ @FAILED@
+      -- Request has finished being processed, but encountered an error.
+    | GFAVIDMOSCancelled
+      -- ^ @CANCELLED@
+      -- Request has finished being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState
+
+instance FromHttpApiData GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState where
+    parseQueryParam = \case
+        "OPERATION_STATE_UNSPECIFIED" -> Right GFAVIDMOSOperationStateUnspecified
+        "INITIALIZING" -> Right GFAVIDMOSInitializing
+        "PROCESSING" -> Right GFAVIDMOSProcessing
+        "CANCELLING" -> Right GFAVIDMOSCancelling
+        "FINALIZING" -> Right GFAVIDMOSFinalizing
+        "SUCCESSFUL" -> Right GFAVIDMOSSuccessful
+        "FAILED" -> Right GFAVIDMOSFailed
+        "CANCELLED" -> Right GFAVIDMOSCancelled
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState where
+    toQueryParam = \case
+        GFAVIDMOSOperationStateUnspecified -> "OPERATION_STATE_UNSPECIFIED"
+        GFAVIDMOSInitializing -> "INITIALIZING"
+        GFAVIDMOSProcessing -> "PROCESSING"
+        GFAVIDMOSCancelling -> "CANCELLING"
+        GFAVIDMOSFinalizing -> "FINALIZING"
+        GFAVIDMOSSuccessful -> "SUCCESSFUL"
+        GFAVIDMOSFailed -> "FAILED"
+        GFAVIDMOSCancelled -> "CANCELLED"
+
+instance FromJSON GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState"
+
+instance ToJSON GoogleFirestoreAdminV1ImportDocumentsMetadataOperationState where
+    toJSON = toJSONText
+
+-- | The state of the operation.
+data GoogleFirestoreAdminV1FieldOperationMetadataState
+    = GFAVFOMSOperationStateUnspecified
+      -- ^ @OPERATION_STATE_UNSPECIFIED@
+      -- Unspecified.
+    | GFAVFOMSInitializing
+      -- ^ @INITIALIZING@
+      -- Request is being prepared for processing.
+    | GFAVFOMSProcessing
+      -- ^ @PROCESSING@
+      -- Request is actively being processed.
+    | GFAVFOMSCancelling
+      -- ^ @CANCELLING@
+      -- Request is in the process of being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation on the operation.
+    | GFAVFOMSFinalizing
+      -- ^ @FINALIZING@
+      -- Request has been processed and is in its finalization stage.
+    | GFAVFOMSSuccessful
+      -- ^ @SUCCESSFUL@
+      -- Request has completed successfully.
+    | GFAVFOMSFailed
+      -- ^ @FAILED@
+      -- Request has finished being processed, but encountered an error.
+    | GFAVFOMSCancelled
+      -- ^ @CANCELLED@
+      -- Request has finished being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1FieldOperationMetadataState
+
+instance FromHttpApiData GoogleFirestoreAdminV1FieldOperationMetadataState where
+    parseQueryParam = \case
+        "OPERATION_STATE_UNSPECIFIED" -> Right GFAVFOMSOperationStateUnspecified
+        "INITIALIZING" -> Right GFAVFOMSInitializing
+        "PROCESSING" -> Right GFAVFOMSProcessing
+        "CANCELLING" -> Right GFAVFOMSCancelling
+        "FINALIZING" -> Right GFAVFOMSFinalizing
+        "SUCCESSFUL" -> Right GFAVFOMSSuccessful
+        "FAILED" -> Right GFAVFOMSFailed
+        "CANCELLED" -> Right GFAVFOMSCancelled
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1FieldOperationMetadataState from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1FieldOperationMetadataState where
+    toQueryParam = \case
+        GFAVFOMSOperationStateUnspecified -> "OPERATION_STATE_UNSPECIFIED"
+        GFAVFOMSInitializing -> "INITIALIZING"
+        GFAVFOMSProcessing -> "PROCESSING"
+        GFAVFOMSCancelling -> "CANCELLING"
+        GFAVFOMSFinalizing -> "FINALIZING"
+        GFAVFOMSSuccessful -> "SUCCESSFUL"
+        GFAVFOMSFailed -> "FAILED"
+        GFAVFOMSCancelled -> "CANCELLED"
+
+instance FromJSON GoogleFirestoreAdminV1FieldOperationMetadataState where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1FieldOperationMetadataState"
+
+instance ToJSON GoogleFirestoreAdminV1FieldOperationMetadataState where
+    toJSON = toJSONText
+
+-- | Sets the field to the given server value.
+data FieldTransformSetToServerValue
+    = ServerValueUnspecified
+      -- ^ @SERVER_VALUE_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | RequestTime
+      -- ^ @REQUEST_TIME@
+      -- The time at which the server processed the request, with millisecond
+      -- precision.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable FieldTransformSetToServerValue
+
+instance FromHttpApiData FieldTransformSetToServerValue where
+    parseQueryParam = \case
+        "SERVER_VALUE_UNSPECIFIED" -> Right ServerValueUnspecified
+        "REQUEST_TIME" -> Right RequestTime
+        x -> Left ("Unable to parse FieldTransformSetToServerValue from: " <> x)
+
+instance ToHttpApiData FieldTransformSetToServerValue where
+    toQueryParam = \case
+        ServerValueUnspecified -> "SERVER_VALUE_UNSPECIFIED"
+        RequestTime -> "REQUEST_TIME"
+
+instance FromJSON FieldTransformSetToServerValue where
+    parseJSON = parseJSONText "FieldTransformSetToServerValue"
+
+instance ToJSON FieldTransformSetToServerValue where
+    toJSON = toJSONText
+
+-- | The state of the export operation.
+data GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState
+    = GFAVEDMOSOperationStateUnspecified
+      -- ^ @OPERATION_STATE_UNSPECIFIED@
+      -- Unspecified.
+    | GFAVEDMOSInitializing
+      -- ^ @INITIALIZING@
+      -- Request is being prepared for processing.
+    | GFAVEDMOSProcessing
+      -- ^ @PROCESSING@
+      -- Request is actively being processed.
+    | GFAVEDMOSCancelling
+      -- ^ @CANCELLING@
+      -- Request is in the process of being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation on the operation.
+    | GFAVEDMOSFinalizing
+      -- ^ @FINALIZING@
+      -- Request has been processed and is in its finalization stage.
+    | GFAVEDMOSSuccessful
+      -- ^ @SUCCESSFUL@
+      -- Request has completed successfully.
+    | GFAVEDMOSFailed
+      -- ^ @FAILED@
+      -- Request has finished being processed, but encountered an error.
+    | GFAVEDMOSCancelled
+      -- ^ @CANCELLED@
+      -- Request has finished being cancelled after user called
+      -- google.longrunning.Operations.CancelOperation.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState
+
+instance FromHttpApiData GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState where
+    parseQueryParam = \case
+        "OPERATION_STATE_UNSPECIFIED" -> Right GFAVEDMOSOperationStateUnspecified
+        "INITIALIZING" -> Right GFAVEDMOSInitializing
+        "PROCESSING" -> Right GFAVEDMOSProcessing
+        "CANCELLING" -> Right GFAVEDMOSCancelling
+        "FINALIZING" -> Right GFAVEDMOSFinalizing
+        "SUCCESSFUL" -> Right GFAVEDMOSSuccessful
+        "FAILED" -> Right GFAVEDMOSFailed
+        "CANCELLED" -> Right GFAVEDMOSCancelled
+        x -> Left ("Unable to parse GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState from: " <> x)
+
+instance ToHttpApiData GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState where
+    toQueryParam = \case
+        GFAVEDMOSOperationStateUnspecified -> "OPERATION_STATE_UNSPECIFIED"
+        GFAVEDMOSInitializing -> "INITIALIZING"
+        GFAVEDMOSProcessing -> "PROCESSING"
+        GFAVEDMOSCancelling -> "CANCELLING"
+        GFAVEDMOSFinalizing -> "FINALIZING"
+        GFAVEDMOSSuccessful -> "SUCCESSFUL"
+        GFAVEDMOSFailed -> "FAILED"
+        GFAVEDMOSCancelled -> "CANCELLED"
+
+instance FromJSON GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState where
+    parseJSON = parseJSONText "GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState"
+
+instance ToJSON GoogleFirestoreAdminV1ExportDocumentsMetadataOperationState where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/Get.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/Get.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the metadata and configuration for a Field.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.fields.get@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Get
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsFieldsGetResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsFieldsGet
+    , ProjectsDatabasesCollectionGroupsFieldsGet
+
+    -- * Request Lenses
+    , pdcgfgXgafv
+    , pdcgfgUploadProtocol
+    , pdcgfgAccessToken
+    , pdcgfgUploadType
+    , pdcgfgName
+    , pdcgfgCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.fields.get@ method which the
+-- 'ProjectsDatabasesCollectionGroupsFieldsGet' request conforms to.
+type ProjectsDatabasesCollectionGroupsFieldsGetResource
+     =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] GoogleFirestoreAdminV1Field
+
+-- | Gets the metadata and configuration for a Field.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsFieldsGet' smart constructor.
+data ProjectsDatabasesCollectionGroupsFieldsGet = ProjectsDatabasesCollectionGroupsFieldsGet'
+    { _pdcgfgXgafv          :: !(Maybe Xgafv)
+    , _pdcgfgUploadProtocol :: !(Maybe Text)
+    , _pdcgfgAccessToken    :: !(Maybe Text)
+    , _pdcgfgUploadType     :: !(Maybe Text)
+    , _pdcgfgName           :: !Text
+    , _pdcgfgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsFieldsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgfgXgafv'
+--
+-- * 'pdcgfgUploadProtocol'
+--
+-- * 'pdcgfgAccessToken'
+--
+-- * 'pdcgfgUploadType'
+--
+-- * 'pdcgfgName'
+--
+-- * 'pdcgfgCallback'
+projectsDatabasesCollectionGroupsFieldsGet
+    :: Text -- ^ 'pdcgfgName'
+    -> ProjectsDatabasesCollectionGroupsFieldsGet
+projectsDatabasesCollectionGroupsFieldsGet pPdcgfgName_ =
+    ProjectsDatabasesCollectionGroupsFieldsGet'
+    { _pdcgfgXgafv = Nothing
+    , _pdcgfgUploadProtocol = Nothing
+    , _pdcgfgAccessToken = Nothing
+    , _pdcgfgUploadType = Nothing
+    , _pdcgfgName = pPdcgfgName_
+    , _pdcgfgCallback = Nothing
+    }
+
+-- | V1 error format.
+pdcgfgXgafv :: Lens' ProjectsDatabasesCollectionGroupsFieldsGet (Maybe Xgafv)
+pdcgfgXgafv
+  = lens _pdcgfgXgafv (\ s a -> s{_pdcgfgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgfgUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsFieldsGet (Maybe Text)
+pdcgfgUploadProtocol
+  = lens _pdcgfgUploadProtocol
+      (\ s a -> s{_pdcgfgUploadProtocol = a})
+
+-- | OAuth access token.
+pdcgfgAccessToken :: Lens' ProjectsDatabasesCollectionGroupsFieldsGet (Maybe Text)
+pdcgfgAccessToken
+  = lens _pdcgfgAccessToken
+      (\ s a -> s{_pdcgfgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgfgUploadType :: Lens' ProjectsDatabasesCollectionGroupsFieldsGet (Maybe Text)
+pdcgfgUploadType
+  = lens _pdcgfgUploadType
+      (\ s a -> s{_pdcgfgUploadType = a})
+
+-- | A name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/fields\/{field_id}\`
+pdcgfgName :: Lens' ProjectsDatabasesCollectionGroupsFieldsGet Text
+pdcgfgName
+  = lens _pdcgfgName (\ s a -> s{_pdcgfgName = a})
+
+-- | JSONP
+pdcgfgCallback :: Lens' ProjectsDatabasesCollectionGroupsFieldsGet (Maybe Text)
+pdcgfgCallback
+  = lens _pdcgfgCallback
+      (\ s a -> s{_pdcgfgCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsFieldsGet where
+        type Rs ProjectsDatabasesCollectionGroupsFieldsGet =
+             GoogleFirestoreAdminV1Field
+        type Scopes
+               ProjectsDatabasesCollectionGroupsFieldsGet
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsFieldsGet'{..}
+          = go _pdcgfgName _pdcgfgXgafv _pdcgfgUploadProtocol
+              _pdcgfgAccessToken
+              _pdcgfgUploadType
+              _pdcgfgCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsFieldsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/List.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/List.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the field configuration and metadata for this database. Currently,
+-- FirestoreAdmin.ListFields only supports listing fields that have been
+-- explicitly overridden. To issue this query, call
+-- FirestoreAdmin.ListFields with the filter set to
+-- \`indexConfig.usesAncestorConfig:false\`.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.fields.list@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.List
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsFieldsListResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsFieldsList
+    , ProjectsDatabasesCollectionGroupsFieldsList
+
+    -- * Request Lenses
+    , pdcgflParent
+    , pdcgflXgafv
+    , pdcgflUploadProtocol
+    , pdcgflAccessToken
+    , pdcgflUploadType
+    , pdcgflFilter
+    , pdcgflPageToken
+    , pdcgflPageSize
+    , pdcgflCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.fields.list@ method which the
+-- 'ProjectsDatabasesCollectionGroupsFieldsList' request conforms to.
+type ProjectsDatabasesCollectionGroupsFieldsListResource
+     =
+     "v1" :>
+       Capture "parent" Text :>
+         "fields" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON]
+                               GoogleFirestoreAdminV1ListFieldsResponse
+
+-- | Lists the field configuration and metadata for this database. Currently,
+-- FirestoreAdmin.ListFields only supports listing fields that have been
+-- explicitly overridden. To issue this query, call
+-- FirestoreAdmin.ListFields with the filter set to
+-- \`indexConfig.usesAncestorConfig:false\`.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsFieldsList' smart constructor.
+data ProjectsDatabasesCollectionGroupsFieldsList = ProjectsDatabasesCollectionGroupsFieldsList'
+    { _pdcgflParent         :: !Text
+    , _pdcgflXgafv          :: !(Maybe Xgafv)
+    , _pdcgflUploadProtocol :: !(Maybe Text)
+    , _pdcgflAccessToken    :: !(Maybe Text)
+    , _pdcgflUploadType     :: !(Maybe Text)
+    , _pdcgflFilter         :: !(Maybe Text)
+    , _pdcgflPageToken      :: !(Maybe Text)
+    , _pdcgflPageSize       :: !(Maybe (Textual Int32))
+    , _pdcgflCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsFieldsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgflParent'
+--
+-- * 'pdcgflXgafv'
+--
+-- * 'pdcgflUploadProtocol'
+--
+-- * 'pdcgflAccessToken'
+--
+-- * 'pdcgflUploadType'
+--
+-- * 'pdcgflFilter'
+--
+-- * 'pdcgflPageToken'
+--
+-- * 'pdcgflPageSize'
+--
+-- * 'pdcgflCallback'
+projectsDatabasesCollectionGroupsFieldsList
+    :: Text -- ^ 'pdcgflParent'
+    -> ProjectsDatabasesCollectionGroupsFieldsList
+projectsDatabasesCollectionGroupsFieldsList pPdcgflParent_ =
+    ProjectsDatabasesCollectionGroupsFieldsList'
+    { _pdcgflParent = pPdcgflParent_
+    , _pdcgflXgafv = Nothing
+    , _pdcgflUploadProtocol = Nothing
+    , _pdcgflAccessToken = Nothing
+    , _pdcgflUploadType = Nothing
+    , _pdcgflFilter = Nothing
+    , _pdcgflPageToken = Nothing
+    , _pdcgflPageSize = Nothing
+    , _pdcgflCallback = Nothing
+    }
+
+-- | A parent name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\`
+pdcgflParent :: Lens' ProjectsDatabasesCollectionGroupsFieldsList Text
+pdcgflParent
+  = lens _pdcgflParent (\ s a -> s{_pdcgflParent = a})
+
+-- | V1 error format.
+pdcgflXgafv :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Xgafv)
+pdcgflXgafv
+  = lens _pdcgflXgafv (\ s a -> s{_pdcgflXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgflUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Text)
+pdcgflUploadProtocol
+  = lens _pdcgflUploadProtocol
+      (\ s a -> s{_pdcgflUploadProtocol = a})
+
+-- | OAuth access token.
+pdcgflAccessToken :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Text)
+pdcgflAccessToken
+  = lens _pdcgflAccessToken
+      (\ s a -> s{_pdcgflAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgflUploadType :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Text)
+pdcgflUploadType
+  = lens _pdcgflUploadType
+      (\ s a -> s{_pdcgflUploadType = a})
+
+-- | The filter to apply to list results. Currently,
+-- FirestoreAdmin.ListFields only supports listing fields that have been
+-- explicitly overridden. To issue this query, call
+-- FirestoreAdmin.ListFields with the filter set to
+-- \`indexConfig.usesAncestorConfig:false\`.
+pdcgflFilter :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Text)
+pdcgflFilter
+  = lens _pdcgflFilter (\ s a -> s{_pdcgflFilter = a})
+
+-- | A page token, returned from a previous call to
+-- FirestoreAdmin.ListFields, that may be used to get the next page of
+-- results.
+pdcgflPageToken :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Text)
+pdcgflPageToken
+  = lens _pdcgflPageToken
+      (\ s a -> s{_pdcgflPageToken = a})
+
+-- | The number of results to return.
+pdcgflPageSize :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Int32)
+pdcgflPageSize
+  = lens _pdcgflPageSize
+      (\ s a -> s{_pdcgflPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+pdcgflCallback :: Lens' ProjectsDatabasesCollectionGroupsFieldsList (Maybe Text)
+pdcgflCallback
+  = lens _pdcgflCallback
+      (\ s a -> s{_pdcgflCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsFieldsList where
+        type Rs ProjectsDatabasesCollectionGroupsFieldsList =
+             GoogleFirestoreAdminV1ListFieldsResponse
+        type Scopes
+               ProjectsDatabasesCollectionGroupsFieldsList
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsFieldsList'{..}
+          = go _pdcgflParent _pdcgflXgafv _pdcgflUploadProtocol
+              _pdcgflAccessToken
+              _pdcgflUploadType
+              _pdcgflFilter
+              _pdcgflPageToken
+              _pdcgflPageSize
+              _pdcgflCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsFieldsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/Patch.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Fields/Patch.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a field configuration. Currently, field updates apply only to
+-- single field index configuration. However, calls to
+-- FirestoreAdmin.UpdateField should provide a field mask to avoid changing
+-- any configuration that the caller isn\'t aware of. The field mask should
+-- be specified as: \`{ paths: \"index_config\" }\`. This call returns a
+-- google.longrunning.Operation which may be used to track the status of
+-- the field update. The metadata for the operation will be the type
+-- FieldOperationMetadata. To configure the default field settings for the
+-- database, use the special \`Field\` with resource name:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/__default__\/fields\/*\`.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.fields.patch@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Patch
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsFieldsPatchResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsFieldsPatch
+    , ProjectsDatabasesCollectionGroupsFieldsPatch
+
+    -- * Request Lenses
+    , pdcgfpXgafv
+    , pdcgfpUploadProtocol
+    , pdcgfpUpdateMask
+    , pdcgfpAccessToken
+    , pdcgfpUploadType
+    , pdcgfpPayload
+    , pdcgfpName
+    , pdcgfpCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.fields.patch@ method which the
+-- 'ProjectsDatabasesCollectionGroupsFieldsPatch' request conforms to.
+type ProjectsDatabasesCollectionGroupsFieldsPatchResource
+     =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] GoogleFirestoreAdminV1Field :>
+                         Patch '[JSON] GoogleLongrunningOperation
+
+-- | Updates a field configuration. Currently, field updates apply only to
+-- single field index configuration. However, calls to
+-- FirestoreAdmin.UpdateField should provide a field mask to avoid changing
+-- any configuration that the caller isn\'t aware of. The field mask should
+-- be specified as: \`{ paths: \"index_config\" }\`. This call returns a
+-- google.longrunning.Operation which may be used to track the status of
+-- the field update. The metadata for the operation will be the type
+-- FieldOperationMetadata. To configure the default field settings for the
+-- database, use the special \`Field\` with resource name:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/__default__\/fields\/*\`.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsFieldsPatch' smart constructor.
+data ProjectsDatabasesCollectionGroupsFieldsPatch = ProjectsDatabasesCollectionGroupsFieldsPatch'
+    { _pdcgfpXgafv          :: !(Maybe Xgafv)
+    , _pdcgfpUploadProtocol :: !(Maybe Text)
+    , _pdcgfpUpdateMask     :: !(Maybe GFieldMask)
+    , _pdcgfpAccessToken    :: !(Maybe Text)
+    , _pdcgfpUploadType     :: !(Maybe Text)
+    , _pdcgfpPayload        :: !GoogleFirestoreAdminV1Field
+    , _pdcgfpName           :: !Text
+    , _pdcgfpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsFieldsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgfpXgafv'
+--
+-- * 'pdcgfpUploadProtocol'
+--
+-- * 'pdcgfpUpdateMask'
+--
+-- * 'pdcgfpAccessToken'
+--
+-- * 'pdcgfpUploadType'
+--
+-- * 'pdcgfpPayload'
+--
+-- * 'pdcgfpName'
+--
+-- * 'pdcgfpCallback'
+projectsDatabasesCollectionGroupsFieldsPatch
+    :: GoogleFirestoreAdminV1Field -- ^ 'pdcgfpPayload'
+    -> Text -- ^ 'pdcgfpName'
+    -> ProjectsDatabasesCollectionGroupsFieldsPatch
+projectsDatabasesCollectionGroupsFieldsPatch pPdcgfpPayload_ pPdcgfpName_ =
+    ProjectsDatabasesCollectionGroupsFieldsPatch'
+    { _pdcgfpXgafv = Nothing
+    , _pdcgfpUploadProtocol = Nothing
+    , _pdcgfpUpdateMask = Nothing
+    , _pdcgfpAccessToken = Nothing
+    , _pdcgfpUploadType = Nothing
+    , _pdcgfpPayload = pPdcgfpPayload_
+    , _pdcgfpName = pPdcgfpName_
+    , _pdcgfpCallback = Nothing
+    }
+
+-- | V1 error format.
+pdcgfpXgafv :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch (Maybe Xgafv)
+pdcgfpXgafv
+  = lens _pdcgfpXgafv (\ s a -> s{_pdcgfpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgfpUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch (Maybe Text)
+pdcgfpUploadProtocol
+  = lens _pdcgfpUploadProtocol
+      (\ s a -> s{_pdcgfpUploadProtocol = a})
+
+-- | A mask, relative to the field. If specified, only configuration
+-- specified by this field_mask will be updated in the field.
+pdcgfpUpdateMask :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch (Maybe GFieldMask)
+pdcgfpUpdateMask
+  = lens _pdcgfpUpdateMask
+      (\ s a -> s{_pdcgfpUpdateMask = a})
+
+-- | OAuth access token.
+pdcgfpAccessToken :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch (Maybe Text)
+pdcgfpAccessToken
+  = lens _pdcgfpAccessToken
+      (\ s a -> s{_pdcgfpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgfpUploadType :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch (Maybe Text)
+pdcgfpUploadType
+  = lens _pdcgfpUploadType
+      (\ s a -> s{_pdcgfpUploadType = a})
+
+-- | Multipart request metadata.
+pdcgfpPayload :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch GoogleFirestoreAdminV1Field
+pdcgfpPayload
+  = lens _pdcgfpPayload
+      (\ s a -> s{_pdcgfpPayload = a})
+
+-- | A field name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/fields\/{field_path}\`
+-- A field path may be a simple field name, e.g. \`address\` or a path to
+-- fields within map_value , e.g. \`address.city\`, or a special field
+-- path. The only valid special field is \`*\`, which represents any field.
+-- Field paths may be quoted using \` (backtick). The only character that
+-- needs to be escaped within a quoted field path is the backtick character
+-- itself, escaped using a backslash. Special characters in field paths
+-- that must be quoted include: \`*\`, \`.\`, \`\`\` (backtick), \`[\`,
+-- \`]\`, as well as any ascii symbolic characters. Examples: (Note:
+-- Comments here are written in markdown syntax, so there is an additional
+-- layer of backticks to represent a code block) \`\\\`address.city\\\`\`
+-- represents a field named \`address.city\`, not the map key \`city\` in
+-- the field \`address\`. \`\\\`*\\\`\` represents a field named \`*\`, not
+-- any field. A special \`Field\` contains the default indexing settings
+-- for all fields. This field\'s resource name is:
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/__default__\/fields\/*\`
+-- Indexes defined on this \`Field\` will be applied to all fields which do
+-- not have their own \`Field\` index configuration.
+pdcgfpName :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch Text
+pdcgfpName
+  = lens _pdcgfpName (\ s a -> s{_pdcgfpName = a})
+
+-- | JSONP
+pdcgfpCallback :: Lens' ProjectsDatabasesCollectionGroupsFieldsPatch (Maybe Text)
+pdcgfpCallback
+  = lens _pdcgfpCallback
+      (\ s a -> s{_pdcgfpCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsFieldsPatch where
+        type Rs ProjectsDatabasesCollectionGroupsFieldsPatch
+             = GoogleLongrunningOperation
+        type Scopes
+               ProjectsDatabasesCollectionGroupsFieldsPatch
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsFieldsPatch'{..}
+          = go _pdcgfpName _pdcgfpXgafv _pdcgfpUploadProtocol
+              _pdcgfpUpdateMask
+              _pdcgfpAccessToken
+              _pdcgfpUploadType
+              _pdcgfpCallback
+              (Just AltJSON)
+              _pdcgfpPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsFieldsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Create.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Create.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a composite index. This returns a google.longrunning.Operation
+-- which may be used to track the status of the creation. The metadata for
+-- the operation will be the type IndexOperationMetadata.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.indexes.create@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Create
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsIndexesCreateResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsIndexesCreate
+    , ProjectsDatabasesCollectionGroupsIndexesCreate
+
+    -- * Request Lenses
+    , pdcgicParent
+    , pdcgicXgafv
+    , pdcgicUploadProtocol
+    , pdcgicAccessToken
+    , pdcgicUploadType
+    , pdcgicPayload
+    , pdcgicCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.indexes.create@ method which the
+-- 'ProjectsDatabasesCollectionGroupsIndexesCreate' request conforms to.
+type ProjectsDatabasesCollectionGroupsIndexesCreateResource
+     =
+     "v1" :>
+       Capture "parent" Text :>
+         "indexes" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] GoogleFirestoreAdminV1Index :>
+                         Post '[JSON] GoogleLongrunningOperation
+
+-- | Creates a composite index. This returns a google.longrunning.Operation
+-- which may be used to track the status of the creation. The metadata for
+-- the operation will be the type IndexOperationMetadata.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsIndexesCreate' smart constructor.
+data ProjectsDatabasesCollectionGroupsIndexesCreate = ProjectsDatabasesCollectionGroupsIndexesCreate'
+    { _pdcgicParent         :: !Text
+    , _pdcgicXgafv          :: !(Maybe Xgafv)
+    , _pdcgicUploadProtocol :: !(Maybe Text)
+    , _pdcgicAccessToken    :: !(Maybe Text)
+    , _pdcgicUploadType     :: !(Maybe Text)
+    , _pdcgicPayload        :: !GoogleFirestoreAdminV1Index
+    , _pdcgicCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsIndexesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgicParent'
+--
+-- * 'pdcgicXgafv'
+--
+-- * 'pdcgicUploadProtocol'
+--
+-- * 'pdcgicAccessToken'
+--
+-- * 'pdcgicUploadType'
+--
+-- * 'pdcgicPayload'
+--
+-- * 'pdcgicCallback'
+projectsDatabasesCollectionGroupsIndexesCreate
+    :: Text -- ^ 'pdcgicParent'
+    -> GoogleFirestoreAdminV1Index -- ^ 'pdcgicPayload'
+    -> ProjectsDatabasesCollectionGroupsIndexesCreate
+projectsDatabasesCollectionGroupsIndexesCreate pPdcgicParent_ pPdcgicPayload_ =
+    ProjectsDatabasesCollectionGroupsIndexesCreate'
+    { _pdcgicParent = pPdcgicParent_
+    , _pdcgicXgafv = Nothing
+    , _pdcgicUploadProtocol = Nothing
+    , _pdcgicAccessToken = Nothing
+    , _pdcgicUploadType = Nothing
+    , _pdcgicPayload = pPdcgicPayload_
+    , _pdcgicCallback = Nothing
+    }
+
+-- | A parent name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\`
+pdcgicParent :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate Text
+pdcgicParent
+  = lens _pdcgicParent (\ s a -> s{_pdcgicParent = a})
+
+-- | V1 error format.
+pdcgicXgafv :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate (Maybe Xgafv)
+pdcgicXgafv
+  = lens _pdcgicXgafv (\ s a -> s{_pdcgicXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgicUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate (Maybe Text)
+pdcgicUploadProtocol
+  = lens _pdcgicUploadProtocol
+      (\ s a -> s{_pdcgicUploadProtocol = a})
+
+-- | OAuth access token.
+pdcgicAccessToken :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate (Maybe Text)
+pdcgicAccessToken
+  = lens _pdcgicAccessToken
+      (\ s a -> s{_pdcgicAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgicUploadType :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate (Maybe Text)
+pdcgicUploadType
+  = lens _pdcgicUploadType
+      (\ s a -> s{_pdcgicUploadType = a})
+
+-- | Multipart request metadata.
+pdcgicPayload :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate GoogleFirestoreAdminV1Index
+pdcgicPayload
+  = lens _pdcgicPayload
+      (\ s a -> s{_pdcgicPayload = a})
+
+-- | JSONP
+pdcgicCallback :: Lens' ProjectsDatabasesCollectionGroupsIndexesCreate (Maybe Text)
+pdcgicCallback
+  = lens _pdcgicCallback
+      (\ s a -> s{_pdcgicCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsIndexesCreate where
+        type Rs
+               ProjectsDatabasesCollectionGroupsIndexesCreate
+             = GoogleLongrunningOperation
+        type Scopes
+               ProjectsDatabasesCollectionGroupsIndexesCreate
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsIndexesCreate'{..}
+          = go _pdcgicParent _pdcgicXgafv _pdcgicUploadProtocol
+              _pdcgicAccessToken
+              _pdcgicUploadType
+              _pdcgicCallback
+              (Just AltJSON)
+              _pdcgicPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsIndexesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Delete.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Delete.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a composite index.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.indexes.delete@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Delete
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsIndexesDeleteResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsIndexesDelete
+    , ProjectsDatabasesCollectionGroupsIndexesDelete
+
+    -- * Request Lenses
+    , pdcgidXgafv
+    , pdcgidUploadProtocol
+    , pdcgidAccessToken
+    , pdcgidUploadType
+    , pdcgidName
+    , pdcgidCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.indexes.delete@ method which the
+-- 'ProjectsDatabasesCollectionGroupsIndexesDelete' request conforms to.
+type ProjectsDatabasesCollectionGroupsIndexesDeleteResource
+     =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a composite index.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsIndexesDelete' smart constructor.
+data ProjectsDatabasesCollectionGroupsIndexesDelete = ProjectsDatabasesCollectionGroupsIndexesDelete'
+    { _pdcgidXgafv          :: !(Maybe Xgafv)
+    , _pdcgidUploadProtocol :: !(Maybe Text)
+    , _pdcgidAccessToken    :: !(Maybe Text)
+    , _pdcgidUploadType     :: !(Maybe Text)
+    , _pdcgidName           :: !Text
+    , _pdcgidCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsIndexesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgidXgafv'
+--
+-- * 'pdcgidUploadProtocol'
+--
+-- * 'pdcgidAccessToken'
+--
+-- * 'pdcgidUploadType'
+--
+-- * 'pdcgidName'
+--
+-- * 'pdcgidCallback'
+projectsDatabasesCollectionGroupsIndexesDelete
+    :: Text -- ^ 'pdcgidName'
+    -> ProjectsDatabasesCollectionGroupsIndexesDelete
+projectsDatabasesCollectionGroupsIndexesDelete pPdcgidName_ =
+    ProjectsDatabasesCollectionGroupsIndexesDelete'
+    { _pdcgidXgafv = Nothing
+    , _pdcgidUploadProtocol = Nothing
+    , _pdcgidAccessToken = Nothing
+    , _pdcgidUploadType = Nothing
+    , _pdcgidName = pPdcgidName_
+    , _pdcgidCallback = Nothing
+    }
+
+-- | V1 error format.
+pdcgidXgafv :: Lens' ProjectsDatabasesCollectionGroupsIndexesDelete (Maybe Xgafv)
+pdcgidXgafv
+  = lens _pdcgidXgafv (\ s a -> s{_pdcgidXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgidUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsIndexesDelete (Maybe Text)
+pdcgidUploadProtocol
+  = lens _pdcgidUploadProtocol
+      (\ s a -> s{_pdcgidUploadProtocol = a})
+
+-- | OAuth access token.
+pdcgidAccessToken :: Lens' ProjectsDatabasesCollectionGroupsIndexesDelete (Maybe Text)
+pdcgidAccessToken
+  = lens _pdcgidAccessToken
+      (\ s a -> s{_pdcgidAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgidUploadType :: Lens' ProjectsDatabasesCollectionGroupsIndexesDelete (Maybe Text)
+pdcgidUploadType
+  = lens _pdcgidUploadType
+      (\ s a -> s{_pdcgidUploadType = a})
+
+-- | A name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/indexes\/{index_id}\`
+pdcgidName :: Lens' ProjectsDatabasesCollectionGroupsIndexesDelete Text
+pdcgidName
+  = lens _pdcgidName (\ s a -> s{_pdcgidName = a})
+
+-- | JSONP
+pdcgidCallback :: Lens' ProjectsDatabasesCollectionGroupsIndexesDelete (Maybe Text)
+pdcgidCallback
+  = lens _pdcgidCallback
+      (\ s a -> s{_pdcgidCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsIndexesDelete where
+        type Rs
+               ProjectsDatabasesCollectionGroupsIndexesDelete
+             = Empty
+        type Scopes
+               ProjectsDatabasesCollectionGroupsIndexesDelete
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsIndexesDelete'{..}
+          = go _pdcgidName _pdcgidXgafv _pdcgidUploadProtocol
+              _pdcgidAccessToken
+              _pdcgidUploadType
+              _pdcgidCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsIndexesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Get.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/Get.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a composite index.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.indexes.get@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Get
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsIndexesGetResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsIndexesGet
+    , ProjectsDatabasesCollectionGroupsIndexesGet
+
+    -- * Request Lenses
+    , pdcgigXgafv
+    , pdcgigUploadProtocol
+    , pdcgigAccessToken
+    , pdcgigUploadType
+    , pdcgigName
+    , pdcgigCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.indexes.get@ method which the
+-- 'ProjectsDatabasesCollectionGroupsIndexesGet' request conforms to.
+type ProjectsDatabasesCollectionGroupsIndexesGetResource
+     =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] GoogleFirestoreAdminV1Index
+
+-- | Gets a composite index.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsIndexesGet' smart constructor.
+data ProjectsDatabasesCollectionGroupsIndexesGet = ProjectsDatabasesCollectionGroupsIndexesGet'
+    { _pdcgigXgafv          :: !(Maybe Xgafv)
+    , _pdcgigUploadProtocol :: !(Maybe Text)
+    , _pdcgigAccessToken    :: !(Maybe Text)
+    , _pdcgigUploadType     :: !(Maybe Text)
+    , _pdcgigName           :: !Text
+    , _pdcgigCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsIndexesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgigXgafv'
+--
+-- * 'pdcgigUploadProtocol'
+--
+-- * 'pdcgigAccessToken'
+--
+-- * 'pdcgigUploadType'
+--
+-- * 'pdcgigName'
+--
+-- * 'pdcgigCallback'
+projectsDatabasesCollectionGroupsIndexesGet
+    :: Text -- ^ 'pdcgigName'
+    -> ProjectsDatabasesCollectionGroupsIndexesGet
+projectsDatabasesCollectionGroupsIndexesGet pPdcgigName_ =
+    ProjectsDatabasesCollectionGroupsIndexesGet'
+    { _pdcgigXgafv = Nothing
+    , _pdcgigUploadProtocol = Nothing
+    , _pdcgigAccessToken = Nothing
+    , _pdcgigUploadType = Nothing
+    , _pdcgigName = pPdcgigName_
+    , _pdcgigCallback = Nothing
+    }
+
+-- | V1 error format.
+pdcgigXgafv :: Lens' ProjectsDatabasesCollectionGroupsIndexesGet (Maybe Xgafv)
+pdcgigXgafv
+  = lens _pdcgigXgafv (\ s a -> s{_pdcgigXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgigUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsIndexesGet (Maybe Text)
+pdcgigUploadProtocol
+  = lens _pdcgigUploadProtocol
+      (\ s a -> s{_pdcgigUploadProtocol = a})
+
+-- | OAuth access token.
+pdcgigAccessToken :: Lens' ProjectsDatabasesCollectionGroupsIndexesGet (Maybe Text)
+pdcgigAccessToken
+  = lens _pdcgigAccessToken
+      (\ s a -> s{_pdcgigAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgigUploadType :: Lens' ProjectsDatabasesCollectionGroupsIndexesGet (Maybe Text)
+pdcgigUploadType
+  = lens _pdcgigUploadType
+      (\ s a -> s{_pdcgigUploadType = a})
+
+-- | A name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\/indexes\/{index_id}\`
+pdcgigName :: Lens' ProjectsDatabasesCollectionGroupsIndexesGet Text
+pdcgigName
+  = lens _pdcgigName (\ s a -> s{_pdcgigName = a})
+
+-- | JSONP
+pdcgigCallback :: Lens' ProjectsDatabasesCollectionGroupsIndexesGet (Maybe Text)
+pdcgigCallback
+  = lens _pdcgigCallback
+      (\ s a -> s{_pdcgigCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsIndexesGet where
+        type Rs ProjectsDatabasesCollectionGroupsIndexesGet =
+             GoogleFirestoreAdminV1Index
+        type Scopes
+               ProjectsDatabasesCollectionGroupsIndexesGet
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsIndexesGet'{..}
+          = go _pdcgigName _pdcgigXgafv _pdcgigUploadProtocol
+              _pdcgigAccessToken
+              _pdcgigUploadType
+              _pdcgigCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsIndexesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/List.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/CollectionGroups/Indexes/List.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists composite indexes.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.collectionGroups.indexes.list@.
+module Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.List
+    (
+    -- * REST Resource
+      ProjectsDatabasesCollectionGroupsIndexesListResource
+
+    -- * Creating a Request
+    , projectsDatabasesCollectionGroupsIndexesList
+    , ProjectsDatabasesCollectionGroupsIndexesList
+
+    -- * Request Lenses
+    , pdcgilParent
+    , pdcgilXgafv
+    , pdcgilUploadProtocol
+    , pdcgilAccessToken
+    , pdcgilUploadType
+    , pdcgilFilter
+    , pdcgilPageToken
+    , pdcgilPageSize
+    , pdcgilCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.collectionGroups.indexes.list@ method which the
+-- 'ProjectsDatabasesCollectionGroupsIndexesList' request conforms to.
+type ProjectsDatabasesCollectionGroupsIndexesListResource
+     =
+     "v1" :>
+       Capture "parent" Text :>
+         "indexes" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON]
+                               GoogleFirestoreAdminV1ListIndexesResponse
+
+-- | Lists composite indexes.
+--
+-- /See:/ 'projectsDatabasesCollectionGroupsIndexesList' smart constructor.
+data ProjectsDatabasesCollectionGroupsIndexesList = ProjectsDatabasesCollectionGroupsIndexesList'
+    { _pdcgilParent         :: !Text
+    , _pdcgilXgafv          :: !(Maybe Xgafv)
+    , _pdcgilUploadProtocol :: !(Maybe Text)
+    , _pdcgilAccessToken    :: !(Maybe Text)
+    , _pdcgilUploadType     :: !(Maybe Text)
+    , _pdcgilFilter         :: !(Maybe Text)
+    , _pdcgilPageToken      :: !(Maybe Text)
+    , _pdcgilPageSize       :: !(Maybe (Textual Int32))
+    , _pdcgilCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesCollectionGroupsIndexesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdcgilParent'
+--
+-- * 'pdcgilXgafv'
+--
+-- * 'pdcgilUploadProtocol'
+--
+-- * 'pdcgilAccessToken'
+--
+-- * 'pdcgilUploadType'
+--
+-- * 'pdcgilFilter'
+--
+-- * 'pdcgilPageToken'
+--
+-- * 'pdcgilPageSize'
+--
+-- * 'pdcgilCallback'
+projectsDatabasesCollectionGroupsIndexesList
+    :: Text -- ^ 'pdcgilParent'
+    -> ProjectsDatabasesCollectionGroupsIndexesList
+projectsDatabasesCollectionGroupsIndexesList pPdcgilParent_ =
+    ProjectsDatabasesCollectionGroupsIndexesList'
+    { _pdcgilParent = pPdcgilParent_
+    , _pdcgilXgafv = Nothing
+    , _pdcgilUploadProtocol = Nothing
+    , _pdcgilAccessToken = Nothing
+    , _pdcgilUploadType = Nothing
+    , _pdcgilFilter = Nothing
+    , _pdcgilPageToken = Nothing
+    , _pdcgilPageSize = Nothing
+    , _pdcgilCallback = Nothing
+    }
+
+-- | A parent name of the form
+-- \`projects\/{project_id}\/databases\/{database_id}\/collectionGroups\/{collection_id}\`
+pdcgilParent :: Lens' ProjectsDatabasesCollectionGroupsIndexesList Text
+pdcgilParent
+  = lens _pdcgilParent (\ s a -> s{_pdcgilParent = a})
+
+-- | V1 error format.
+pdcgilXgafv :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Xgafv)
+pdcgilXgafv
+  = lens _pdcgilXgafv (\ s a -> s{_pdcgilXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdcgilUploadProtocol :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Text)
+pdcgilUploadProtocol
+  = lens _pdcgilUploadProtocol
+      (\ s a -> s{_pdcgilUploadProtocol = a})
+
+-- | OAuth access token.
+pdcgilAccessToken :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Text)
+pdcgilAccessToken
+  = lens _pdcgilAccessToken
+      (\ s a -> s{_pdcgilAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdcgilUploadType :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Text)
+pdcgilUploadType
+  = lens _pdcgilUploadType
+      (\ s a -> s{_pdcgilUploadType = a})
+
+-- | The filter to apply to list results.
+pdcgilFilter :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Text)
+pdcgilFilter
+  = lens _pdcgilFilter (\ s a -> s{_pdcgilFilter = a})
+
+-- | A page token, returned from a previous call to
+-- FirestoreAdmin.ListIndexes, that may be used to get the next page of
+-- results.
+pdcgilPageToken :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Text)
+pdcgilPageToken
+  = lens _pdcgilPageToken
+      (\ s a -> s{_pdcgilPageToken = a})
+
+-- | The number of results to return.
+pdcgilPageSize :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Int32)
+pdcgilPageSize
+  = lens _pdcgilPageSize
+      (\ s a -> s{_pdcgilPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+pdcgilCallback :: Lens' ProjectsDatabasesCollectionGroupsIndexesList (Maybe Text)
+pdcgilCallback
+  = lens _pdcgilCallback
+      (\ s a -> s{_pdcgilCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesCollectionGroupsIndexesList where
+        type Rs ProjectsDatabasesCollectionGroupsIndexesList
+             = GoogleFirestoreAdminV1ListIndexesResponse
+        type Scopes
+               ProjectsDatabasesCollectionGroupsIndexesList
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesCollectionGroupsIndexesList'{..}
+          = go _pdcgilParent _pdcgilXgafv _pdcgilUploadProtocol
+              _pdcgilAccessToken
+              _pdcgilUploadType
+              _pdcgilFilter
+              _pdcgilPageToken
+              _pdcgilPageSize
+              _pdcgilCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesCollectionGroupsIndexesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/BatchGet.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/BatchGet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/BatchGet.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.BatchGet
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets multiple documents. Documents returned by this method are not
+-- guaranteed to be returned in the same order that they were requested.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.batchGet@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.BatchGet
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsBatchGetResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsBatchGet
+    , ProjectsDatabasesDocumentsBatchGet
+
+    -- * Request Lenses
+    , pddbgXgafv
+    , pddbgUploadProtocol
+    , pddbgDatabase
+    , pddbgAccessToken
+    , pddbgUploadType
+    , pddbgPayload
+    , pddbgCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.batchGet@ method which the
+-- 'ProjectsDatabasesDocumentsBatchGet' request conforms to.
+type ProjectsDatabasesDocumentsBatchGetResource =
+     "v1" :>
+       Capture "database" Text :>
+         "documents:batchGet" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] BatchGetDocumentsRequest :>
+                         Post '[JSON] BatchGetDocumentsResponse
+
+-- | Gets multiple documents. Documents returned by this method are not
+-- guaranteed to be returned in the same order that they were requested.
+--
+-- /See:/ 'projectsDatabasesDocumentsBatchGet' smart constructor.
+data ProjectsDatabasesDocumentsBatchGet = ProjectsDatabasesDocumentsBatchGet'
+    { _pddbgXgafv          :: !(Maybe Xgafv)
+    , _pddbgUploadProtocol :: !(Maybe Text)
+    , _pddbgDatabase       :: !Text
+    , _pddbgAccessToken    :: !(Maybe Text)
+    , _pddbgUploadType     :: !(Maybe Text)
+    , _pddbgPayload        :: !BatchGetDocumentsRequest
+    , _pddbgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsBatchGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddbgXgafv'
+--
+-- * 'pddbgUploadProtocol'
+--
+-- * 'pddbgDatabase'
+--
+-- * 'pddbgAccessToken'
+--
+-- * 'pddbgUploadType'
+--
+-- * 'pddbgPayload'
+--
+-- * 'pddbgCallback'
+projectsDatabasesDocumentsBatchGet
+    :: Text -- ^ 'pddbgDatabase'
+    -> BatchGetDocumentsRequest -- ^ 'pddbgPayload'
+    -> ProjectsDatabasesDocumentsBatchGet
+projectsDatabasesDocumentsBatchGet pPddbgDatabase_ pPddbgPayload_ =
+    ProjectsDatabasesDocumentsBatchGet'
+    { _pddbgXgafv = Nothing
+    , _pddbgUploadProtocol = Nothing
+    , _pddbgDatabase = pPddbgDatabase_
+    , _pddbgAccessToken = Nothing
+    , _pddbgUploadType = Nothing
+    , _pddbgPayload = pPddbgPayload_
+    , _pddbgCallback = Nothing
+    }
+
+-- | V1 error format.
+pddbgXgafv :: Lens' ProjectsDatabasesDocumentsBatchGet (Maybe Xgafv)
+pddbgXgafv
+  = lens _pddbgXgafv (\ s a -> s{_pddbgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddbgUploadProtocol :: Lens' ProjectsDatabasesDocumentsBatchGet (Maybe Text)
+pddbgUploadProtocol
+  = lens _pddbgUploadProtocol
+      (\ s a -> s{_pddbgUploadProtocol = a})
+
+-- | The database name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pddbgDatabase :: Lens' ProjectsDatabasesDocumentsBatchGet Text
+pddbgDatabase
+  = lens _pddbgDatabase
+      (\ s a -> s{_pddbgDatabase = a})
+
+-- | OAuth access token.
+pddbgAccessToken :: Lens' ProjectsDatabasesDocumentsBatchGet (Maybe Text)
+pddbgAccessToken
+  = lens _pddbgAccessToken
+      (\ s a -> s{_pddbgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddbgUploadType :: Lens' ProjectsDatabasesDocumentsBatchGet (Maybe Text)
+pddbgUploadType
+  = lens _pddbgUploadType
+      (\ s a -> s{_pddbgUploadType = a})
+
+-- | Multipart request metadata.
+pddbgPayload :: Lens' ProjectsDatabasesDocumentsBatchGet BatchGetDocumentsRequest
+pddbgPayload
+  = lens _pddbgPayload (\ s a -> s{_pddbgPayload = a})
+
+-- | JSONP
+pddbgCallback :: Lens' ProjectsDatabasesDocumentsBatchGet (Maybe Text)
+pddbgCallback
+  = lens _pddbgCallback
+      (\ s a -> s{_pddbgCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsBatchGet where
+        type Rs ProjectsDatabasesDocumentsBatchGet =
+             BatchGetDocumentsResponse
+        type Scopes ProjectsDatabasesDocumentsBatchGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsBatchGet'{..}
+          = go _pddbgDatabase _pddbgXgafv _pddbgUploadProtocol
+              _pddbgAccessToken
+              _pddbgUploadType
+              _pddbgCallback
+              (Just AltJSON)
+              _pddbgPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsBatchGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/BeginTransaction.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/BeginTransaction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/BeginTransaction.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.BeginTransaction
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a new transaction.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.beginTransaction@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.BeginTransaction
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsBeginTransactionResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsBeginTransaction
+    , ProjectsDatabasesDocumentsBeginTransaction
+
+    -- * Request Lenses
+    , pddbtXgafv
+    , pddbtUploadProtocol
+    , pddbtDatabase
+    , pddbtAccessToken
+    , pddbtUploadType
+    , pddbtPayload
+    , pddbtCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.beginTransaction@ method which the
+-- 'ProjectsDatabasesDocumentsBeginTransaction' request conforms to.
+type ProjectsDatabasesDocumentsBeginTransactionResource
+     =
+     "v1" :>
+       Capture "database" Text :>
+         "documents:beginTransaction" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] BeginTransactionRequest :>
+                         Post '[JSON] BeginTransactionResponse
+
+-- | Starts a new transaction.
+--
+-- /See:/ 'projectsDatabasesDocumentsBeginTransaction' smart constructor.
+data ProjectsDatabasesDocumentsBeginTransaction = ProjectsDatabasesDocumentsBeginTransaction'
+    { _pddbtXgafv          :: !(Maybe Xgafv)
+    , _pddbtUploadProtocol :: !(Maybe Text)
+    , _pddbtDatabase       :: !Text
+    , _pddbtAccessToken    :: !(Maybe Text)
+    , _pddbtUploadType     :: !(Maybe Text)
+    , _pddbtPayload        :: !BeginTransactionRequest
+    , _pddbtCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsBeginTransaction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddbtXgafv'
+--
+-- * 'pddbtUploadProtocol'
+--
+-- * 'pddbtDatabase'
+--
+-- * 'pddbtAccessToken'
+--
+-- * 'pddbtUploadType'
+--
+-- * 'pddbtPayload'
+--
+-- * 'pddbtCallback'
+projectsDatabasesDocumentsBeginTransaction
+    :: Text -- ^ 'pddbtDatabase'
+    -> BeginTransactionRequest -- ^ 'pddbtPayload'
+    -> ProjectsDatabasesDocumentsBeginTransaction
+projectsDatabasesDocumentsBeginTransaction pPddbtDatabase_ pPddbtPayload_ =
+    ProjectsDatabasesDocumentsBeginTransaction'
+    { _pddbtXgafv = Nothing
+    , _pddbtUploadProtocol = Nothing
+    , _pddbtDatabase = pPddbtDatabase_
+    , _pddbtAccessToken = Nothing
+    , _pddbtUploadType = Nothing
+    , _pddbtPayload = pPddbtPayload_
+    , _pddbtCallback = Nothing
+    }
+
+-- | V1 error format.
+pddbtXgafv :: Lens' ProjectsDatabasesDocumentsBeginTransaction (Maybe Xgafv)
+pddbtXgafv
+  = lens _pddbtXgafv (\ s a -> s{_pddbtXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddbtUploadProtocol :: Lens' ProjectsDatabasesDocumentsBeginTransaction (Maybe Text)
+pddbtUploadProtocol
+  = lens _pddbtUploadProtocol
+      (\ s a -> s{_pddbtUploadProtocol = a})
+
+-- | The database name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pddbtDatabase :: Lens' ProjectsDatabasesDocumentsBeginTransaction Text
+pddbtDatabase
+  = lens _pddbtDatabase
+      (\ s a -> s{_pddbtDatabase = a})
+
+-- | OAuth access token.
+pddbtAccessToken :: Lens' ProjectsDatabasesDocumentsBeginTransaction (Maybe Text)
+pddbtAccessToken
+  = lens _pddbtAccessToken
+      (\ s a -> s{_pddbtAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddbtUploadType :: Lens' ProjectsDatabasesDocumentsBeginTransaction (Maybe Text)
+pddbtUploadType
+  = lens _pddbtUploadType
+      (\ s a -> s{_pddbtUploadType = a})
+
+-- | Multipart request metadata.
+pddbtPayload :: Lens' ProjectsDatabasesDocumentsBeginTransaction BeginTransactionRequest
+pddbtPayload
+  = lens _pddbtPayload (\ s a -> s{_pddbtPayload = a})
+
+-- | JSONP
+pddbtCallback :: Lens' ProjectsDatabasesDocumentsBeginTransaction (Maybe Text)
+pddbtCallback
+  = lens _pddbtCallback
+      (\ s a -> s{_pddbtCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsBeginTransaction where
+        type Rs ProjectsDatabasesDocumentsBeginTransaction =
+             BeginTransactionResponse
+        type Scopes
+               ProjectsDatabasesDocumentsBeginTransaction
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesDocumentsBeginTransaction'{..}
+          = go _pddbtDatabase _pddbtXgafv _pddbtUploadProtocol
+              _pddbtAccessToken
+              _pddbtUploadType
+              _pddbtCallback
+              (Just AltJSON)
+              _pddbtPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesDocumentsBeginTransactionResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Commit.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Commit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Commit.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Commit
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Commits a transaction, while optionally updating documents.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.commit@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Commit
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsCommitResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsCommit
+    , ProjectsDatabasesDocumentsCommit
+
+    -- * Request Lenses
+    , pddcXgafv
+    , pddcUploadProtocol
+    , pddcDatabase
+    , pddcAccessToken
+    , pddcUploadType
+    , pddcPayload
+    , pddcCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.commit@ method which the
+-- 'ProjectsDatabasesDocumentsCommit' request conforms to.
+type ProjectsDatabasesDocumentsCommitResource =
+     "v1" :>
+       Capture "database" Text :>
+         "documents:commit" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CommitRequest :>
+                         Post '[JSON] CommitResponse
+
+-- | Commits a transaction, while optionally updating documents.
+--
+-- /See:/ 'projectsDatabasesDocumentsCommit' smart constructor.
+data ProjectsDatabasesDocumentsCommit = ProjectsDatabasesDocumentsCommit'
+    { _pddcXgafv          :: !(Maybe Xgafv)
+    , _pddcUploadProtocol :: !(Maybe Text)
+    , _pddcDatabase       :: !Text
+    , _pddcAccessToken    :: !(Maybe Text)
+    , _pddcUploadType     :: !(Maybe Text)
+    , _pddcPayload        :: !CommitRequest
+    , _pddcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsCommit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddcXgafv'
+--
+-- * 'pddcUploadProtocol'
+--
+-- * 'pddcDatabase'
+--
+-- * 'pddcAccessToken'
+--
+-- * 'pddcUploadType'
+--
+-- * 'pddcPayload'
+--
+-- * 'pddcCallback'
+projectsDatabasesDocumentsCommit
+    :: Text -- ^ 'pddcDatabase'
+    -> CommitRequest -- ^ 'pddcPayload'
+    -> ProjectsDatabasesDocumentsCommit
+projectsDatabasesDocumentsCommit pPddcDatabase_ pPddcPayload_ =
+    ProjectsDatabasesDocumentsCommit'
+    { _pddcXgafv = Nothing
+    , _pddcUploadProtocol = Nothing
+    , _pddcDatabase = pPddcDatabase_
+    , _pddcAccessToken = Nothing
+    , _pddcUploadType = Nothing
+    , _pddcPayload = pPddcPayload_
+    , _pddcCallback = Nothing
+    }
+
+-- | V1 error format.
+pddcXgafv :: Lens' ProjectsDatabasesDocumentsCommit (Maybe Xgafv)
+pddcXgafv
+  = lens _pddcXgafv (\ s a -> s{_pddcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddcUploadProtocol :: Lens' ProjectsDatabasesDocumentsCommit (Maybe Text)
+pddcUploadProtocol
+  = lens _pddcUploadProtocol
+      (\ s a -> s{_pddcUploadProtocol = a})
+
+-- | The database name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pddcDatabase :: Lens' ProjectsDatabasesDocumentsCommit Text
+pddcDatabase
+  = lens _pddcDatabase (\ s a -> s{_pddcDatabase = a})
+
+-- | OAuth access token.
+pddcAccessToken :: Lens' ProjectsDatabasesDocumentsCommit (Maybe Text)
+pddcAccessToken
+  = lens _pddcAccessToken
+      (\ s a -> s{_pddcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddcUploadType :: Lens' ProjectsDatabasesDocumentsCommit (Maybe Text)
+pddcUploadType
+  = lens _pddcUploadType
+      (\ s a -> s{_pddcUploadType = a})
+
+-- | Multipart request metadata.
+pddcPayload :: Lens' ProjectsDatabasesDocumentsCommit CommitRequest
+pddcPayload
+  = lens _pddcPayload (\ s a -> s{_pddcPayload = a})
+
+-- | JSONP
+pddcCallback :: Lens' ProjectsDatabasesDocumentsCommit (Maybe Text)
+pddcCallback
+  = lens _pddcCallback (\ s a -> s{_pddcCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsCommit where
+        type Rs ProjectsDatabasesDocumentsCommit =
+             CommitResponse
+        type Scopes ProjectsDatabasesDocumentsCommit =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsCommit'{..}
+          = go _pddcDatabase _pddcXgafv _pddcUploadProtocol
+              _pddcAccessToken
+              _pddcUploadType
+              _pddcCallback
+              (Just AltJSON)
+              _pddcPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsCommitResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/CreateDocument.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/CreateDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/CreateDocument.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.CreateDocument
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new document.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.createDocument@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.CreateDocument
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsCreateDocumentResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsCreateDocument
+    , ProjectsDatabasesDocumentsCreateDocument
+
+    -- * Request Lenses
+    , pddcdParent
+    , pddcdXgafv
+    , pddcdDocumentId
+    , pddcdUploadProtocol
+    , pddcdAccessToken
+    , pddcdCollectionId
+    , pddcdUploadType
+    , pddcdPayload
+    , pddcdMaskFieldPaths
+    , pddcdCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.createDocument@ method which the
+-- 'ProjectsDatabasesDocumentsCreateDocument' request conforms to.
+type ProjectsDatabasesDocumentsCreateDocumentResource
+     =
+     "v1" :>
+       Capture "parent" Text :>
+         Capture "collectionId" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "documentId" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParams "mask.fieldPaths" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Document :> Post '[JSON] Document
+
+-- | Creates a new document.
+--
+-- /See:/ 'projectsDatabasesDocumentsCreateDocument' smart constructor.
+data ProjectsDatabasesDocumentsCreateDocument = ProjectsDatabasesDocumentsCreateDocument'
+    { _pddcdParent         :: !Text
+    , _pddcdXgafv          :: !(Maybe Xgafv)
+    , _pddcdDocumentId     :: !(Maybe Text)
+    , _pddcdUploadProtocol :: !(Maybe Text)
+    , _pddcdAccessToken    :: !(Maybe Text)
+    , _pddcdCollectionId   :: !Text
+    , _pddcdUploadType     :: !(Maybe Text)
+    , _pddcdPayload        :: !Document
+    , _pddcdMaskFieldPaths :: !(Maybe [Text])
+    , _pddcdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsCreateDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddcdParent'
+--
+-- * 'pddcdXgafv'
+--
+-- * 'pddcdDocumentId'
+--
+-- * 'pddcdUploadProtocol'
+--
+-- * 'pddcdAccessToken'
+--
+-- * 'pddcdCollectionId'
+--
+-- * 'pddcdUploadType'
+--
+-- * 'pddcdPayload'
+--
+-- * 'pddcdMaskFieldPaths'
+--
+-- * 'pddcdCallback'
+projectsDatabasesDocumentsCreateDocument
+    :: Text -- ^ 'pddcdParent'
+    -> Text -- ^ 'pddcdCollectionId'
+    -> Document -- ^ 'pddcdPayload'
+    -> ProjectsDatabasesDocumentsCreateDocument
+projectsDatabasesDocumentsCreateDocument pPddcdParent_ pPddcdCollectionId_ pPddcdPayload_ =
+    ProjectsDatabasesDocumentsCreateDocument'
+    { _pddcdParent = pPddcdParent_
+    , _pddcdXgafv = Nothing
+    , _pddcdDocumentId = Nothing
+    , _pddcdUploadProtocol = Nothing
+    , _pddcdAccessToken = Nothing
+    , _pddcdCollectionId = pPddcdCollectionId_
+    , _pddcdUploadType = Nothing
+    , _pddcdPayload = pPddcdPayload_
+    , _pddcdMaskFieldPaths = Nothing
+    , _pddcdCallback = Nothing
+    }
+
+-- | The parent resource. For example:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\` or
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/chatrooms\/{chatroom_id}\`
+pddcdParent :: Lens' ProjectsDatabasesDocumentsCreateDocument Text
+pddcdParent
+  = lens _pddcdParent (\ s a -> s{_pddcdParent = a})
+
+-- | V1 error format.
+pddcdXgafv :: Lens' ProjectsDatabasesDocumentsCreateDocument (Maybe Xgafv)
+pddcdXgafv
+  = lens _pddcdXgafv (\ s a -> s{_pddcdXgafv = a})
+
+-- | The client-assigned document ID to use for this document. Optional. If
+-- not specified, an ID will be assigned by the service.
+pddcdDocumentId :: Lens' ProjectsDatabasesDocumentsCreateDocument (Maybe Text)
+pddcdDocumentId
+  = lens _pddcdDocumentId
+      (\ s a -> s{_pddcdDocumentId = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddcdUploadProtocol :: Lens' ProjectsDatabasesDocumentsCreateDocument (Maybe Text)
+pddcdUploadProtocol
+  = lens _pddcdUploadProtocol
+      (\ s a -> s{_pddcdUploadProtocol = a})
+
+-- | OAuth access token.
+pddcdAccessToken :: Lens' ProjectsDatabasesDocumentsCreateDocument (Maybe Text)
+pddcdAccessToken
+  = lens _pddcdAccessToken
+      (\ s a -> s{_pddcdAccessToken = a})
+
+-- | The collection ID, relative to \`parent\`, to list. For example:
+-- \`chatrooms\`.
+pddcdCollectionId :: Lens' ProjectsDatabasesDocumentsCreateDocument Text
+pddcdCollectionId
+  = lens _pddcdCollectionId
+      (\ s a -> s{_pddcdCollectionId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddcdUploadType :: Lens' ProjectsDatabasesDocumentsCreateDocument (Maybe Text)
+pddcdUploadType
+  = lens _pddcdUploadType
+      (\ s a -> s{_pddcdUploadType = a})
+
+-- | Multipart request metadata.
+pddcdPayload :: Lens' ProjectsDatabasesDocumentsCreateDocument Document
+pddcdPayload
+  = lens _pddcdPayload (\ s a -> s{_pddcdPayload = a})
+
+-- | The list of field paths in the mask. See Document.fields for a field
+-- path syntax reference.
+pddcdMaskFieldPaths :: Lens' ProjectsDatabasesDocumentsCreateDocument [Text]
+pddcdMaskFieldPaths
+  = lens _pddcdMaskFieldPaths
+      (\ s a -> s{_pddcdMaskFieldPaths = a})
+      . _Default
+      . _Coerce
+
+-- | JSONP
+pddcdCallback :: Lens' ProjectsDatabasesDocumentsCreateDocument (Maybe Text)
+pddcdCallback
+  = lens _pddcdCallback
+      (\ s a -> s{_pddcdCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsCreateDocument where
+        type Rs ProjectsDatabasesDocumentsCreateDocument =
+             Document
+        type Scopes ProjectsDatabasesDocumentsCreateDocument
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesDocumentsCreateDocument'{..}
+          = go _pddcdParent _pddcdCollectionId _pddcdXgafv
+              _pddcdDocumentId
+              _pddcdUploadProtocol
+              _pddcdAccessToken
+              _pddcdUploadType
+              (_pddcdMaskFieldPaths ^. _Default)
+              _pddcdCallback
+              (Just AltJSON)
+              _pddcdPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesDocumentsCreateDocumentResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Delete.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Delete.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a document.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.delete@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Delete
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsDeleteResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsDelete
+    , ProjectsDatabasesDocumentsDelete
+
+    -- * Request Lenses
+    , pdddXgafv
+    , pdddUploadProtocol
+    , pdddCurrentDocumentExists
+    , pdddAccessToken
+    , pdddUploadType
+    , pdddCurrentDocumentUpdateTime
+    , pdddName
+    , pdddCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.delete@ method which the
+-- 'ProjectsDatabasesDocumentsDelete' request conforms to.
+type ProjectsDatabasesDocumentsDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "currentDocument.exists" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "currentDocument.updateTime" DateTime' :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a document.
+--
+-- /See:/ 'projectsDatabasesDocumentsDelete' smart constructor.
+data ProjectsDatabasesDocumentsDelete = ProjectsDatabasesDocumentsDelete'
+    { _pdddXgafv                     :: !(Maybe Xgafv)
+    , _pdddUploadProtocol            :: !(Maybe Text)
+    , _pdddCurrentDocumentExists     :: !(Maybe Bool)
+    , _pdddAccessToken               :: !(Maybe Text)
+    , _pdddUploadType                :: !(Maybe Text)
+    , _pdddCurrentDocumentUpdateTime :: !(Maybe DateTime')
+    , _pdddName                      :: !Text
+    , _pdddCallback                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdddXgafv'
+--
+-- * 'pdddUploadProtocol'
+--
+-- * 'pdddCurrentDocumentExists'
+--
+-- * 'pdddAccessToken'
+--
+-- * 'pdddUploadType'
+--
+-- * 'pdddCurrentDocumentUpdateTime'
+--
+-- * 'pdddName'
+--
+-- * 'pdddCallback'
+projectsDatabasesDocumentsDelete
+    :: Text -- ^ 'pdddName'
+    -> ProjectsDatabasesDocumentsDelete
+projectsDatabasesDocumentsDelete pPdddName_ =
+    ProjectsDatabasesDocumentsDelete'
+    { _pdddXgafv = Nothing
+    , _pdddUploadProtocol = Nothing
+    , _pdddCurrentDocumentExists = Nothing
+    , _pdddAccessToken = Nothing
+    , _pdddUploadType = Nothing
+    , _pdddCurrentDocumentUpdateTime = Nothing
+    , _pdddName = pPdddName_
+    , _pdddCallback = Nothing
+    }
+
+-- | V1 error format.
+pdddXgafv :: Lens' ProjectsDatabasesDocumentsDelete (Maybe Xgafv)
+pdddXgafv
+  = lens _pdddXgafv (\ s a -> s{_pdddXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdddUploadProtocol :: Lens' ProjectsDatabasesDocumentsDelete (Maybe Text)
+pdddUploadProtocol
+  = lens _pdddUploadProtocol
+      (\ s a -> s{_pdddUploadProtocol = a})
+
+-- | When set to \`true\`, the target document must exist. When set to
+-- \`false\`, the target document must not exist.
+pdddCurrentDocumentExists :: Lens' ProjectsDatabasesDocumentsDelete (Maybe Bool)
+pdddCurrentDocumentExists
+  = lens _pdddCurrentDocumentExists
+      (\ s a -> s{_pdddCurrentDocumentExists = a})
+
+-- | OAuth access token.
+pdddAccessToken :: Lens' ProjectsDatabasesDocumentsDelete (Maybe Text)
+pdddAccessToken
+  = lens _pdddAccessToken
+      (\ s a -> s{_pdddAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdddUploadType :: Lens' ProjectsDatabasesDocumentsDelete (Maybe Text)
+pdddUploadType
+  = lens _pdddUploadType
+      (\ s a -> s{_pdddUploadType = a})
+
+-- | When set, the target document must exist and have been last updated at
+-- that time.
+pdddCurrentDocumentUpdateTime :: Lens' ProjectsDatabasesDocumentsDelete (Maybe UTCTime)
+pdddCurrentDocumentUpdateTime
+  = lens _pdddCurrentDocumentUpdateTime
+      (\ s a -> s{_pdddCurrentDocumentUpdateTime = a})
+      . mapping _DateTime
+
+-- | The resource name of the Document to delete. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+pdddName :: Lens' ProjectsDatabasesDocumentsDelete Text
+pdddName = lens _pdddName (\ s a -> s{_pdddName = a})
+
+-- | JSONP
+pdddCallback :: Lens' ProjectsDatabasesDocumentsDelete (Maybe Text)
+pdddCallback
+  = lens _pdddCallback (\ s a -> s{_pdddCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsDelete where
+        type Rs ProjectsDatabasesDocumentsDelete = Empty
+        type Scopes ProjectsDatabasesDocumentsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsDelete'{..}
+          = go _pdddName _pdddXgafv _pdddUploadProtocol
+              _pdddCurrentDocumentExists
+              _pdddAccessToken
+              _pdddUploadType
+              _pdddCurrentDocumentUpdateTime
+              _pdddCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Get.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Get.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a single document.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.get@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Get
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsGetResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsGet
+    , ProjectsDatabasesDocumentsGet
+
+    -- * Request Lenses
+    , pddgXgafv
+    , pddgReadTime
+    , pddgUploadProtocol
+    , pddgAccessToken
+    , pddgUploadType
+    , pddgTransaction
+    , pddgName
+    , pddgMaskFieldPaths
+    , pddgCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.get@ method which the
+-- 'ProjectsDatabasesDocumentsGet' request conforms to.
+type ProjectsDatabasesDocumentsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "readTime" DateTime' :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "transaction" Bytes :>
+                     QueryParams "mask.fieldPaths" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Document
+
+-- | Gets a single document.
+--
+-- /See:/ 'projectsDatabasesDocumentsGet' smart constructor.
+data ProjectsDatabasesDocumentsGet = ProjectsDatabasesDocumentsGet'
+    { _pddgXgafv          :: !(Maybe Xgafv)
+    , _pddgReadTime       :: !(Maybe DateTime')
+    , _pddgUploadProtocol :: !(Maybe Text)
+    , _pddgAccessToken    :: !(Maybe Text)
+    , _pddgUploadType     :: !(Maybe Text)
+    , _pddgTransaction    :: !(Maybe Bytes)
+    , _pddgName           :: !Text
+    , _pddgMaskFieldPaths :: !(Maybe [Text])
+    , _pddgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddgXgafv'
+--
+-- * 'pddgReadTime'
+--
+-- * 'pddgUploadProtocol'
+--
+-- * 'pddgAccessToken'
+--
+-- * 'pddgUploadType'
+--
+-- * 'pddgTransaction'
+--
+-- * 'pddgName'
+--
+-- * 'pddgMaskFieldPaths'
+--
+-- * 'pddgCallback'
+projectsDatabasesDocumentsGet
+    :: Text -- ^ 'pddgName'
+    -> ProjectsDatabasesDocumentsGet
+projectsDatabasesDocumentsGet pPddgName_ =
+    ProjectsDatabasesDocumentsGet'
+    { _pddgXgafv = Nothing
+    , _pddgReadTime = Nothing
+    , _pddgUploadProtocol = Nothing
+    , _pddgAccessToken = Nothing
+    , _pddgUploadType = Nothing
+    , _pddgTransaction = Nothing
+    , _pddgName = pPddgName_
+    , _pddgMaskFieldPaths = Nothing
+    , _pddgCallback = Nothing
+    }
+
+-- | V1 error format.
+pddgXgafv :: Lens' ProjectsDatabasesDocumentsGet (Maybe Xgafv)
+pddgXgafv
+  = lens _pddgXgafv (\ s a -> s{_pddgXgafv = a})
+
+-- | Reads the version of the document at the given time. This may not be
+-- older than 60 seconds.
+pddgReadTime :: Lens' ProjectsDatabasesDocumentsGet (Maybe UTCTime)
+pddgReadTime
+  = lens _pddgReadTime (\ s a -> s{_pddgReadTime = a})
+      . mapping _DateTime
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddgUploadProtocol :: Lens' ProjectsDatabasesDocumentsGet (Maybe Text)
+pddgUploadProtocol
+  = lens _pddgUploadProtocol
+      (\ s a -> s{_pddgUploadProtocol = a})
+
+-- | OAuth access token.
+pddgAccessToken :: Lens' ProjectsDatabasesDocumentsGet (Maybe Text)
+pddgAccessToken
+  = lens _pddgAccessToken
+      (\ s a -> s{_pddgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddgUploadType :: Lens' ProjectsDatabasesDocumentsGet (Maybe Text)
+pddgUploadType
+  = lens _pddgUploadType
+      (\ s a -> s{_pddgUploadType = a})
+
+-- | Reads the document in a transaction.
+pddgTransaction :: Lens' ProjectsDatabasesDocumentsGet (Maybe ByteString)
+pddgTransaction
+  = lens _pddgTransaction
+      (\ s a -> s{_pddgTransaction = a})
+      . mapping _Bytes
+
+-- | The resource name of the Document to get. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+pddgName :: Lens' ProjectsDatabasesDocumentsGet Text
+pddgName = lens _pddgName (\ s a -> s{_pddgName = a})
+
+-- | The list of field paths in the mask. See Document.fields for a field
+-- path syntax reference.
+pddgMaskFieldPaths :: Lens' ProjectsDatabasesDocumentsGet [Text]
+pddgMaskFieldPaths
+  = lens _pddgMaskFieldPaths
+      (\ s a -> s{_pddgMaskFieldPaths = a})
+      . _Default
+      . _Coerce
+
+-- | JSONP
+pddgCallback :: Lens' ProjectsDatabasesDocumentsGet (Maybe Text)
+pddgCallback
+  = lens _pddgCallback (\ s a -> s{_pddgCallback = a})
+
+instance GoogleRequest ProjectsDatabasesDocumentsGet
+         where
+        type Rs ProjectsDatabasesDocumentsGet = Document
+        type Scopes ProjectsDatabasesDocumentsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsGet'{..}
+          = go _pddgName _pddgXgafv _pddgReadTime
+              _pddgUploadProtocol
+              _pddgAccessToken
+              _pddgUploadType
+              _pddgTransaction
+              (_pddgMaskFieldPaths ^. _Default)
+              _pddgCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/List.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/List.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists documents.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.list@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.List
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsListResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsList
+    , ProjectsDatabasesDocumentsList
+
+    -- * Request Lenses
+    , pParent
+    , pXgafv
+    , pReadTime
+    , pUploadProtocol
+    , pOrderBy
+    , pAccessToken
+    , pCollectionId
+    , pUploadType
+    , pTransaction
+    , pShowMissing
+    , pPageToken
+    , pPageSize
+    , pMaskFieldPaths
+    , pCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.list@ method which the
+-- 'ProjectsDatabasesDocumentsList' request conforms to.
+type ProjectsDatabasesDocumentsListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         Capture "collectionId" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "readTime" DateTime' :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "orderBy" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "transaction" Bytes :>
+                         QueryParam "showMissing" Bool :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "pageSize" (Textual Int32) :>
+                               QueryParams "mask.fieldPaths" Text :>
+                                 QueryParam "callback" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] ListDocumentsResponse
+
+-- | Lists documents.
+--
+-- /See:/ 'projectsDatabasesDocumentsList' smart constructor.
+data ProjectsDatabasesDocumentsList = ProjectsDatabasesDocumentsList'
+    { _pParent         :: !Text
+    , _pXgafv          :: !(Maybe Xgafv)
+    , _pReadTime       :: !(Maybe DateTime')
+    , _pUploadProtocol :: !(Maybe Text)
+    , _pOrderBy        :: !(Maybe Text)
+    , _pAccessToken    :: !(Maybe Text)
+    , _pCollectionId   :: !Text
+    , _pUploadType     :: !(Maybe Text)
+    , _pTransaction    :: !(Maybe Bytes)
+    , _pShowMissing    :: !(Maybe Bool)
+    , _pPageToken      :: !(Maybe Text)
+    , _pPageSize       :: !(Maybe (Textual Int32))
+    , _pMaskFieldPaths :: !(Maybe [Text])
+    , _pCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pParent'
+--
+-- * 'pXgafv'
+--
+-- * 'pReadTime'
+--
+-- * 'pUploadProtocol'
+--
+-- * 'pOrderBy'
+--
+-- * 'pAccessToken'
+--
+-- * 'pCollectionId'
+--
+-- * 'pUploadType'
+--
+-- * 'pTransaction'
+--
+-- * 'pShowMissing'
+--
+-- * 'pPageToken'
+--
+-- * 'pPageSize'
+--
+-- * 'pMaskFieldPaths'
+--
+-- * 'pCallback'
+projectsDatabasesDocumentsList
+    :: Text -- ^ 'pParent'
+    -> Text -- ^ 'pCollectionId'
+    -> ProjectsDatabasesDocumentsList
+projectsDatabasesDocumentsList pPParent_ pPCollectionId_ =
+    ProjectsDatabasesDocumentsList'
+    { _pParent = pPParent_
+    , _pXgafv = Nothing
+    , _pReadTime = Nothing
+    , _pUploadProtocol = Nothing
+    , _pOrderBy = Nothing
+    , _pAccessToken = Nothing
+    , _pCollectionId = pPCollectionId_
+    , _pUploadType = Nothing
+    , _pTransaction = Nothing
+    , _pShowMissing = Nothing
+    , _pPageToken = Nothing
+    , _pPageSize = Nothing
+    , _pMaskFieldPaths = Nothing
+    , _pCallback = Nothing
+    }
+
+-- | The parent resource name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\` or
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+-- For example: \`projects\/my-project\/databases\/my-database\/documents\`
+-- or
+-- \`projects\/my-project\/databases\/my-database\/documents\/chatrooms\/my-chatroom\`
+pParent :: Lens' ProjectsDatabasesDocumentsList Text
+pParent = lens _pParent (\ s a -> s{_pParent = a})
+
+-- | V1 error format.
+pXgafv :: Lens' ProjectsDatabasesDocumentsList (Maybe Xgafv)
+pXgafv = lens _pXgafv (\ s a -> s{_pXgafv = a})
+
+-- | Reads documents as they were at the given time. This may not be older
+-- than 60 seconds.
+pReadTime :: Lens' ProjectsDatabasesDocumentsList (Maybe UTCTime)
+pReadTime
+  = lens _pReadTime (\ s a -> s{_pReadTime = a}) .
+      mapping _DateTime
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pUploadProtocol :: Lens' ProjectsDatabasesDocumentsList (Maybe Text)
+pUploadProtocol
+  = lens _pUploadProtocol
+      (\ s a -> s{_pUploadProtocol = a})
+
+-- | The order to sort results by. For example: \`priority desc, name\`.
+pOrderBy :: Lens' ProjectsDatabasesDocumentsList (Maybe Text)
+pOrderBy = lens _pOrderBy (\ s a -> s{_pOrderBy = a})
+
+-- | OAuth access token.
+pAccessToken :: Lens' ProjectsDatabasesDocumentsList (Maybe Text)
+pAccessToken
+  = lens _pAccessToken (\ s a -> s{_pAccessToken = a})
+
+-- | The collection ID, relative to \`parent\`, to list. For example:
+-- \`chatrooms\` or \`messages\`.
+pCollectionId :: Lens' ProjectsDatabasesDocumentsList Text
+pCollectionId
+  = lens _pCollectionId
+      (\ s a -> s{_pCollectionId = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pUploadType :: Lens' ProjectsDatabasesDocumentsList (Maybe Text)
+pUploadType
+  = lens _pUploadType (\ s a -> s{_pUploadType = a})
+
+-- | Reads documents in a transaction.
+pTransaction :: Lens' ProjectsDatabasesDocumentsList (Maybe ByteString)
+pTransaction
+  = lens _pTransaction (\ s a -> s{_pTransaction = a})
+      . mapping _Bytes
+
+-- | If the list should show missing documents. A missing document is a
+-- document that does not exist but has sub-documents. These documents will
+-- be returned with a key but will not have fields, Document.create_time,
+-- or Document.update_time set. Requests with \`show_missing\` may not
+-- specify \`where\` or \`order_by\`.
+pShowMissing :: Lens' ProjectsDatabasesDocumentsList (Maybe Bool)
+pShowMissing
+  = lens _pShowMissing (\ s a -> s{_pShowMissing = a})
+
+-- | The \`next_page_token\` value returned from a previous List request, if
+-- any.
+pPageToken :: Lens' ProjectsDatabasesDocumentsList (Maybe Text)
+pPageToken
+  = lens _pPageToken (\ s a -> s{_pPageToken = a})
+
+-- | The maximum number of documents to return.
+pPageSize :: Lens' ProjectsDatabasesDocumentsList (Maybe Int32)
+pPageSize
+  = lens _pPageSize (\ s a -> s{_pPageSize = a}) .
+      mapping _Coerce
+
+-- | The list of field paths in the mask. See Document.fields for a field
+-- path syntax reference.
+pMaskFieldPaths :: Lens' ProjectsDatabasesDocumentsList [Text]
+pMaskFieldPaths
+  = lens _pMaskFieldPaths
+      (\ s a -> s{_pMaskFieldPaths = a})
+      . _Default
+      . _Coerce
+
+-- | JSONP
+pCallback :: Lens' ProjectsDatabasesDocumentsList (Maybe Text)
+pCallback
+  = lens _pCallback (\ s a -> s{_pCallback = a})
+
+instance GoogleRequest ProjectsDatabasesDocumentsList
+         where
+        type Rs ProjectsDatabasesDocumentsList =
+             ListDocumentsResponse
+        type Scopes ProjectsDatabasesDocumentsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsList'{..}
+          = go _pParent _pCollectionId _pXgafv _pReadTime
+              _pUploadProtocol
+              _pOrderBy
+              _pAccessToken
+              _pUploadType
+              _pTransaction
+              _pShowMissing
+              _pPageToken
+              _pPageSize
+              (_pMaskFieldPaths ^. _Default)
+              _pCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/ListCollectionIds.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/ListCollectionIds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/ListCollectionIds.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.ListCollectionIds
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the collection IDs underneath a document.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.listCollectionIds@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.ListCollectionIds
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsListCollectionIdsResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsListCollectionIds
+    , ProjectsDatabasesDocumentsListCollectionIds
+
+    -- * Request Lenses
+    , pddlciParent
+    , pddlciXgafv
+    , pddlciUploadProtocol
+    , pddlciAccessToken
+    , pddlciUploadType
+    , pddlciPayload
+    , pddlciCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.listCollectionIds@ method which the
+-- 'ProjectsDatabasesDocumentsListCollectionIds' request conforms to.
+type ProjectsDatabasesDocumentsListCollectionIdsResource
+     =
+     "v1" :>
+       CaptureMode "parent" "listCollectionIds" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ListCollectionIdsRequest :>
+                       Post '[JSON] ListCollectionIdsResponse
+
+-- | Lists all the collection IDs underneath a document.
+--
+-- /See:/ 'projectsDatabasesDocumentsListCollectionIds' smart constructor.
+data ProjectsDatabasesDocumentsListCollectionIds = ProjectsDatabasesDocumentsListCollectionIds'
+    { _pddlciParent         :: !Text
+    , _pddlciXgafv          :: !(Maybe Xgafv)
+    , _pddlciUploadProtocol :: !(Maybe Text)
+    , _pddlciAccessToken    :: !(Maybe Text)
+    , _pddlciUploadType     :: !(Maybe Text)
+    , _pddlciPayload        :: !ListCollectionIdsRequest
+    , _pddlciCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsListCollectionIds' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddlciParent'
+--
+-- * 'pddlciXgafv'
+--
+-- * 'pddlciUploadProtocol'
+--
+-- * 'pddlciAccessToken'
+--
+-- * 'pddlciUploadType'
+--
+-- * 'pddlciPayload'
+--
+-- * 'pddlciCallback'
+projectsDatabasesDocumentsListCollectionIds
+    :: Text -- ^ 'pddlciParent'
+    -> ListCollectionIdsRequest -- ^ 'pddlciPayload'
+    -> ProjectsDatabasesDocumentsListCollectionIds
+projectsDatabasesDocumentsListCollectionIds pPddlciParent_ pPddlciPayload_ =
+    ProjectsDatabasesDocumentsListCollectionIds'
+    { _pddlciParent = pPddlciParent_
+    , _pddlciXgafv = Nothing
+    , _pddlciUploadProtocol = Nothing
+    , _pddlciAccessToken = Nothing
+    , _pddlciUploadType = Nothing
+    , _pddlciPayload = pPddlciPayload_
+    , _pddlciCallback = Nothing
+    }
+
+-- | The parent document. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+-- For example:
+-- \`projects\/my-project\/databases\/my-database\/documents\/chatrooms\/my-chatroom\`
+pddlciParent :: Lens' ProjectsDatabasesDocumentsListCollectionIds Text
+pddlciParent
+  = lens _pddlciParent (\ s a -> s{_pddlciParent = a})
+
+-- | V1 error format.
+pddlciXgafv :: Lens' ProjectsDatabasesDocumentsListCollectionIds (Maybe Xgafv)
+pddlciXgafv
+  = lens _pddlciXgafv (\ s a -> s{_pddlciXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddlciUploadProtocol :: Lens' ProjectsDatabasesDocumentsListCollectionIds (Maybe Text)
+pddlciUploadProtocol
+  = lens _pddlciUploadProtocol
+      (\ s a -> s{_pddlciUploadProtocol = a})
+
+-- | OAuth access token.
+pddlciAccessToken :: Lens' ProjectsDatabasesDocumentsListCollectionIds (Maybe Text)
+pddlciAccessToken
+  = lens _pddlciAccessToken
+      (\ s a -> s{_pddlciAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddlciUploadType :: Lens' ProjectsDatabasesDocumentsListCollectionIds (Maybe Text)
+pddlciUploadType
+  = lens _pddlciUploadType
+      (\ s a -> s{_pddlciUploadType = a})
+
+-- | Multipart request metadata.
+pddlciPayload :: Lens' ProjectsDatabasesDocumentsListCollectionIds ListCollectionIdsRequest
+pddlciPayload
+  = lens _pddlciPayload
+      (\ s a -> s{_pddlciPayload = a})
+
+-- | JSONP
+pddlciCallback :: Lens' ProjectsDatabasesDocumentsListCollectionIds (Maybe Text)
+pddlciCallback
+  = lens _pddlciCallback
+      (\ s a -> s{_pddlciCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsListCollectionIds where
+        type Rs ProjectsDatabasesDocumentsListCollectionIds =
+             ListCollectionIdsResponse
+        type Scopes
+               ProjectsDatabasesDocumentsListCollectionIds
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient
+          ProjectsDatabasesDocumentsListCollectionIds'{..}
+          = go _pddlciParent _pddlciXgafv _pddlciUploadProtocol
+              _pddlciAccessToken
+              _pddlciUploadType
+              _pddlciCallback
+              (Just AltJSON)
+              _pddlciPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsDatabasesDocumentsListCollectionIdsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Listen.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Listen.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Listen.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Listen
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Listens to changes.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.listen@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Listen
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsListenResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsListen
+    , ProjectsDatabasesDocumentsListen
+
+    -- * Request Lenses
+    , pddlXgafv
+    , pddlUploadProtocol
+    , pddlDatabase
+    , pddlAccessToken
+    , pddlUploadType
+    , pddlPayload
+    , pddlCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.listen@ method which the
+-- 'ProjectsDatabasesDocumentsListen' request conforms to.
+type ProjectsDatabasesDocumentsListenResource =
+     "v1" :>
+       Capture "database" Text :>
+         "documents:listen" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] ListenRequest :>
+                         Post '[JSON] ListenResponse
+
+-- | Listens to changes.
+--
+-- /See:/ 'projectsDatabasesDocumentsListen' smart constructor.
+data ProjectsDatabasesDocumentsListen = ProjectsDatabasesDocumentsListen'
+    { _pddlXgafv          :: !(Maybe Xgafv)
+    , _pddlUploadProtocol :: !(Maybe Text)
+    , _pddlDatabase       :: !Text
+    , _pddlAccessToken    :: !(Maybe Text)
+    , _pddlUploadType     :: !(Maybe Text)
+    , _pddlPayload        :: !ListenRequest
+    , _pddlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsListen' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddlXgafv'
+--
+-- * 'pddlUploadProtocol'
+--
+-- * 'pddlDatabase'
+--
+-- * 'pddlAccessToken'
+--
+-- * 'pddlUploadType'
+--
+-- * 'pddlPayload'
+--
+-- * 'pddlCallback'
+projectsDatabasesDocumentsListen
+    :: Text -- ^ 'pddlDatabase'
+    -> ListenRequest -- ^ 'pddlPayload'
+    -> ProjectsDatabasesDocumentsListen
+projectsDatabasesDocumentsListen pPddlDatabase_ pPddlPayload_ =
+    ProjectsDatabasesDocumentsListen'
+    { _pddlXgafv = Nothing
+    , _pddlUploadProtocol = Nothing
+    , _pddlDatabase = pPddlDatabase_
+    , _pddlAccessToken = Nothing
+    , _pddlUploadType = Nothing
+    , _pddlPayload = pPddlPayload_
+    , _pddlCallback = Nothing
+    }
+
+-- | V1 error format.
+pddlXgafv :: Lens' ProjectsDatabasesDocumentsListen (Maybe Xgafv)
+pddlXgafv
+  = lens _pddlXgafv (\ s a -> s{_pddlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddlUploadProtocol :: Lens' ProjectsDatabasesDocumentsListen (Maybe Text)
+pddlUploadProtocol
+  = lens _pddlUploadProtocol
+      (\ s a -> s{_pddlUploadProtocol = a})
+
+-- | The database name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pddlDatabase :: Lens' ProjectsDatabasesDocumentsListen Text
+pddlDatabase
+  = lens _pddlDatabase (\ s a -> s{_pddlDatabase = a})
+
+-- | OAuth access token.
+pddlAccessToken :: Lens' ProjectsDatabasesDocumentsListen (Maybe Text)
+pddlAccessToken
+  = lens _pddlAccessToken
+      (\ s a -> s{_pddlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddlUploadType :: Lens' ProjectsDatabasesDocumentsListen (Maybe Text)
+pddlUploadType
+  = lens _pddlUploadType
+      (\ s a -> s{_pddlUploadType = a})
+
+-- | Multipart request metadata.
+pddlPayload :: Lens' ProjectsDatabasesDocumentsListen ListenRequest
+pddlPayload
+  = lens _pddlPayload (\ s a -> s{_pddlPayload = a})
+
+-- | JSONP
+pddlCallback :: Lens' ProjectsDatabasesDocumentsListen (Maybe Text)
+pddlCallback
+  = lens _pddlCallback (\ s a -> s{_pddlCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsListen where
+        type Rs ProjectsDatabasesDocumentsListen =
+             ListenResponse
+        type Scopes ProjectsDatabasesDocumentsListen =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsListen'{..}
+          = go _pddlDatabase _pddlXgafv _pddlUploadProtocol
+              _pddlAccessToken
+              _pddlUploadType
+              _pddlCallback
+              (Just AltJSON)
+              _pddlPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsListenResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Patch.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Patch.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates or inserts a document.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.patch@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Patch
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsPatchResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsPatch
+    , ProjectsDatabasesDocumentsPatch
+
+    -- * Request Lenses
+    , pddpXgafv
+    , pddpUpdateMaskFieldPaths
+    , pddpUploadProtocol
+    , pddpCurrentDocumentExists
+    , pddpAccessToken
+    , pddpUploadType
+    , pddpPayload
+    , pddpCurrentDocumentUpdateTime
+    , pddpName
+    , pddpMaskFieldPaths
+    , pddpCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.patch@ method which the
+-- 'ProjectsDatabasesDocumentsPatch' request conforms to.
+type ProjectsDatabasesDocumentsPatchResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParams "updateMask.fieldPaths" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "currentDocument.exists" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "currentDocument.updateTime" DateTime' :>
+                       QueryParams "mask.fieldPaths" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] Document :> Patch '[JSON] Document
+
+-- | Updates or inserts a document.
+--
+-- /See:/ 'projectsDatabasesDocumentsPatch' smart constructor.
+data ProjectsDatabasesDocumentsPatch = ProjectsDatabasesDocumentsPatch'
+    { _pddpXgafv                     :: !(Maybe Xgafv)
+    , _pddpUpdateMaskFieldPaths      :: !(Maybe [Text])
+    , _pddpUploadProtocol            :: !(Maybe Text)
+    , _pddpCurrentDocumentExists     :: !(Maybe Bool)
+    , _pddpAccessToken               :: !(Maybe Text)
+    , _pddpUploadType                :: !(Maybe Text)
+    , _pddpPayload                   :: !Document
+    , _pddpCurrentDocumentUpdateTime :: !(Maybe DateTime')
+    , _pddpName                      :: !Text
+    , _pddpMaskFieldPaths            :: !(Maybe [Text])
+    , _pddpCallback                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddpXgafv'
+--
+-- * 'pddpUpdateMaskFieldPaths'
+--
+-- * 'pddpUploadProtocol'
+--
+-- * 'pddpCurrentDocumentExists'
+--
+-- * 'pddpAccessToken'
+--
+-- * 'pddpUploadType'
+--
+-- * 'pddpPayload'
+--
+-- * 'pddpCurrentDocumentUpdateTime'
+--
+-- * 'pddpName'
+--
+-- * 'pddpMaskFieldPaths'
+--
+-- * 'pddpCallback'
+projectsDatabasesDocumentsPatch
+    :: Document -- ^ 'pddpPayload'
+    -> Text -- ^ 'pddpName'
+    -> ProjectsDatabasesDocumentsPatch
+projectsDatabasesDocumentsPatch pPddpPayload_ pPddpName_ =
+    ProjectsDatabasesDocumentsPatch'
+    { _pddpXgafv = Nothing
+    , _pddpUpdateMaskFieldPaths = Nothing
+    , _pddpUploadProtocol = Nothing
+    , _pddpCurrentDocumentExists = Nothing
+    , _pddpAccessToken = Nothing
+    , _pddpUploadType = Nothing
+    , _pddpPayload = pPddpPayload_
+    , _pddpCurrentDocumentUpdateTime = Nothing
+    , _pddpName = pPddpName_
+    , _pddpMaskFieldPaths = Nothing
+    , _pddpCallback = Nothing
+    }
+
+-- | V1 error format.
+pddpXgafv :: Lens' ProjectsDatabasesDocumentsPatch (Maybe Xgafv)
+pddpXgafv
+  = lens _pddpXgafv (\ s a -> s{_pddpXgafv = a})
+
+-- | The list of field paths in the mask. See Document.fields for a field
+-- path syntax reference.
+pddpUpdateMaskFieldPaths :: Lens' ProjectsDatabasesDocumentsPatch [Text]
+pddpUpdateMaskFieldPaths
+  = lens _pddpUpdateMaskFieldPaths
+      (\ s a -> s{_pddpUpdateMaskFieldPaths = a})
+      . _Default
+      . _Coerce
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddpUploadProtocol :: Lens' ProjectsDatabasesDocumentsPatch (Maybe Text)
+pddpUploadProtocol
+  = lens _pddpUploadProtocol
+      (\ s a -> s{_pddpUploadProtocol = a})
+
+-- | When set to \`true\`, the target document must exist. When set to
+-- \`false\`, the target document must not exist.
+pddpCurrentDocumentExists :: Lens' ProjectsDatabasesDocumentsPatch (Maybe Bool)
+pddpCurrentDocumentExists
+  = lens _pddpCurrentDocumentExists
+      (\ s a -> s{_pddpCurrentDocumentExists = a})
+
+-- | OAuth access token.
+pddpAccessToken :: Lens' ProjectsDatabasesDocumentsPatch (Maybe Text)
+pddpAccessToken
+  = lens _pddpAccessToken
+      (\ s a -> s{_pddpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddpUploadType :: Lens' ProjectsDatabasesDocumentsPatch (Maybe Text)
+pddpUploadType
+  = lens _pddpUploadType
+      (\ s a -> s{_pddpUploadType = a})
+
+-- | Multipart request metadata.
+pddpPayload :: Lens' ProjectsDatabasesDocumentsPatch Document
+pddpPayload
+  = lens _pddpPayload (\ s a -> s{_pddpPayload = a})
+
+-- | When set, the target document must exist and have been last updated at
+-- that time.
+pddpCurrentDocumentUpdateTime :: Lens' ProjectsDatabasesDocumentsPatch (Maybe UTCTime)
+pddpCurrentDocumentUpdateTime
+  = lens _pddpCurrentDocumentUpdateTime
+      (\ s a -> s{_pddpCurrentDocumentUpdateTime = a})
+      . mapping _DateTime
+
+-- | The resource name of the document, for example
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+pddpName :: Lens' ProjectsDatabasesDocumentsPatch Text
+pddpName = lens _pddpName (\ s a -> s{_pddpName = a})
+
+-- | The list of field paths in the mask. See Document.fields for a field
+-- path syntax reference.
+pddpMaskFieldPaths :: Lens' ProjectsDatabasesDocumentsPatch [Text]
+pddpMaskFieldPaths
+  = lens _pddpMaskFieldPaths
+      (\ s a -> s{_pddpMaskFieldPaths = a})
+      . _Default
+      . _Coerce
+
+-- | JSONP
+pddpCallback :: Lens' ProjectsDatabasesDocumentsPatch (Maybe Text)
+pddpCallback
+  = lens _pddpCallback (\ s a -> s{_pddpCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsPatch where
+        type Rs ProjectsDatabasesDocumentsPatch = Document
+        type Scopes ProjectsDatabasesDocumentsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsPatch'{..}
+          = go _pddpName _pddpXgafv
+              (_pddpUpdateMaskFieldPaths ^. _Default)
+              _pddpUploadProtocol
+              _pddpCurrentDocumentExists
+              _pddpAccessToken
+              _pddpUploadType
+              _pddpCurrentDocumentUpdateTime
+              (_pddpMaskFieldPaths ^. _Default)
+              _pddpCallback
+              (Just AltJSON)
+              _pddpPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Rollback.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Rollback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Rollback.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Rollback
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rolls back a transaction.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.rollback@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Rollback
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsRollbackResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsRollback
+    , ProjectsDatabasesDocumentsRollback
+
+    -- * Request Lenses
+    , pddrXgafv
+    , pddrUploadProtocol
+    , pddrDatabase
+    , pddrAccessToken
+    , pddrUploadType
+    , pddrPayload
+    , pddrCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.rollback@ method which the
+-- 'ProjectsDatabasesDocumentsRollback' request conforms to.
+type ProjectsDatabasesDocumentsRollbackResource =
+     "v1" :>
+       Capture "database" Text :>
+         "documents:rollback" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] RollbackRequest :> Post '[JSON] Empty
+
+-- | Rolls back a transaction.
+--
+-- /See:/ 'projectsDatabasesDocumentsRollback' smart constructor.
+data ProjectsDatabasesDocumentsRollback = ProjectsDatabasesDocumentsRollback'
+    { _pddrXgafv          :: !(Maybe Xgafv)
+    , _pddrUploadProtocol :: !(Maybe Text)
+    , _pddrDatabase       :: !Text
+    , _pddrAccessToken    :: !(Maybe Text)
+    , _pddrUploadType     :: !(Maybe Text)
+    , _pddrPayload        :: !RollbackRequest
+    , _pddrCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsRollback' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddrXgafv'
+--
+-- * 'pddrUploadProtocol'
+--
+-- * 'pddrDatabase'
+--
+-- * 'pddrAccessToken'
+--
+-- * 'pddrUploadType'
+--
+-- * 'pddrPayload'
+--
+-- * 'pddrCallback'
+projectsDatabasesDocumentsRollback
+    :: Text -- ^ 'pddrDatabase'
+    -> RollbackRequest -- ^ 'pddrPayload'
+    -> ProjectsDatabasesDocumentsRollback
+projectsDatabasesDocumentsRollback pPddrDatabase_ pPddrPayload_ =
+    ProjectsDatabasesDocumentsRollback'
+    { _pddrXgafv = Nothing
+    , _pddrUploadProtocol = Nothing
+    , _pddrDatabase = pPddrDatabase_
+    , _pddrAccessToken = Nothing
+    , _pddrUploadType = Nothing
+    , _pddrPayload = pPddrPayload_
+    , _pddrCallback = Nothing
+    }
+
+-- | V1 error format.
+pddrXgafv :: Lens' ProjectsDatabasesDocumentsRollback (Maybe Xgafv)
+pddrXgafv
+  = lens _pddrXgafv (\ s a -> s{_pddrXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddrUploadProtocol :: Lens' ProjectsDatabasesDocumentsRollback (Maybe Text)
+pddrUploadProtocol
+  = lens _pddrUploadProtocol
+      (\ s a -> s{_pddrUploadProtocol = a})
+
+-- | The database name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pddrDatabase :: Lens' ProjectsDatabasesDocumentsRollback Text
+pddrDatabase
+  = lens _pddrDatabase (\ s a -> s{_pddrDatabase = a})
+
+-- | OAuth access token.
+pddrAccessToken :: Lens' ProjectsDatabasesDocumentsRollback (Maybe Text)
+pddrAccessToken
+  = lens _pddrAccessToken
+      (\ s a -> s{_pddrAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddrUploadType :: Lens' ProjectsDatabasesDocumentsRollback (Maybe Text)
+pddrUploadType
+  = lens _pddrUploadType
+      (\ s a -> s{_pddrUploadType = a})
+
+-- | Multipart request metadata.
+pddrPayload :: Lens' ProjectsDatabasesDocumentsRollback RollbackRequest
+pddrPayload
+  = lens _pddrPayload (\ s a -> s{_pddrPayload = a})
+
+-- | JSONP
+pddrCallback :: Lens' ProjectsDatabasesDocumentsRollback (Maybe Text)
+pddrCallback
+  = lens _pddrCallback (\ s a -> s{_pddrCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsRollback where
+        type Rs ProjectsDatabasesDocumentsRollback = Empty
+        type Scopes ProjectsDatabasesDocumentsRollback =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsRollback'{..}
+          = go _pddrDatabase _pddrXgafv _pddrUploadProtocol
+              _pddrAccessToken
+              _pddrUploadType
+              _pddrCallback
+              (Just AltJSON)
+              _pddrPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsRollbackResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/RunQuery.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/RunQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/RunQuery.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.RunQuery
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Runs a query.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.runQuery@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.RunQuery
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsRunQueryResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsRunQuery
+    , ProjectsDatabasesDocumentsRunQuery
+
+    -- * Request Lenses
+    , pddrqParent
+    , pddrqXgafv
+    , pddrqUploadProtocol
+    , pddrqAccessToken
+    , pddrqUploadType
+    , pddrqPayload
+    , pddrqCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.runQuery@ method which the
+-- 'ProjectsDatabasesDocumentsRunQuery' request conforms to.
+type ProjectsDatabasesDocumentsRunQueryResource =
+     "v1" :>
+       CaptureMode "parent" "runQuery" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] RunQueryRequest :>
+                       Post '[JSON] RunQueryResponse
+
+-- | Runs a query.
+--
+-- /See:/ 'projectsDatabasesDocumentsRunQuery' smart constructor.
+data ProjectsDatabasesDocumentsRunQuery = ProjectsDatabasesDocumentsRunQuery'
+    { _pddrqParent         :: !Text
+    , _pddrqXgafv          :: !(Maybe Xgafv)
+    , _pddrqUploadProtocol :: !(Maybe Text)
+    , _pddrqAccessToken    :: !(Maybe Text)
+    , _pddrqUploadType     :: !(Maybe Text)
+    , _pddrqPayload        :: !RunQueryRequest
+    , _pddrqCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsRunQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddrqParent'
+--
+-- * 'pddrqXgafv'
+--
+-- * 'pddrqUploadProtocol'
+--
+-- * 'pddrqAccessToken'
+--
+-- * 'pddrqUploadType'
+--
+-- * 'pddrqPayload'
+--
+-- * 'pddrqCallback'
+projectsDatabasesDocumentsRunQuery
+    :: Text -- ^ 'pddrqParent'
+    -> RunQueryRequest -- ^ 'pddrqPayload'
+    -> ProjectsDatabasesDocumentsRunQuery
+projectsDatabasesDocumentsRunQuery pPddrqParent_ pPddrqPayload_ =
+    ProjectsDatabasesDocumentsRunQuery'
+    { _pddrqParent = pPddrqParent_
+    , _pddrqXgafv = Nothing
+    , _pddrqUploadProtocol = Nothing
+    , _pddrqAccessToken = Nothing
+    , _pddrqUploadType = Nothing
+    , _pddrqPayload = pPddrqPayload_
+    , _pddrqCallback = Nothing
+    }
+
+-- | The parent resource name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\` or
+-- \`projects\/{project_id}\/databases\/{database_id}\/documents\/{document_path}\`.
+-- For example: \`projects\/my-project\/databases\/my-database\/documents\`
+-- or
+-- \`projects\/my-project\/databases\/my-database\/documents\/chatrooms\/my-chatroom\`
+pddrqParent :: Lens' ProjectsDatabasesDocumentsRunQuery Text
+pddrqParent
+  = lens _pddrqParent (\ s a -> s{_pddrqParent = a})
+
+-- | V1 error format.
+pddrqXgafv :: Lens' ProjectsDatabasesDocumentsRunQuery (Maybe Xgafv)
+pddrqXgafv
+  = lens _pddrqXgafv (\ s a -> s{_pddrqXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddrqUploadProtocol :: Lens' ProjectsDatabasesDocumentsRunQuery (Maybe Text)
+pddrqUploadProtocol
+  = lens _pddrqUploadProtocol
+      (\ s a -> s{_pddrqUploadProtocol = a})
+
+-- | OAuth access token.
+pddrqAccessToken :: Lens' ProjectsDatabasesDocumentsRunQuery (Maybe Text)
+pddrqAccessToken
+  = lens _pddrqAccessToken
+      (\ s a -> s{_pddrqAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddrqUploadType :: Lens' ProjectsDatabasesDocumentsRunQuery (Maybe Text)
+pddrqUploadType
+  = lens _pddrqUploadType
+      (\ s a -> s{_pddrqUploadType = a})
+
+-- | Multipart request metadata.
+pddrqPayload :: Lens' ProjectsDatabasesDocumentsRunQuery RunQueryRequest
+pddrqPayload
+  = lens _pddrqPayload (\ s a -> s{_pddrqPayload = a})
+
+-- | JSONP
+pddrqCallback :: Lens' ProjectsDatabasesDocumentsRunQuery (Maybe Text)
+pddrqCallback
+  = lens _pddrqCallback
+      (\ s a -> s{_pddrqCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsRunQuery where
+        type Rs ProjectsDatabasesDocumentsRunQuery =
+             RunQueryResponse
+        type Scopes ProjectsDatabasesDocumentsRunQuery =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsRunQuery'{..}
+          = go _pddrqParent _pddrqXgafv _pddrqUploadProtocol
+              _pddrqAccessToken
+              _pddrqUploadType
+              _pddrqCallback
+              (Just AltJSON)
+              _pddrqPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsRunQueryResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Write.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Write.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Documents/Write.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Documents.Write
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Streams batches of document updates and deletes, in order.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.documents.write@.
+module Network.Google.Resource.FireStore.Projects.Databases.Documents.Write
+    (
+    -- * REST Resource
+      ProjectsDatabasesDocumentsWriteResource
+
+    -- * Creating a Request
+    , projectsDatabasesDocumentsWrite
+    , ProjectsDatabasesDocumentsWrite
+
+    -- * Request Lenses
+    , pddwXgafv
+    , pddwUploadProtocol
+    , pddwDatabase
+    , pddwAccessToken
+    , pddwUploadType
+    , pddwPayload
+    , pddwCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.documents.write@ method which the
+-- 'ProjectsDatabasesDocumentsWrite' request conforms to.
+type ProjectsDatabasesDocumentsWriteResource =
+     "v1" :>
+       Capture "database" Text :>
+         "documents:write" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] WriteRequest :>
+                         Post '[JSON] WriteResponse
+
+-- | Streams batches of document updates and deletes, in order.
+--
+-- /See:/ 'projectsDatabasesDocumentsWrite' smart constructor.
+data ProjectsDatabasesDocumentsWrite = ProjectsDatabasesDocumentsWrite'
+    { _pddwXgafv          :: !(Maybe Xgafv)
+    , _pddwUploadProtocol :: !(Maybe Text)
+    , _pddwDatabase       :: !Text
+    , _pddwAccessToken    :: !(Maybe Text)
+    , _pddwUploadType     :: !(Maybe Text)
+    , _pddwPayload        :: !WriteRequest
+    , _pddwCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesDocumentsWrite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddwXgafv'
+--
+-- * 'pddwUploadProtocol'
+--
+-- * 'pddwDatabase'
+--
+-- * 'pddwAccessToken'
+--
+-- * 'pddwUploadType'
+--
+-- * 'pddwPayload'
+--
+-- * 'pddwCallback'
+projectsDatabasesDocumentsWrite
+    :: Text -- ^ 'pddwDatabase'
+    -> WriteRequest -- ^ 'pddwPayload'
+    -> ProjectsDatabasesDocumentsWrite
+projectsDatabasesDocumentsWrite pPddwDatabase_ pPddwPayload_ =
+    ProjectsDatabasesDocumentsWrite'
+    { _pddwXgafv = Nothing
+    , _pddwUploadProtocol = Nothing
+    , _pddwDatabase = pPddwDatabase_
+    , _pddwAccessToken = Nothing
+    , _pddwUploadType = Nothing
+    , _pddwPayload = pPddwPayload_
+    , _pddwCallback = Nothing
+    }
+
+-- | V1 error format.
+pddwXgafv :: Lens' ProjectsDatabasesDocumentsWrite (Maybe Xgafv)
+pddwXgafv
+  = lens _pddwXgafv (\ s a -> s{_pddwXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pddwUploadProtocol :: Lens' ProjectsDatabasesDocumentsWrite (Maybe Text)
+pddwUploadProtocol
+  = lens _pddwUploadProtocol
+      (\ s a -> s{_pddwUploadProtocol = a})
+
+-- | The database name. In the format:
+-- \`projects\/{project_id}\/databases\/{database_id}\`. This is only
+-- required in the first message.
+pddwDatabase :: Lens' ProjectsDatabasesDocumentsWrite Text
+pddwDatabase
+  = lens _pddwDatabase (\ s a -> s{_pddwDatabase = a})
+
+-- | OAuth access token.
+pddwAccessToken :: Lens' ProjectsDatabasesDocumentsWrite (Maybe Text)
+pddwAccessToken
+  = lens _pddwAccessToken
+      (\ s a -> s{_pddwAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pddwUploadType :: Lens' ProjectsDatabasesDocumentsWrite (Maybe Text)
+pddwUploadType
+  = lens _pddwUploadType
+      (\ s a -> s{_pddwUploadType = a})
+
+-- | Multipart request metadata.
+pddwPayload :: Lens' ProjectsDatabasesDocumentsWrite WriteRequest
+pddwPayload
+  = lens _pddwPayload (\ s a -> s{_pddwPayload = a})
+
+-- | JSONP
+pddwCallback :: Lens' ProjectsDatabasesDocumentsWrite (Maybe Text)
+pddwCallback
+  = lens _pddwCallback (\ s a -> s{_pddwCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesDocumentsWrite where
+        type Rs ProjectsDatabasesDocumentsWrite =
+             WriteResponse
+        type Scopes ProjectsDatabasesDocumentsWrite =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesDocumentsWrite'{..}
+          = go _pddwDatabase _pddwXgafv _pddwUploadProtocol
+              _pddwAccessToken
+              _pddwUploadType
+              _pddwCallback
+              (Just AltJSON)
+              _pddwPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesDocumentsWriteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/ExportDocuments.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/ExportDocuments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/ExportDocuments.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.ExportDocuments
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports a copy of all or a subset of documents from Google Cloud
+-- Firestore to another storage system, such as Google Cloud Storage.
+-- Recent updates to documents may not be reflected in the export. The
+-- export occurs in the background and its progress can be monitored and
+-- managed via the Operation resource that is created. The output of an
+-- export may only be used once the associated operation is done. If an
+-- export operation is cancelled before completion it may leave partial
+-- data behind in Google Cloud Storage.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.exportDocuments@.
+module Network.Google.Resource.FireStore.Projects.Databases.ExportDocuments
+    (
+    -- * REST Resource
+      ProjectsDatabasesExportDocumentsResource
+
+    -- * Creating a Request
+    , projectsDatabasesExportDocuments
+    , ProjectsDatabasesExportDocuments
+
+    -- * Request Lenses
+    , pdedXgafv
+    , pdedUploadProtocol
+    , pdedAccessToken
+    , pdedUploadType
+    , pdedPayload
+    , pdedName
+    , pdedCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.exportDocuments@ method which the
+-- 'ProjectsDatabasesExportDocuments' request conforms to.
+type ProjectsDatabasesExportDocumentsResource =
+     "v1" :>
+       CaptureMode "name" "exportDocuments" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleFirestoreAdminV1ExportDocumentsRequest
+                       :> Post '[JSON] GoogleLongrunningOperation
+
+-- | Exports a copy of all or a subset of documents from Google Cloud
+-- Firestore to another storage system, such as Google Cloud Storage.
+-- Recent updates to documents may not be reflected in the export. The
+-- export occurs in the background and its progress can be monitored and
+-- managed via the Operation resource that is created. The output of an
+-- export may only be used once the associated operation is done. If an
+-- export operation is cancelled before completion it may leave partial
+-- data behind in Google Cloud Storage.
+--
+-- /See:/ 'projectsDatabasesExportDocuments' smart constructor.
+data ProjectsDatabasesExportDocuments = ProjectsDatabasesExportDocuments'
+    { _pdedXgafv          :: !(Maybe Xgafv)
+    , _pdedUploadProtocol :: !(Maybe Text)
+    , _pdedAccessToken    :: !(Maybe Text)
+    , _pdedUploadType     :: !(Maybe Text)
+    , _pdedPayload        :: !GoogleFirestoreAdminV1ExportDocumentsRequest
+    , _pdedName           :: !Text
+    , _pdedCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesExportDocuments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdedXgafv'
+--
+-- * 'pdedUploadProtocol'
+--
+-- * 'pdedAccessToken'
+--
+-- * 'pdedUploadType'
+--
+-- * 'pdedPayload'
+--
+-- * 'pdedName'
+--
+-- * 'pdedCallback'
+projectsDatabasesExportDocuments
+    :: GoogleFirestoreAdminV1ExportDocumentsRequest -- ^ 'pdedPayload'
+    -> Text -- ^ 'pdedName'
+    -> ProjectsDatabasesExportDocuments
+projectsDatabasesExportDocuments pPdedPayload_ pPdedName_ =
+    ProjectsDatabasesExportDocuments'
+    { _pdedXgafv = Nothing
+    , _pdedUploadProtocol = Nothing
+    , _pdedAccessToken = Nothing
+    , _pdedUploadType = Nothing
+    , _pdedPayload = pPdedPayload_
+    , _pdedName = pPdedName_
+    , _pdedCallback = Nothing
+    }
+
+-- | V1 error format.
+pdedXgafv :: Lens' ProjectsDatabasesExportDocuments (Maybe Xgafv)
+pdedXgafv
+  = lens _pdedXgafv (\ s a -> s{_pdedXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdedUploadProtocol :: Lens' ProjectsDatabasesExportDocuments (Maybe Text)
+pdedUploadProtocol
+  = lens _pdedUploadProtocol
+      (\ s a -> s{_pdedUploadProtocol = a})
+
+-- | OAuth access token.
+pdedAccessToken :: Lens' ProjectsDatabasesExportDocuments (Maybe Text)
+pdedAccessToken
+  = lens _pdedAccessToken
+      (\ s a -> s{_pdedAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdedUploadType :: Lens' ProjectsDatabasesExportDocuments (Maybe Text)
+pdedUploadType
+  = lens _pdedUploadType
+      (\ s a -> s{_pdedUploadType = a})
+
+-- | Multipart request metadata.
+pdedPayload :: Lens' ProjectsDatabasesExportDocuments GoogleFirestoreAdminV1ExportDocumentsRequest
+pdedPayload
+  = lens _pdedPayload (\ s a -> s{_pdedPayload = a})
+
+-- | Database to export. Should be of the form:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pdedName :: Lens' ProjectsDatabasesExportDocuments Text
+pdedName = lens _pdedName (\ s a -> s{_pdedName = a})
+
+-- | JSONP
+pdedCallback :: Lens' ProjectsDatabasesExportDocuments (Maybe Text)
+pdedCallback
+  = lens _pdedCallback (\ s a -> s{_pdedCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesExportDocuments where
+        type Rs ProjectsDatabasesExportDocuments =
+             GoogleLongrunningOperation
+        type Scopes ProjectsDatabasesExportDocuments =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesExportDocuments'{..}
+          = go _pdedName _pdedXgafv _pdedUploadProtocol
+              _pdedAccessToken
+              _pdedUploadType
+              _pdedCallback
+              (Just AltJSON)
+              _pdedPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesExportDocumentsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/ImportDocuments.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/ImportDocuments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/ImportDocuments.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.ImportDocuments
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports documents into Google Cloud Firestore. Existing documents with
+-- the same name are overwritten. The import occurs in the background and
+-- its progress can be monitored and managed via the Operation resource
+-- that is created. If an ImportDocuments operation is cancelled, it is
+-- possible that a subset of the data has already been imported to Cloud
+-- Firestore.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.importDocuments@.
+module Network.Google.Resource.FireStore.Projects.Databases.ImportDocuments
+    (
+    -- * REST Resource
+      ProjectsDatabasesImportDocumentsResource
+
+    -- * Creating a Request
+    , projectsDatabasesImportDocuments
+    , ProjectsDatabasesImportDocuments
+
+    -- * Request Lenses
+    , pdidXgafv
+    , pdidUploadProtocol
+    , pdidAccessToken
+    , pdidUploadType
+    , pdidPayload
+    , pdidName
+    , pdidCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.importDocuments@ method which the
+-- 'ProjectsDatabasesImportDocuments' request conforms to.
+type ProjectsDatabasesImportDocumentsResource =
+     "v1" :>
+       CaptureMode "name" "importDocuments" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleFirestoreAdminV1ImportDocumentsRequest
+                       :> Post '[JSON] GoogleLongrunningOperation
+
+-- | Imports documents into Google Cloud Firestore. Existing documents with
+-- the same name are overwritten. The import occurs in the background and
+-- its progress can be monitored and managed via the Operation resource
+-- that is created. If an ImportDocuments operation is cancelled, it is
+-- possible that a subset of the data has already been imported to Cloud
+-- Firestore.
+--
+-- /See:/ 'projectsDatabasesImportDocuments' smart constructor.
+data ProjectsDatabasesImportDocuments = ProjectsDatabasesImportDocuments'
+    { _pdidXgafv          :: !(Maybe Xgafv)
+    , _pdidUploadProtocol :: !(Maybe Text)
+    , _pdidAccessToken    :: !(Maybe Text)
+    , _pdidUploadType     :: !(Maybe Text)
+    , _pdidPayload        :: !GoogleFirestoreAdminV1ImportDocumentsRequest
+    , _pdidName           :: !Text
+    , _pdidCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesImportDocuments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdidXgafv'
+--
+-- * 'pdidUploadProtocol'
+--
+-- * 'pdidAccessToken'
+--
+-- * 'pdidUploadType'
+--
+-- * 'pdidPayload'
+--
+-- * 'pdidName'
+--
+-- * 'pdidCallback'
+projectsDatabasesImportDocuments
+    :: GoogleFirestoreAdminV1ImportDocumentsRequest -- ^ 'pdidPayload'
+    -> Text -- ^ 'pdidName'
+    -> ProjectsDatabasesImportDocuments
+projectsDatabasesImportDocuments pPdidPayload_ pPdidName_ =
+    ProjectsDatabasesImportDocuments'
+    { _pdidXgafv = Nothing
+    , _pdidUploadProtocol = Nothing
+    , _pdidAccessToken = Nothing
+    , _pdidUploadType = Nothing
+    , _pdidPayload = pPdidPayload_
+    , _pdidName = pPdidName_
+    , _pdidCallback = Nothing
+    }
+
+-- | V1 error format.
+pdidXgafv :: Lens' ProjectsDatabasesImportDocuments (Maybe Xgafv)
+pdidXgafv
+  = lens _pdidXgafv (\ s a -> s{_pdidXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdidUploadProtocol :: Lens' ProjectsDatabasesImportDocuments (Maybe Text)
+pdidUploadProtocol
+  = lens _pdidUploadProtocol
+      (\ s a -> s{_pdidUploadProtocol = a})
+
+-- | OAuth access token.
+pdidAccessToken :: Lens' ProjectsDatabasesImportDocuments (Maybe Text)
+pdidAccessToken
+  = lens _pdidAccessToken
+      (\ s a -> s{_pdidAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdidUploadType :: Lens' ProjectsDatabasesImportDocuments (Maybe Text)
+pdidUploadType
+  = lens _pdidUploadType
+      (\ s a -> s{_pdidUploadType = a})
+
+-- | Multipart request metadata.
+pdidPayload :: Lens' ProjectsDatabasesImportDocuments GoogleFirestoreAdminV1ImportDocumentsRequest
+pdidPayload
+  = lens _pdidPayload (\ s a -> s{_pdidPayload = a})
+
+-- | Database to import into. Should be of the form:
+-- \`projects\/{project_id}\/databases\/{database_id}\`.
+pdidName :: Lens' ProjectsDatabasesImportDocuments Text
+pdidName = lens _pdidName (\ s a -> s{_pdidName = a})
+
+-- | JSONP
+pdidCallback :: Lens' ProjectsDatabasesImportDocuments (Maybe Text)
+pdidCallback
+  = lens _pdidCallback (\ s a -> s{_pdidCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesImportDocuments where
+        type Rs ProjectsDatabasesImportDocuments =
+             GoogleLongrunningOperation
+        type Scopes ProjectsDatabasesImportDocuments =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesImportDocuments'{..}
+          = go _pdidName _pdidXgafv _pdidUploadProtocol
+              _pdidAccessToken
+              _pdidUploadType
+              _pdidCallback
+              (Just AltJSON)
+              _pdidPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesImportDocumentsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Cancel.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Cancel.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Operations.Cancel
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation. On successful cancellation, the operation is not deleted;
+-- instead, it becomes an operation with an Operation.error value with a
+-- google.rpc.Status.code of 1, corresponding to \`Code.CANCELLED\`.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.operations.cancel@.
+module Network.Google.Resource.FireStore.Projects.Databases.Operations.Cancel
+    (
+    -- * REST Resource
+      ProjectsDatabasesOperationsCancelResource
+
+    -- * Creating a Request
+    , projectsDatabasesOperationsCancel
+    , ProjectsDatabasesOperationsCancel
+
+    -- * Request Lenses
+    , pdocXgafv
+    , pdocUploadProtocol
+    , pdocAccessToken
+    , pdocUploadType
+    , pdocPayload
+    , pdocName
+    , pdocCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.operations.cancel@ method which the
+-- 'ProjectsDatabasesOperationsCancel' request conforms to.
+type ProjectsDatabasesOperationsCancelResource =
+     "v1" :>
+       CaptureMode "name" "cancel" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON]
+                       GoogleLongrunningCancelOperationRequest
+                       :> Post '[JSON] Empty
+
+-- | Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation. On successful cancellation, the operation is not deleted;
+-- instead, it becomes an operation with an Operation.error value with a
+-- google.rpc.Status.code of 1, corresponding to \`Code.CANCELLED\`.
+--
+-- /See:/ 'projectsDatabasesOperationsCancel' smart constructor.
+data ProjectsDatabasesOperationsCancel = ProjectsDatabasesOperationsCancel'
+    { _pdocXgafv          :: !(Maybe Xgafv)
+    , _pdocUploadProtocol :: !(Maybe Text)
+    , _pdocAccessToken    :: !(Maybe Text)
+    , _pdocUploadType     :: !(Maybe Text)
+    , _pdocPayload        :: !GoogleLongrunningCancelOperationRequest
+    , _pdocName           :: !Text
+    , _pdocCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesOperationsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdocXgafv'
+--
+-- * 'pdocUploadProtocol'
+--
+-- * 'pdocAccessToken'
+--
+-- * 'pdocUploadType'
+--
+-- * 'pdocPayload'
+--
+-- * 'pdocName'
+--
+-- * 'pdocCallback'
+projectsDatabasesOperationsCancel
+    :: GoogleLongrunningCancelOperationRequest -- ^ 'pdocPayload'
+    -> Text -- ^ 'pdocName'
+    -> ProjectsDatabasesOperationsCancel
+projectsDatabasesOperationsCancel pPdocPayload_ pPdocName_ =
+    ProjectsDatabasesOperationsCancel'
+    { _pdocXgafv = Nothing
+    , _pdocUploadProtocol = Nothing
+    , _pdocAccessToken = Nothing
+    , _pdocUploadType = Nothing
+    , _pdocPayload = pPdocPayload_
+    , _pdocName = pPdocName_
+    , _pdocCallback = Nothing
+    }
+
+-- | V1 error format.
+pdocXgafv :: Lens' ProjectsDatabasesOperationsCancel (Maybe Xgafv)
+pdocXgafv
+  = lens _pdocXgafv (\ s a -> s{_pdocXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdocUploadProtocol :: Lens' ProjectsDatabasesOperationsCancel (Maybe Text)
+pdocUploadProtocol
+  = lens _pdocUploadProtocol
+      (\ s a -> s{_pdocUploadProtocol = a})
+
+-- | OAuth access token.
+pdocAccessToken :: Lens' ProjectsDatabasesOperationsCancel (Maybe Text)
+pdocAccessToken
+  = lens _pdocAccessToken
+      (\ s a -> s{_pdocAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdocUploadType :: Lens' ProjectsDatabasesOperationsCancel (Maybe Text)
+pdocUploadType
+  = lens _pdocUploadType
+      (\ s a -> s{_pdocUploadType = a})
+
+-- | Multipart request metadata.
+pdocPayload :: Lens' ProjectsDatabasesOperationsCancel GoogleLongrunningCancelOperationRequest
+pdocPayload
+  = lens _pdocPayload (\ s a -> s{_pdocPayload = a})
+
+-- | The name of the operation resource to be cancelled.
+pdocName :: Lens' ProjectsDatabasesOperationsCancel Text
+pdocName = lens _pdocName (\ s a -> s{_pdocName = a})
+
+-- | JSONP
+pdocCallback :: Lens' ProjectsDatabasesOperationsCancel (Maybe Text)
+pdocCallback
+  = lens _pdocCallback (\ s a -> s{_pdocCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesOperationsCancel where
+        type Rs ProjectsDatabasesOperationsCancel = Empty
+        type Scopes ProjectsDatabasesOperationsCancel =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesOperationsCancel'{..}
+          = go _pdocName _pdocXgafv _pdocUploadProtocol
+              _pdocAccessToken
+              _pdocUploadType
+              _pdocCallback
+              (Just AltJSON)
+              _pdocPayload
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesOperationsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Delete.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Delete.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Operations.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.operations.delete@.
+module Network.Google.Resource.FireStore.Projects.Databases.Operations.Delete
+    (
+    -- * REST Resource
+      ProjectsDatabasesOperationsDeleteResource
+
+    -- * Creating a Request
+    , projectsDatabasesOperationsDelete
+    , ProjectsDatabasesOperationsDelete
+
+    -- * Request Lenses
+    , pdodXgafv
+    , pdodUploadProtocol
+    , pdodAccessToken
+    , pdodUploadType
+    , pdodName
+    , pdodCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.operations.delete@ method which the
+-- 'ProjectsDatabasesOperationsDelete' request conforms to.
+type ProjectsDatabasesOperationsDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ 'projectsDatabasesOperationsDelete' smart constructor.
+data ProjectsDatabasesOperationsDelete = ProjectsDatabasesOperationsDelete'
+    { _pdodXgafv          :: !(Maybe Xgafv)
+    , _pdodUploadProtocol :: !(Maybe Text)
+    , _pdodAccessToken    :: !(Maybe Text)
+    , _pdodUploadType     :: !(Maybe Text)
+    , _pdodName           :: !Text
+    , _pdodCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesOperationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdodXgafv'
+--
+-- * 'pdodUploadProtocol'
+--
+-- * 'pdodAccessToken'
+--
+-- * 'pdodUploadType'
+--
+-- * 'pdodName'
+--
+-- * 'pdodCallback'
+projectsDatabasesOperationsDelete
+    :: Text -- ^ 'pdodName'
+    -> ProjectsDatabasesOperationsDelete
+projectsDatabasesOperationsDelete pPdodName_ =
+    ProjectsDatabasesOperationsDelete'
+    { _pdodXgafv = Nothing
+    , _pdodUploadProtocol = Nothing
+    , _pdodAccessToken = Nothing
+    , _pdodUploadType = Nothing
+    , _pdodName = pPdodName_
+    , _pdodCallback = Nothing
+    }
+
+-- | V1 error format.
+pdodXgafv :: Lens' ProjectsDatabasesOperationsDelete (Maybe Xgafv)
+pdodXgafv
+  = lens _pdodXgafv (\ s a -> s{_pdodXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdodUploadProtocol :: Lens' ProjectsDatabasesOperationsDelete (Maybe Text)
+pdodUploadProtocol
+  = lens _pdodUploadProtocol
+      (\ s a -> s{_pdodUploadProtocol = a})
+
+-- | OAuth access token.
+pdodAccessToken :: Lens' ProjectsDatabasesOperationsDelete (Maybe Text)
+pdodAccessToken
+  = lens _pdodAccessToken
+      (\ s a -> s{_pdodAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdodUploadType :: Lens' ProjectsDatabasesOperationsDelete (Maybe Text)
+pdodUploadType
+  = lens _pdodUploadType
+      (\ s a -> s{_pdodUploadType = a})
+
+-- | The name of the operation resource to be deleted.
+pdodName :: Lens' ProjectsDatabasesOperationsDelete Text
+pdodName = lens _pdodName (\ s a -> s{_pdodName = a})
+
+-- | JSONP
+pdodCallback :: Lens' ProjectsDatabasesOperationsDelete (Maybe Text)
+pdodCallback
+  = lens _pdodCallback (\ s a -> s{_pdodCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesOperationsDelete where
+        type Rs ProjectsDatabasesOperationsDelete = Empty
+        type Scopes ProjectsDatabasesOperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesOperationsDelete'{..}
+          = go _pdodName _pdodXgafv _pdodUploadProtocol
+              _pdodAccessToken
+              _pdodUploadType
+              _pdodCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesOperationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Get.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/Get.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Operations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.operations.get@.
+module Network.Google.Resource.FireStore.Projects.Databases.Operations.Get
+    (
+    -- * REST Resource
+      ProjectsDatabasesOperationsGetResource
+
+    -- * Creating a Request
+    , projectsDatabasesOperationsGet
+    , ProjectsDatabasesOperationsGet
+
+    -- * Request Lenses
+    , pdogXgafv
+    , pdogUploadProtocol
+    , pdogAccessToken
+    , pdogUploadType
+    , pdogName
+    , pdogCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.operations.get@ method which the
+-- 'ProjectsDatabasesOperationsGet' request conforms to.
+type ProjectsDatabasesOperationsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] GoogleLongrunningOperation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ 'projectsDatabasesOperationsGet' smart constructor.
+data ProjectsDatabasesOperationsGet = ProjectsDatabasesOperationsGet'
+    { _pdogXgafv          :: !(Maybe Xgafv)
+    , _pdogUploadProtocol :: !(Maybe Text)
+    , _pdogAccessToken    :: !(Maybe Text)
+    , _pdogUploadType     :: !(Maybe Text)
+    , _pdogName           :: !Text
+    , _pdogCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesOperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdogXgafv'
+--
+-- * 'pdogUploadProtocol'
+--
+-- * 'pdogAccessToken'
+--
+-- * 'pdogUploadType'
+--
+-- * 'pdogName'
+--
+-- * 'pdogCallback'
+projectsDatabasesOperationsGet
+    :: Text -- ^ 'pdogName'
+    -> ProjectsDatabasesOperationsGet
+projectsDatabasesOperationsGet pPdogName_ =
+    ProjectsDatabasesOperationsGet'
+    { _pdogXgafv = Nothing
+    , _pdogUploadProtocol = Nothing
+    , _pdogAccessToken = Nothing
+    , _pdogUploadType = Nothing
+    , _pdogName = pPdogName_
+    , _pdogCallback = Nothing
+    }
+
+-- | V1 error format.
+pdogXgafv :: Lens' ProjectsDatabasesOperationsGet (Maybe Xgafv)
+pdogXgafv
+  = lens _pdogXgafv (\ s a -> s{_pdogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdogUploadProtocol :: Lens' ProjectsDatabasesOperationsGet (Maybe Text)
+pdogUploadProtocol
+  = lens _pdogUploadProtocol
+      (\ s a -> s{_pdogUploadProtocol = a})
+
+-- | OAuth access token.
+pdogAccessToken :: Lens' ProjectsDatabasesOperationsGet (Maybe Text)
+pdogAccessToken
+  = lens _pdogAccessToken
+      (\ s a -> s{_pdogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdogUploadType :: Lens' ProjectsDatabasesOperationsGet (Maybe Text)
+pdogUploadType
+  = lens _pdogUploadType
+      (\ s a -> s{_pdogUploadType = a})
+
+-- | The name of the operation resource.
+pdogName :: Lens' ProjectsDatabasesOperationsGet Text
+pdogName = lens _pdogName (\ s a -> s{_pdogName = a})
+
+-- | JSONP
+pdogCallback :: Lens' ProjectsDatabasesOperationsGet (Maybe Text)
+pdogCallback
+  = lens _pdogCallback (\ s a -> s{_pdogCallback = a})
+
+instance GoogleRequest ProjectsDatabasesOperationsGet
+         where
+        type Rs ProjectsDatabasesOperationsGet =
+             GoogleLongrunningOperation
+        type Scopes ProjectsDatabasesOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesOperationsGet'{..}
+          = go _pdogName _pdogXgafv _pdogUploadProtocol
+              _pdogAccessToken
+              _pdogUploadType
+              _pdogCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesOperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/List.hs b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Databases/Operations/List.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Databases.Operations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding allows API services to override the binding to use
+-- different resource name schemes, such as \`users\/*\/operations\`. To
+-- override the binding, API services can add a binding such as
+-- \`\"\/v1\/{name=users\/*}\/operations\"\` to their service
+-- configuration. For backwards compatibility, the default name includes
+-- the operations collection id, however overriding users must ensure the
+-- name binding is the parent resource, without the operations collection
+-- id.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.databases.operations.list@.
+module Network.Google.Resource.FireStore.Projects.Databases.Operations.List
+    (
+    -- * REST Resource
+      ProjectsDatabasesOperationsListResource
+
+    -- * Creating a Request
+    , projectsDatabasesOperationsList
+    , ProjectsDatabasesOperationsList
+
+    -- * Request Lenses
+    , pdolXgafv
+    , pdolUploadProtocol
+    , pdolAccessToken
+    , pdolUploadType
+    , pdolName
+    , pdolFilter
+    , pdolPageToken
+    , pdolPageSize
+    , pdolCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.databases.operations.list@ method which the
+-- 'ProjectsDatabasesOperationsList' request conforms to.
+type ProjectsDatabasesOperationsListResource =
+     "v1" :>
+       Capture "name" Text :>
+         "operations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] GoogleLongrunningListOperationsResponse
+
+-- | Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding allows API services to override the binding to use
+-- different resource name schemes, such as \`users\/*\/operations\`. To
+-- override the binding, API services can add a binding such as
+-- \`\"\/v1\/{name=users\/*}\/operations\"\` to their service
+-- configuration. For backwards compatibility, the default name includes
+-- the operations collection id, however overriding users must ensure the
+-- name binding is the parent resource, without the operations collection
+-- id.
+--
+-- /See:/ 'projectsDatabasesOperationsList' smart constructor.
+data ProjectsDatabasesOperationsList = ProjectsDatabasesOperationsList'
+    { _pdolXgafv          :: !(Maybe Xgafv)
+    , _pdolUploadProtocol :: !(Maybe Text)
+    , _pdolAccessToken    :: !(Maybe Text)
+    , _pdolUploadType     :: !(Maybe Text)
+    , _pdolName           :: !Text
+    , _pdolFilter         :: !(Maybe Text)
+    , _pdolPageToken      :: !(Maybe Text)
+    , _pdolPageSize       :: !(Maybe (Textual Int32))
+    , _pdolCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsDatabasesOperationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdolXgafv'
+--
+-- * 'pdolUploadProtocol'
+--
+-- * 'pdolAccessToken'
+--
+-- * 'pdolUploadType'
+--
+-- * 'pdolName'
+--
+-- * 'pdolFilter'
+--
+-- * 'pdolPageToken'
+--
+-- * 'pdolPageSize'
+--
+-- * 'pdolCallback'
+projectsDatabasesOperationsList
+    :: Text -- ^ 'pdolName'
+    -> ProjectsDatabasesOperationsList
+projectsDatabasesOperationsList pPdolName_ =
+    ProjectsDatabasesOperationsList'
+    { _pdolXgafv = Nothing
+    , _pdolUploadProtocol = Nothing
+    , _pdolAccessToken = Nothing
+    , _pdolUploadType = Nothing
+    , _pdolName = pPdolName_
+    , _pdolFilter = Nothing
+    , _pdolPageToken = Nothing
+    , _pdolPageSize = Nothing
+    , _pdolCallback = Nothing
+    }
+
+-- | V1 error format.
+pdolXgafv :: Lens' ProjectsDatabasesOperationsList (Maybe Xgafv)
+pdolXgafv
+  = lens _pdolXgafv (\ s a -> s{_pdolXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pdolUploadProtocol :: Lens' ProjectsDatabasesOperationsList (Maybe Text)
+pdolUploadProtocol
+  = lens _pdolUploadProtocol
+      (\ s a -> s{_pdolUploadProtocol = a})
+
+-- | OAuth access token.
+pdolAccessToken :: Lens' ProjectsDatabasesOperationsList (Maybe Text)
+pdolAccessToken
+  = lens _pdolAccessToken
+      (\ s a -> s{_pdolAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pdolUploadType :: Lens' ProjectsDatabasesOperationsList (Maybe Text)
+pdolUploadType
+  = lens _pdolUploadType
+      (\ s a -> s{_pdolUploadType = a})
+
+-- | The name of the operation\'s parent resource.
+pdolName :: Lens' ProjectsDatabasesOperationsList Text
+pdolName = lens _pdolName (\ s a -> s{_pdolName = a})
+
+-- | The standard list filter.
+pdolFilter :: Lens' ProjectsDatabasesOperationsList (Maybe Text)
+pdolFilter
+  = lens _pdolFilter (\ s a -> s{_pdolFilter = a})
+
+-- | The standard list page token.
+pdolPageToken :: Lens' ProjectsDatabasesOperationsList (Maybe Text)
+pdolPageToken
+  = lens _pdolPageToken
+      (\ s a -> s{_pdolPageToken = a})
+
+-- | The standard list page size.
+pdolPageSize :: Lens' ProjectsDatabasesOperationsList (Maybe Int32)
+pdolPageSize
+  = lens _pdolPageSize (\ s a -> s{_pdolPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+pdolCallback :: Lens' ProjectsDatabasesOperationsList (Maybe Text)
+pdolCallback
+  = lens _pdolCallback (\ s a -> s{_pdolCallback = a})
+
+instance GoogleRequest
+         ProjectsDatabasesOperationsList where
+        type Rs ProjectsDatabasesOperationsList =
+             GoogleLongrunningListOperationsResponse
+        type Scopes ProjectsDatabasesOperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsDatabasesOperationsList'{..}
+          = go _pdolName _pdolXgafv _pdolUploadProtocol
+              _pdolAccessToken
+              _pdolUploadType
+              _pdolFilter
+              _pdolPageToken
+              _pdolPageSize
+              _pdolCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsDatabasesOperationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Locations/Get.hs b/gen/Network/Google/Resource/FireStore/Projects/Locations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Locations/Get.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Locations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about a location.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.locations.get@.
+module Network.Google.Resource.FireStore.Projects.Locations.Get
+    (
+    -- * REST Resource
+      ProjectsLocationsGetResource
+
+    -- * Creating a Request
+    , projectsLocationsGet
+    , ProjectsLocationsGet
+
+    -- * Request Lenses
+    , plgXgafv
+    , plgUploadProtocol
+    , plgAccessToken
+    , plgUploadType
+    , plgName
+    , plgCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.locations.get@ method which the
+-- 'ProjectsLocationsGet' request conforms to.
+type ProjectsLocationsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Location
+
+-- | Gets information about a location.
+--
+-- /See:/ 'projectsLocationsGet' smart constructor.
+data ProjectsLocationsGet = ProjectsLocationsGet'
+    { _plgXgafv          :: !(Maybe Xgafv)
+    , _plgUploadProtocol :: !(Maybe Text)
+    , _plgAccessToken    :: !(Maybe Text)
+    , _plgUploadType     :: !(Maybe Text)
+    , _plgName           :: !Text
+    , _plgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plgXgafv'
+--
+-- * 'plgUploadProtocol'
+--
+-- * 'plgAccessToken'
+--
+-- * 'plgUploadType'
+--
+-- * 'plgName'
+--
+-- * 'plgCallback'
+projectsLocationsGet
+    :: Text -- ^ 'plgName'
+    -> ProjectsLocationsGet
+projectsLocationsGet pPlgName_ =
+    ProjectsLocationsGet'
+    { _plgXgafv = Nothing
+    , _plgUploadProtocol = Nothing
+    , _plgAccessToken = Nothing
+    , _plgUploadType = Nothing
+    , _plgName = pPlgName_
+    , _plgCallback = Nothing
+    }
+
+-- | V1 error format.
+plgXgafv :: Lens' ProjectsLocationsGet (Maybe Xgafv)
+plgXgafv = lens _plgXgafv (\ s a -> s{_plgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plgUploadProtocol :: Lens' ProjectsLocationsGet (Maybe Text)
+plgUploadProtocol
+  = lens _plgUploadProtocol
+      (\ s a -> s{_plgUploadProtocol = a})
+
+-- | OAuth access token.
+plgAccessToken :: Lens' ProjectsLocationsGet (Maybe Text)
+plgAccessToken
+  = lens _plgAccessToken
+      (\ s a -> s{_plgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plgUploadType :: Lens' ProjectsLocationsGet (Maybe Text)
+plgUploadType
+  = lens _plgUploadType
+      (\ s a -> s{_plgUploadType = a})
+
+-- | Resource name for the location.
+plgName :: Lens' ProjectsLocationsGet Text
+plgName = lens _plgName (\ s a -> s{_plgName = a})
+
+-- | JSONP
+plgCallback :: Lens' ProjectsLocationsGet (Maybe Text)
+plgCallback
+  = lens _plgCallback (\ s a -> s{_plgCallback = a})
+
+instance GoogleRequest ProjectsLocationsGet where
+        type Rs ProjectsLocationsGet = Location
+        type Scopes ProjectsLocationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsLocationsGet'{..}
+          = go _plgName _plgXgafv _plgUploadProtocol
+              _plgAccessToken
+              _plgUploadType
+              _plgCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FireStore/Projects/Locations/List.hs b/gen/Network/Google/Resource/FireStore/Projects/Locations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FireStore/Projects/Locations/List.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FireStore.Projects.Locations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists information about the supported locations for this service.
+--
+-- /See:/ <https://cloud.google.com/firestore Cloud Firestore API Reference> for @firestore.projects.locations.list@.
+module Network.Google.Resource.FireStore.Projects.Locations.List
+    (
+    -- * REST Resource
+      ProjectsLocationsListResource
+
+    -- * Creating a Request
+    , projectsLocationsList
+    , ProjectsLocationsList
+
+    -- * Request Lenses
+    , pllXgafv
+    , pllUploadProtocol
+    , pllAccessToken
+    , pllUploadType
+    , pllName
+    , pllFilter
+    , pllPageToken
+    , pllPageSize
+    , pllCallback
+    ) where
+
+import           Network.Google.FireStore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firestore.projects.locations.list@ method which the
+-- 'ProjectsLocationsList' request conforms to.
+type ProjectsLocationsListResource =
+     "v1" :>
+       Capture "name" Text :>
+         "locations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListLocationsResponse
+
+-- | Lists information about the supported locations for this service.
+--
+-- /See:/ 'projectsLocationsList' smart constructor.
+data ProjectsLocationsList = ProjectsLocationsList'
+    { _pllXgafv          :: !(Maybe Xgafv)
+    , _pllUploadProtocol :: !(Maybe Text)
+    , _pllAccessToken    :: !(Maybe Text)
+    , _pllUploadType     :: !(Maybe Text)
+    , _pllName           :: !Text
+    , _pllFilter         :: !(Maybe Text)
+    , _pllPageToken      :: !(Maybe Text)
+    , _pllPageSize       :: !(Maybe (Textual Int32))
+    , _pllCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pllXgafv'
+--
+-- * 'pllUploadProtocol'
+--
+-- * 'pllAccessToken'
+--
+-- * 'pllUploadType'
+--
+-- * 'pllName'
+--
+-- * 'pllFilter'
+--
+-- * 'pllPageToken'
+--
+-- * 'pllPageSize'
+--
+-- * 'pllCallback'
+projectsLocationsList
+    :: Text -- ^ 'pllName'
+    -> ProjectsLocationsList
+projectsLocationsList pPllName_ =
+    ProjectsLocationsList'
+    { _pllXgafv = Nothing
+    , _pllUploadProtocol = Nothing
+    , _pllAccessToken = Nothing
+    , _pllUploadType = Nothing
+    , _pllName = pPllName_
+    , _pllFilter = Nothing
+    , _pllPageToken = Nothing
+    , _pllPageSize = Nothing
+    , _pllCallback = Nothing
+    }
+
+-- | V1 error format.
+pllXgafv :: Lens' ProjectsLocationsList (Maybe Xgafv)
+pllXgafv = lens _pllXgafv (\ s a -> s{_pllXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pllUploadProtocol :: Lens' ProjectsLocationsList (Maybe Text)
+pllUploadProtocol
+  = lens _pllUploadProtocol
+      (\ s a -> s{_pllUploadProtocol = a})
+
+-- | OAuth access token.
+pllAccessToken :: Lens' ProjectsLocationsList (Maybe Text)
+pllAccessToken
+  = lens _pllAccessToken
+      (\ s a -> s{_pllAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pllUploadType :: Lens' ProjectsLocationsList (Maybe Text)
+pllUploadType
+  = lens _pllUploadType
+      (\ s a -> s{_pllUploadType = a})
+
+-- | The resource that owns the locations collection, if applicable.
+pllName :: Lens' ProjectsLocationsList Text
+pllName = lens _pllName (\ s a -> s{_pllName = a})
+
+-- | The standard list filter.
+pllFilter :: Lens' ProjectsLocationsList (Maybe Text)
+pllFilter
+  = lens _pllFilter (\ s a -> s{_pllFilter = a})
+
+-- | The standard list page token.
+pllPageToken :: Lens' ProjectsLocationsList (Maybe Text)
+pllPageToken
+  = lens _pllPageToken (\ s a -> s{_pllPageToken = a})
+
+-- | The standard list page size.
+pllPageSize :: Lens' ProjectsLocationsList (Maybe Int32)
+pllPageSize
+  = lens _pllPageSize (\ s a -> s{_pllPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+pllCallback :: Lens' ProjectsLocationsList (Maybe Text)
+pllCallback
+  = lens _pllCallback (\ s a -> s{_pllCallback = a})
+
+instance GoogleRequest ProjectsLocationsList where
+        type Rs ProjectsLocationsList = ListLocationsResponse
+        type Scopes ProjectsLocationsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsLocationsList'{..}
+          = go _pllName _pllXgafv _pllUploadProtocol
+              _pllAccessToken
+              _pllUploadType
+              _pllFilter
+              _pllPageToken
+              _pllPageSize
+              _pllCallback
+              (Just AltJSON)
+              fireStoreService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsListResource)
+                      mempty
diff --git a/gogol-firestore.cabal b/gogol-firestore.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-firestore.cabal
@@ -0,0 +1,74 @@
+name:                  gogol-firestore
+version:               0.4.0
+synopsis:              Google Cloud Firestore SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    Accesses the NoSQL document database built for automatic scaling, high
+    performance, and ease of application development.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.FireStore
+        , Network.Google.FireStore.Types
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Get
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.List
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Fields.Patch
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Create
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Delete
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.Get
+        , Network.Google.Resource.FireStore.Projects.Databases.CollectionGroups.Indexes.List
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.BatchGet
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.BeginTransaction
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Commit
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.CreateDocument
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Delete
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Get
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.List
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.ListCollectionIds
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Listen
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Patch
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Rollback
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.RunQuery
+        , Network.Google.Resource.FireStore.Projects.Databases.Documents.Write
+        , Network.Google.Resource.FireStore.Projects.Databases.ExportDocuments
+        , Network.Google.Resource.FireStore.Projects.Databases.ImportDocuments
+        , Network.Google.Resource.FireStore.Projects.Databases.Operations.Cancel
+        , Network.Google.Resource.FireStore.Projects.Databases.Operations.Delete
+        , Network.Google.Resource.FireStore.Projects.Databases.Operations.Get
+        , Network.Google.Resource.FireStore.Projects.Databases.Operations.List
+        , Network.Google.Resource.FireStore.Projects.Locations.Get
+        , Network.Google.Resource.FireStore.Projects.Locations.List
+
+    other-modules:
+          Network.Google.FireStore.Types.Product
+        , Network.Google.FireStore.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
