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-cloudsearch
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Cloud Search.
+
+
+## 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-cloudsearch` 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/CloudSearch.hs b/gen/Network/Google/CloudSearch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudSearch.hs
@@ -0,0 +1,1239 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudSearch
+-- 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)
+--
+-- Cloud Search provides cloud-based search capabilities over G Suite data.
+-- The Cloud Search API allows indexing of non-G Suite data into Cloud
+-- Search.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference>
+module Network.Google.CloudSearch
+    (
+    -- * Service Configuration
+      cloudSearchService
+
+    -- * OAuth Scopes
+    , cloudSearchSettingsQueryScope
+    , cloudSearchStatsIndexingScope
+    , cloudSearchIndexingScope
+    , cloudSearchScope
+    , cloudSearchSettingsIndexingScope
+    , cloudSearchQueryScope
+    , cloudSearchDebugScope
+    , cloudSearchStatsScope
+    , cloudSearchSettingsScope
+
+    -- * API Declaration
+    , CloudSearchAPI
+
+    -- * Resources
+
+    -- ** cloudsearch.debug.datasources.items.checkAccess
+    , module Network.Google.Resource.CloudSearch.Debug.Datasources.Items.CheckAccess
+
+    -- ** cloudsearch.debug.datasources.items.searchByViewUrl
+    , module Network.Google.Resource.CloudSearch.Debug.Datasources.Items.SearchByViewURL
+
+    -- ** cloudsearch.debug.datasources.items.unmappedids.list
+    , module Network.Google.Resource.CloudSearch.Debug.Datasources.Items.UnmAppedids.List
+
+    -- ** cloudsearch.debug.identitysources.items.listForunmappedidentity
+    , module Network.Google.Resource.CloudSearch.Debug.Identitysources.Items.ListForunmAppedidentity
+
+    -- ** cloudsearch.debug.identitysources.unmappedids.list
+    , module Network.Google.Resource.CloudSearch.Debug.Identitysources.UnmAppedids.List
+
+    -- ** cloudsearch.indexing.datasources.deleteSchema
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.DeleteSchema
+
+    -- ** cloudsearch.indexing.datasources.getSchema
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.GetSchema
+
+    -- ** cloudsearch.indexing.datasources.items.delete
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Delete
+
+    -- ** cloudsearch.indexing.datasources.items.deleteQueueItems
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.DeleteQueueItems
+
+    -- ** cloudsearch.indexing.datasources.items.get
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Get
+
+    -- ** cloudsearch.indexing.datasources.items.index
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Index
+
+    -- ** cloudsearch.indexing.datasources.items.list
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.List
+
+    -- ** cloudsearch.indexing.datasources.items.poll
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Poll
+
+    -- ** cloudsearch.indexing.datasources.items.push
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Push
+
+    -- ** cloudsearch.indexing.datasources.items.unreserve
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Unreserve
+
+    -- ** cloudsearch.indexing.datasources.items.upload
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Upload
+
+    -- ** cloudsearch.indexing.datasources.updateSchema
+    , module Network.Google.Resource.CloudSearch.Indexing.Datasources.UpdateSchema
+
+    -- ** cloudsearch.media.upload
+    , module Network.Google.Resource.CloudSearch.Media.Upload
+
+    -- ** cloudsearch.operations.get
+    , module Network.Google.Resource.CloudSearch.Operations.Get
+
+    -- ** cloudsearch.query.search
+    , module Network.Google.Resource.CloudSearch.Query.Search
+
+    -- ** cloudsearch.query.sources.list
+    , module Network.Google.Resource.CloudSearch.Query.Sources.List
+
+    -- ** cloudsearch.query.suggest
+    , module Network.Google.Resource.CloudSearch.Query.Suggest
+
+    -- ** cloudsearch.settings.datasources.create
+    , module Network.Google.Resource.CloudSearch.Settings.Datasources.Create
+
+    -- ** cloudsearch.settings.datasources.delete
+    , module Network.Google.Resource.CloudSearch.Settings.Datasources.Delete
+
+    -- ** cloudsearch.settings.datasources.get
+    , module Network.Google.Resource.CloudSearch.Settings.Datasources.Get
+
+    -- ** cloudsearch.settings.datasources.list
+    , module Network.Google.Resource.CloudSearch.Settings.Datasources.List
+
+    -- ** cloudsearch.settings.datasources.update
+    , module Network.Google.Resource.CloudSearch.Settings.Datasources.Update
+
+    -- ** cloudsearch.settings.searchapplications.create
+    , module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Create
+
+    -- ** cloudsearch.settings.searchapplications.delete
+    , module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Delete
+
+    -- ** cloudsearch.settings.searchapplications.get
+    , module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Get
+
+    -- ** cloudsearch.settings.searchapplications.list
+    , module Network.Google.Resource.CloudSearch.Settings.SearchApplications.List
+
+    -- ** cloudsearch.settings.searchapplications.reset
+    , module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Reset
+
+    -- ** cloudsearch.settings.searchapplications.update
+    , module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Update
+
+    -- ** cloudsearch.stats.getIndex
+    , module Network.Google.Resource.CloudSearch.Stats.GetIndex
+
+    -- ** cloudsearch.stats.index.datasources.get
+    , module Network.Google.Resource.CloudSearch.Stats.Index.Datasources.Get
+
+    -- * Types
+
+    -- ** DriveMimeTypeRestrictType
+    , DriveMimeTypeRestrictType (..)
+
+    -- ** DriveFollowUpRestrictType
+    , DriveFollowUpRestrictType (..)
+
+    -- ** ItemContent
+    , ItemContent
+    , itemContent
+    , icHash
+    , icContentFormat
+    , icContentDataRef
+    , icInlineContent
+
+    -- ** Photo
+    , Photo
+    , photo
+    , pURL
+
+    -- ** SearchItemsByViewURLRequest
+    , SearchItemsByViewURLRequest
+    , searchItemsByViewURLRequest
+    , sibvurDebugOptions
+    , sibvurPageToken
+    , sibvurViewURL
+
+    -- ** SearchApplication
+    , SearchApplication
+    , searchApplication
+    , saDataSourceRestrictions
+    , saOperationIds
+    , saDefaultFacetOptions
+    , saScoringConfig
+    , saName
+    , saSourceConfig
+    , saDisplayName
+    , saDefaultSortOptions
+
+    -- ** BooleanOperatorOptions
+    , BooleanOperatorOptions
+    , booleanOperatorOptions
+    , booOperatorName
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** EnumPropertyOptions
+    , EnumPropertyOptions
+    , enumPropertyOptions
+    , epoPossibleValues
+    , epoOrderedRanking
+    , epoOperatorOptions
+
+    -- ** ItemStatusCode
+    , ItemStatusCode (..)
+
+    -- ** UnreserveItemsRequest
+    , UnreserveItemsRequest
+    , unreserveItemsRequest
+    , uirQueue
+    , uirDebugOptions
+    , uirConnectorName
+
+    -- ** DateOperatorOptions
+    , DateOperatorOptions
+    , dateOperatorOptions
+    , dooOperatorName
+    , dooLessThanOperatorName
+    , dooGreaterThanOperatorName
+
+    -- ** GetDataSourceIndexStatsResponse
+    , GetDataSourceIndexStatsResponse
+    , getDataSourceIndexStatsResponse
+    , gdsisrStats
+
+    -- ** ObjectDisplayOptions
+    , ObjectDisplayOptions
+    , objectDisplayOptions
+    , odoMetalines
+    , odoObjectDisplayLabel
+
+    -- ** QueryItem
+    , QueryItem
+    , queryItem
+    , qiIsSynthetic
+
+    -- ** ListUnmAppedIdentitiesResponse
+    , ListUnmAppedIdentitiesResponse
+    , listUnmAppedIdentitiesResponse
+    , luairNextPageToken
+    , luairUnmAppedIdentities
+
+    -- ** DeleteQueueItemsRequest
+    , DeleteQueueItemsRequest
+    , deleteQueueItemsRequest
+    , dqirQueue
+    , dqirDebugOptions
+    , dqirConnectorName
+
+    -- ** SearchResult
+    , SearchResult
+    , searchResult
+    , srDebugInfo
+    , srSnippet
+    , srURL
+    , srClusteredResults
+    , srMetadata
+    , srTitle
+
+    -- ** SpellResult
+    , SpellResult
+    , spellResult
+    , srSuggestedQuery
+
+    -- ** PeopleSuggestion
+    , PeopleSuggestion
+    , peopleSuggestion
+    , psPerson
+
+    -- ** QuerySource
+    , QuerySource
+    , querySource
+    , qsShortName
+    , qsDisplayName
+    , qsSource
+    , qsOperators
+
+    -- ** SuggestResponse
+    , SuggestResponse
+    , suggestResponse
+    , srSuggestResults
+
+    -- ** RepositoryError
+    , RepositoryError
+    , repositoryError
+    , reHTTPStatusCode
+    , reType
+    , reErrorMessage
+
+    -- ** QueryInterpretationInterpretationType
+    , QueryInterpretationInterpretationType (..)
+
+    -- ** HTMLPropertyOptions
+    , HTMLPropertyOptions
+    , htmlPropertyOptions
+    , hpoRetrievalImportance
+    , hpoOperatorOptions
+
+    -- ** PropertyDefinition
+    , PropertyDefinition
+    , propertyDefinition
+    , pdEnumPropertyOptions
+    , pdHTMLPropertyOptions
+    , pdObjectPropertyOptions
+    , pdIsReturnable
+    , pdTimestampPropertyOptions
+    , pdIntegerPropertyOptions
+    , pdName
+    , pdIsRepeatable
+    , pdDoublePropertyOptions
+    , pdDisplayOptions
+    , pdTextPropertyOptions
+    , pdIsSortable
+    , pdIsFacetable
+    , pdBooleanPropertyOptions
+    , pdDatePropertyOptions
+
+    -- ** SortOptions
+    , SortOptions
+    , sortOptions
+    , soSortOrder
+    , soOperatorName
+
+    -- ** ObjectPropertyOptions
+    , ObjectPropertyOptions
+    , objectPropertyOptions
+    , opoSubobjectProperties
+
+    -- ** InteractionType
+    , InteractionType (..)
+
+    -- ** QueryOperatorType
+    , QueryOperatorType (..)
+
+    -- ** SearchResponse
+    , SearchResponse
+    , searchResponse
+    , sSpellResults
+    , sFacetResults
+    , sDebugInfo
+    , sResults
+    , sHasMoreResults
+    , sResultCounts
+    , sResultCountExact
+    , sResultCountEstimate
+    , sQueryInterpretation
+    , sStructuredResults
+    , sErrorInfo
+
+    -- ** SuggestResult
+    , SuggestResult
+    , suggestResult
+    , sPeopleSuggestion
+    , sQuerySuggestion
+    , sSuggestedQuery
+    , sSource
+
+    -- ** TextValues
+    , TextValues
+    , textValues
+    , tvValues
+
+    -- ** DriveLocationRestrict
+    , DriveLocationRestrict
+    , driveLocationRestrict
+    , dlrType
+
+    -- ** ListQuerySourcesResponse
+    , ListQuerySourcesResponse
+    , listQuerySourcesResponse
+    , lqsrNextPageToken
+    , lqsrSources
+
+    -- ** DoubleOperatorOptions
+    , DoubleOperatorOptions
+    , doubleOperatorOptions
+    , dOperatorName
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** Person
+    , Person
+    , person
+    , pEmailAddresses
+    , pPersonNames
+    , pPhotos
+    , pName
+    , pObfuscatedId
+
+    -- ** CompositeFilter
+    , CompositeFilter
+    , compositeFilter
+    , cfSubFilters
+    , cfLogicOperator
+
+    -- ** ResultDisplayLine
+    , ResultDisplayLine
+    , resultDisplayLine
+    , rdlFields
+
+    -- ** DoubleValues
+    , DoubleValues
+    , doubleValues
+    , dvValues
+
+    -- ** Snippet
+    , Snippet
+    , snippet
+    , sMatchRanges
+    , sSnippet
+
+    -- ** TextOperatorOptions
+    , TextOperatorOptions
+    , textOperatorOptions
+    , tooOperatorName
+    , tooExactMatchWithOperator
+
+    -- ** EnumPropertyOptionsOrderedRanking
+    , EnumPropertyOptionsOrderedRanking (..)
+
+    -- ** QueryInterpretationOptions
+    , QueryInterpretationOptions
+    , queryInterpretationOptions
+    , qioDisableNlInterpretation
+
+    -- ** ResetSearchApplicationRequest
+    , ResetSearchApplicationRequest
+    , resetSearchApplicationRequest
+    , rsarDebugOptions
+
+    -- ** IntegerPropertyOptionsOrderedRanking
+    , IntegerPropertyOptionsOrderedRanking (..)
+
+    -- ** ItemMetadata
+    , ItemMetadata
+    , itemMetadata
+    , imSourceRepositoryURL
+    , imHash
+    , imObjectType
+    , imContainerName
+    , imInteractions
+    , imMimeType
+    , imUpdateTime
+    , imKeywords
+    , imTitle
+    , imContentLanguage
+    , imSearchQualityMetadata
+    , imCreateTime
+
+    -- ** FilterOptions
+    , FilterOptions
+    , filterOptions
+    , foObjectType
+    , foFilter
+
+    -- ** StructuredResult
+    , StructuredResult
+    , structuredResult
+    , srPerson
+
+    -- ** ProcessingError
+    , ProcessingError
+    , processingError
+    , peFieldViolations
+    , peCode
+    , peErrorMessage
+
+    -- ** PushItemType
+    , PushItemType (..)
+
+    -- ** ListItemNamesForUnmAppedIdentityResponse
+    , ListItemNamesForUnmAppedIdentityResponse
+    , listItemNamesForUnmAppedIdentityResponse
+    , linfuairNextPageToken
+    , linfuairItemNames
+
+    -- ** CompositeFilterLogicOperator
+    , CompositeFilterLogicOperator (..)
+
+    -- ** ItemACL
+    , ItemACL
+    , itemACL
+    , iaOwners
+    , iaReaders
+    , iaACLInheritanceType
+    , iaInheritACLFrom
+    , iaDeniedReaders
+
+    -- ** Value
+    , Value
+    , value
+    , vIntegerValue
+    , vTimestampValue
+    , vDoubleValue
+    , vStringValue
+    , vDateValue
+    , vBooleanValue
+
+    -- ** FieldViolation
+    , FieldViolation
+    , fieldViolation
+    , fvField
+    , fvDescription
+
+    -- ** SourceScoringConfigSourceImportance
+    , SourceScoringConfigSourceImportance (..)
+
+    -- ** Metaline
+    , Metaline
+    , metaline
+    , mProperties
+
+    -- ** FacetBucket
+    , FacetBucket
+    , facetBucket
+    , fbValue
+    , fbCount
+    , fbPercentage
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** RetrievalImportanceImportance
+    , RetrievalImportanceImportance (..)
+
+    -- ** TimestampOperatorOptions
+    , TimestampOperatorOptions
+    , timestampOperatorOptions
+    , tOperatorName
+    , tLessThanOperatorName
+    , tGreaterThanOperatorName
+
+    -- ** ProcessingErrorCode
+    , ProcessingErrorCode (..)
+
+    -- ** IntegerOperatorOptions
+    , IntegerOperatorOptions
+    , integerOperatorOptions
+    , iooOperatorName
+    , iooLessThanOperatorName
+    , iooGreaterThanOperatorName
+
+    -- ** SortOptionsSortOrder
+    , SortOptionsSortOrder (..)
+
+    -- ** QuerySuggestion
+    , QuerySuggestion
+    , querySuggestion
+
+    -- ** ListSearchApplicationsResponse
+    , ListSearchApplicationsResponse
+    , listSearchApplicationsResponse
+    , lsarNextPageToken
+    , lsarSearchApplications
+
+    -- ** ResultDebugInfo
+    , ResultDebugInfo
+    , resultDebugInfo
+    , rdiFormattedDebugInfo
+
+    -- ** ItemCountByStatus
+    , ItemCountByStatus
+    , itemCountByStatus
+    , icbsCount
+    , icbsStatusCode
+
+    -- ** TimestampPropertyOptions
+    , TimestampPropertyOptions
+    , timestampPropertyOptions
+    , tpoOperatorOptions
+
+    -- ** ResultCounts
+    , ResultCounts
+    , resultCounts
+    , rcSourceResultCounts
+
+    -- ** FreshnessOptions
+    , FreshnessOptions
+    , freshnessOptions
+    , foFreshnessDuration
+    , foFreshnessProperty
+
+    -- ** DebugOptions
+    , DebugOptions
+    , debugOptions
+    , doEnableDebugging
+
+    -- ** IntegerPropertyOptions
+    , IntegerPropertyOptions
+    , integerPropertyOptions
+    , ipoMaximumValue
+    , ipoOrderedRanking
+    , ipoMinimumValue
+    , ipoOperatorOptions
+
+    -- ** DataSourceRestriction
+    , DataSourceRestriction
+    , dataSourceRestriction
+    , dsrFilterOptions
+    , dsrSource
+
+    -- ** Schema
+    , Schema
+    , schema
+    , sObjectDefinitions
+    , sOperationIds
+
+    -- ** DriveTimeSpanRestrict
+    , DriveTimeSpanRestrict
+    , driveTimeSpanRestrict
+    , dtsrType
+
+    -- ** ResultDisplayField
+    , ResultDisplayField
+    , resultDisplayField
+    , rdfProperty
+    , rdfOperatorName
+    , rdfLabel
+
+    -- ** UpdateSchemaRequest
+    , UpdateSchemaRequest
+    , updateSchemaRequest
+    , usrValidateOnly
+    , usrSchema
+    , usrDebugOptions
+
+    -- ** Date
+    , Date
+    , date
+    , dDay
+    , dYear
+    , dMonth
+
+    -- ** DisplayedProperty
+    , DisplayedProperty
+    , displayedProperty
+    , dpPropertyName
+
+    -- ** FacetResult
+    , FacetResult
+    , facetResult
+    , frSourceName
+    , frBuckets
+    , frObjectType
+    , frOperatorName
+
+    -- ** DriveMimeTypeRestrict
+    , DriveMimeTypeRestrict
+    , driveMimeTypeRestrict
+    , dmtrType
+
+    -- ** StructuredDataObject
+    , StructuredDataObject
+    , structuredDataObject
+    , sdoProperties
+
+    -- ** Media
+    , Media
+    , media
+    , mResourceName
+
+    -- ** ItemStructuredData
+    , ItemStructuredData
+    , itemStructuredData
+    , isdHash
+    , isdObject
+
+    -- ** DriveFollowUpRestrict
+    , DriveFollowUpRestrict
+    , driveFollowUpRestrict
+    , dfurType
+
+    -- ** DateValues
+    , DateValues
+    , dateValues
+    , dValues
+
+    -- ** NamedProperty
+    , NamedProperty
+    , namedProperty
+    , npDoubleValues
+    , npTextValues
+    , npDateValues
+    , npName
+    , npBooleanValue
+    , npObjectValues
+    , npHTMLValues
+    , npEnumValues
+    , npTimestampValues
+    , npIntegerValues
+
+    -- ** MatchRange
+    , MatchRange
+    , matchRange
+    , mrStart
+    , mrEnd
+
+    -- ** ResponseDebugInfo
+    , ResponseDebugInfo
+    , responseDebugInfo
+    , rFormattedDebugInfo
+
+    -- ** ListDataSourceResponse
+    , ListDataSourceResponse
+    , listDataSourceResponse
+    , ldsrNextPageToken
+    , ldsrSources
+
+    -- ** SearchRequest
+    , SearchRequest
+    , searchRequest
+    , srSortOptions
+    , srDataSourceRestrictions
+    , srQueryInterpretationOptions
+    , srStart
+    , srQuery
+    , srFacetOptions
+    , srPageSize
+    , srRequestOptions
+
+    -- ** Name
+    , Name
+    , name
+    , nDisplayName
+
+    -- ** SourceResultCount
+    , SourceResultCount
+    , sourceResultCount
+    , srcHasMoreResults
+    , srcResultCountExact
+    , srcResultCountEstimate
+    , srcSource
+
+    -- ** SourceConfig
+    , SourceConfig
+    , sourceConfig
+    , scCrowdingConfig
+    , scScoringConfig
+    , scSource
+
+    -- ** UnmAppedIdentityResolutionStatusCode
+    , UnmAppedIdentityResolutionStatusCode (..)
+
+    -- ** ListItemsResponse
+    , ListItemsResponse
+    , listItemsResponse
+    , lirNextPageToken
+    , lirItems
+
+    -- ** ScoringConfig
+    , ScoringConfig
+    , scoringConfig
+    , scDisablePersonalization
+    , scDisableFreshness
+
+    -- ** StartUploadItemRequest
+    , StartUploadItemRequest
+    , startUploadItemRequest
+    , suirDebugOptions
+    , suirConnectorName
+
+    -- ** UploadItemRef
+    , UploadItemRef
+    , uploadItemRef
+    , uirName
+
+    -- ** PushItemRequest
+    , PushItemRequest
+    , pushItemRequest
+    , pirDebugOptions
+    , pirConnectorName
+    , pirItem
+
+    -- ** DoublePropertyOptions
+    , DoublePropertyOptions
+    , doublePropertyOptions
+    , dpoOperatorOptions
+
+    -- ** QueryOperator
+    , QueryOperator
+    , queryOperator
+    , qoIsSuggestable
+    , qoIsReturnable
+    , qoIsRepeatable
+    , qoOperatorName
+    , qoIsSortable
+    , qoIsFacetable
+    , qoDisplayName
+    , qoLessThanOperatorName
+    , qoType
+    , qoEnumValues
+    , qoGreaterThanOperatorName
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** PollItemsResponse
+    , PollItemsResponse
+    , pollItemsResponse
+    , pirItems
+
+    -- ** SourceScoringConfig
+    , SourceScoringConfig
+    , sourceScoringConfig
+    , sscSourceImportance
+
+    -- ** EmailAddress
+    , EmailAddress
+    , emailAddress
+    , eaEmailAddress
+
+    -- ** RetrievalImportance
+    , RetrievalImportance
+    , retrievalImportance
+    , riImportance
+
+    -- ** DataSourceIndexStats
+    , DataSourceIndexStats
+    , dataSourceIndexStats
+    , dsisItemCountByStatus
+    , dsisDate
+
+    -- ** SourceCrowdingConfig
+    , SourceCrowdingConfig
+    , sourceCrowdingConfig
+    , sccField
+    , sccNumSuggestions
+    , sccNumResults
+    , sccSource
+
+    -- ** Interaction
+    , Interaction
+    , interaction
+    , iInteractionTime
+    , iPrincipal
+    , iType
+
+    -- ** Principal
+    , Principal
+    , principal
+    , pUserResourceName
+    , pGroupResourceName
+    , pGsuitePrincipal
+
+    -- ** IndexItemRequest
+    , IndexItemRequest
+    , indexItemRequest
+    , iirMode
+    , iirDebugOptions
+    , iirConnectorName
+    , iirItem
+
+    -- ** RepositoryErrorType
+    , RepositoryErrorType (..)
+
+    -- ** TextPropertyOptions
+    , TextPropertyOptions
+    , textPropertyOptions
+    , tRetrievalImportance
+    , tOperatorOptions
+
+    -- ** EnumValuePair
+    , EnumValuePair
+    , enumValuePair
+    , evpIntegerValue
+    , evpStringValue
+
+    -- ** DriveLocationRestrictType
+    , DriveLocationRestrictType (..)
+
+    -- ** Metadata
+    , Metadata
+    , metadata
+    , mObjectType
+    , mOwner
+    , mMimeType
+    , mUpdateTime
+    , mDisplayOptions
+    , mSource
+    , mCreateTime
+    , mFields
+
+    -- ** UpdateDataSourceRequest
+    , UpdateDataSourceRequest
+    , updateDataSourceRequest
+    , udsrDebugOptions
+    , udsrSource
+
+    -- ** DataSource
+    , DataSource
+    , dataSource
+    , dsShortName
+    , dsItemsVisibility
+    , dsOperationIds
+    , dsDisableServing
+    , dsIndexingServiceAccounts
+    , dsDisableModifications
+    , dsName
+    , dsDisplayName
+
+    -- ** HTMLValues
+    , HTMLValues
+    , htmlValues
+    , hvValues
+
+    -- ** HTMLOperatorOptions
+    , HTMLOperatorOptions
+    , htmlOperatorOptions
+    , hooOperatorName
+
+    -- ** Item
+    , Item
+    , item
+    , iStatus
+    , iItemType
+    , iPayload
+    , iStructuredData
+    , iQueue
+    , iContent
+    , iName
+    , iVersion
+    , iMetadata
+    , iACL
+
+    -- ** Source
+    , Source
+    , source
+    , sName
+    , sPredefinedSource
+
+    -- ** PropertyDisplayOptions
+    , PropertyDisplayOptions
+    , propertyDisplayOptions
+    , pdoDisplayLabel
+
+    -- ** ObjectValues
+    , ObjectValues
+    , objectValues
+    , ovValues
+
+    -- ** ObjectOptions
+    , ObjectOptions
+    , objectOptions
+    , ooFreshnessOptions
+    , ooDisplayOptions
+
+    -- ** FacetOptions
+    , FacetOptions
+    , facetOptions
+    , fSourceName
+    , fObjectType
+    , fOperatorName
+
+    -- ** SuggestRequest
+    , SuggestRequest
+    , suggestRequest
+    , sDataSourceRestrictions
+    , sQuery
+    , sRequestOptions
+
+    -- ** Filter
+    , Filter
+    , filter'
+    , fCompositeFilter
+    , fValueFilter
+
+    -- ** ObjectDefinition
+    , ObjectDefinition
+    , objectDefinition
+    , odName
+    , odOptions
+    , odPropertyDefinitions
+
+    -- ** ItemItemType
+    , ItemItemType (..)
+
+    -- ** ItemCountByStatusStatusCode
+    , ItemCountByStatusStatusCode (..)
+
+    -- ** PollItemsRequest
+    , PollItemsRequest
+    , pollItemsRequest
+    , pQueue
+    , pDebugOptions
+    , pConnectorName
+    , pStatusCodes
+    , pLimit
+
+    -- ** QueryInterpretation
+    , QueryInterpretation
+    , queryInterpretation
+    , qiInterpretedQuery
+    , qiInterpretationType
+
+    -- ** UnmAppedIdentity
+    , UnmAppedIdentity
+    , unmAppedIdentity
+    , uaiResolutionStatusCode
+    , uaiExternalIdentity
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- ** CustomerIndexStats
+    , CustomerIndexStats
+    , customerIndexStats
+    , cisItemCountByStatus
+    , cisDate
+
+    -- ** PushItem
+    , PushItem
+    , pushItem
+    , piRepositoryError
+    , piContentHash
+    , piStructuredDataHash
+    , piPayload
+    , piQueue
+    , piMetadataHash
+    , piType
+
+    -- ** ErrorMessage
+    , ErrorMessage
+    , errorMessage
+    , emSource
+    , emErrorMessage
+
+    -- ** BooleanPropertyOptions
+    , BooleanPropertyOptions
+    , booleanPropertyOptions
+    , bpoOperatorOptions
+
+    -- ** ValueFilter
+    , ValueFilter
+    , valueFilter
+    , vfValue
+    , vfOperatorName
+
+    -- ** EnumOperatorOptions
+    , EnumOperatorOptions
+    , enumOperatorOptions
+    , eooOperatorName
+
+    -- ** DatePropertyOptions
+    , DatePropertyOptions
+    , datePropertyOptions
+    , dOperatorOptions
+
+    -- ** EnumValues
+    , EnumValues
+    , enumValues
+    , evValues
+
+    -- ** GSuitePrincipal
+    , GSuitePrincipal
+    , gSuitePrincipal
+    , gspGsuiteGroupEmail
+    , gspGsuiteUserEmail
+    , gspGsuiteDomain
+
+    -- ** SearchQualityMetadata
+    , SearchQualityMetadata
+    , searchQualityMetadata
+    , sqmQuality
+
+    -- ** ItemContentContentFormat
+    , ItemContentContentFormat (..)
+
+    -- ** TimestampValues
+    , TimestampValues
+    , timestampValues
+    , tValues
+
+    -- ** ErrorInfo
+    , ErrorInfo
+    , errorInfo
+    , eiErrorMessages
+
+    -- ** ResultDisplayMetadata
+    , ResultDisplayMetadata
+    , resultDisplayMetadata
+    , rdmMetalines
+    , rdmObjectTypeLabel
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** IntegerValues
+    , IntegerValues
+    , integerValues
+    , ivValues
+
+    -- ** SearchItemsByViewURLResponse
+    , SearchItemsByViewURLResponse
+    , searchItemsByViewURLResponse
+    , sibvurNextPageToken
+    , sibvurItems
+
+    -- ** SourcePredefinedSource
+    , SourcePredefinedSource (..)
+
+    -- ** GetCustomerIndexStatsResponse
+    , GetCustomerIndexStatsResponse
+    , getCustomerIndexStatsResponse
+    , gcisrStats
+
+    -- ** RestrictItem
+    , RestrictItem
+    , restrictItem
+    , riDriveLocationRestrict
+    , riDriveTimeSpanRestrict
+    , riDriveMimeTypeRestrict
+    , riDriveFollowUpRestrict
+    , riSearchOperator
+
+    -- ** DriveTimeSpanRestrictType
+    , DriveTimeSpanRestrictType (..)
+
+    -- ** IndexItemRequestMode
+    , IndexItemRequestMode (..)
+
+    -- ** ItemACLACLInheritanceType
+    , ItemACLACLInheritanceType (..)
+
+    -- ** CheckAccessResponse
+    , CheckAccessResponse
+    , checkAccessResponse
+    , carHasAccess
+
+    -- ** RequestOptions
+    , RequestOptions
+    , requestOptions
+    , roLanguageCode
+    , roDebugOptions
+    , roTimeZone
+    , roSearchApplicationId
+
+    -- ** ItemStatus
+    , ItemStatus
+    , itemStatus
+    , isProcessingErrors
+    , isCode
+    , isRepositoryErrors
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudSearch.Debug.Datasources.Items.CheckAccess
+import           Network.Google.Resource.CloudSearch.Debug.Datasources.Items.SearchByViewURL
+import           Network.Google.Resource.CloudSearch.Debug.Datasources.Items.UnmAppedids.List
+import           Network.Google.Resource.CloudSearch.Debug.Identitysources.Items.ListForunmAppedidentity
+import           Network.Google.Resource.CloudSearch.Debug.Identitysources.UnmAppedids.List
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.DeleteSchema
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.GetSchema
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Delete
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.DeleteQueueItems
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Get
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Index
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.List
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Poll
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Push
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Unreserve
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Upload
+import           Network.Google.Resource.CloudSearch.Indexing.Datasources.UpdateSchema
+import           Network.Google.Resource.CloudSearch.Media.Upload
+import           Network.Google.Resource.CloudSearch.Operations.Get
+import           Network.Google.Resource.CloudSearch.Query.Search
+import           Network.Google.Resource.CloudSearch.Query.Sources.List
+import           Network.Google.Resource.CloudSearch.Query.Suggest
+import           Network.Google.Resource.CloudSearch.Settings.Datasources.Create
+import           Network.Google.Resource.CloudSearch.Settings.Datasources.Delete
+import           Network.Google.Resource.CloudSearch.Settings.Datasources.Get
+import           Network.Google.Resource.CloudSearch.Settings.Datasources.List
+import           Network.Google.Resource.CloudSearch.Settings.Datasources.Update
+import           Network.Google.Resource.CloudSearch.Settings.SearchApplications.Create
+import           Network.Google.Resource.CloudSearch.Settings.SearchApplications.Delete
+import           Network.Google.Resource.CloudSearch.Settings.SearchApplications.Get
+import           Network.Google.Resource.CloudSearch.Settings.SearchApplications.List
+import           Network.Google.Resource.CloudSearch.Settings.SearchApplications.Reset
+import           Network.Google.Resource.CloudSearch.Settings.SearchApplications.Update
+import           Network.Google.Resource.CloudSearch.Stats.GetIndex
+import           Network.Google.Resource.CloudSearch.Stats.Index.Datasources.Get
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Search API service.
+type CloudSearchAPI =
+     SettingsDatasourcesListResource :<|>
+       SettingsDatasourcesGetResource
+       :<|> SettingsDatasourcesCreateResource
+       :<|> SettingsDatasourcesDeleteResource
+       :<|> SettingsDatasourcesUpdateResource
+       :<|> SettingsSearchApplicationsListResource
+       :<|> SettingsSearchApplicationsGetResource
+       :<|> SettingsSearchApplicationsCreateResource
+       :<|> SettingsSearchApplicationsResetResource
+       :<|> SettingsSearchApplicationsDeleteResource
+       :<|> SettingsSearchApplicationsUpdateResource
+       :<|> StatsIndexDatasourcesGetResource
+       :<|> StatsGetIndexResource
+       :<|> DebugDatasourcesItemsUnmAppedidsListResource
+       :<|> DebugDatasourcesItemsCheckAccessResource
+       :<|> DebugDatasourcesItemsSearchByViewURLResource
+       :<|> DebugIdentitysourcesUnmAppedidsListResource
+       :<|>
+       DebugIdentitysourcesItemsListForunmAppedidentityResource
+       :<|> MediaUploadResource
+       :<|> QuerySourcesListResource
+       :<|> QuerySuggestResource
+       :<|> QuerySearchResource
+       :<|> OperationsGetResource
+       :<|> IndexingDatasourcesItemsListResource
+       :<|> IndexingDatasourcesItemsUnreserveResource
+       :<|> IndexingDatasourcesItemsGetResource
+       :<|> IndexingDatasourcesItemsDeleteQueueItemsResource
+       :<|> IndexingDatasourcesItemsPollResource
+       :<|> IndexingDatasourcesItemsUploadResource
+       :<|> IndexingDatasourcesItemsIndexResource
+       :<|> IndexingDatasourcesItemsPushResource
+       :<|> IndexingDatasourcesItemsDeleteResource
+       :<|> IndexingDatasourcesGetSchemaResource
+       :<|> IndexingDatasourcesUpdateSchemaResource
+       :<|> IndexingDatasourcesDeleteSchemaResource
diff --git a/gen/Network/Google/CloudSearch/Types.hs b/gen/Network/Google/CloudSearch/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudSearch/Types.hs
@@ -0,0 +1,1091 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudSearch.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.CloudSearch.Types
+    (
+    -- * Service Configuration
+      cloudSearchService
+
+    -- * OAuth Scopes
+    , cloudSearchSettingsQueryScope
+    , cloudSearchStatsIndexingScope
+    , cloudSearchIndexingScope
+    , cloudSearchScope
+    , cloudSearchSettingsIndexingScope
+    , cloudSearchQueryScope
+    , cloudSearchDebugScope
+    , cloudSearchStatsScope
+    , cloudSearchSettingsScope
+
+    -- * DriveMimeTypeRestrictType
+    , DriveMimeTypeRestrictType (..)
+
+    -- * DriveFollowUpRestrictType
+    , DriveFollowUpRestrictType (..)
+
+    -- * ItemContent
+    , ItemContent
+    , itemContent
+    , icHash
+    , icContentFormat
+    , icContentDataRef
+    , icInlineContent
+
+    -- * Photo
+    , Photo
+    , photo
+    , pURL
+
+    -- * SearchItemsByViewURLRequest
+    , SearchItemsByViewURLRequest
+    , searchItemsByViewURLRequest
+    , sibvurDebugOptions
+    , sibvurPageToken
+    , sibvurViewURL
+
+    -- * SearchApplication
+    , SearchApplication
+    , searchApplication
+    , saDataSourceRestrictions
+    , saOperationIds
+    , saDefaultFacetOptions
+    , saScoringConfig
+    , saName
+    , saSourceConfig
+    , saDisplayName
+    , saDefaultSortOptions
+
+    -- * BooleanOperatorOptions
+    , BooleanOperatorOptions
+    , booleanOperatorOptions
+    , booOperatorName
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * EnumPropertyOptions
+    , EnumPropertyOptions
+    , enumPropertyOptions
+    , epoPossibleValues
+    , epoOrderedRanking
+    , epoOperatorOptions
+
+    -- * ItemStatusCode
+    , ItemStatusCode (..)
+
+    -- * UnreserveItemsRequest
+    , UnreserveItemsRequest
+    , unreserveItemsRequest
+    , uirQueue
+    , uirDebugOptions
+    , uirConnectorName
+
+    -- * DateOperatorOptions
+    , DateOperatorOptions
+    , dateOperatorOptions
+    , dooOperatorName
+    , dooLessThanOperatorName
+    , dooGreaterThanOperatorName
+
+    -- * GetDataSourceIndexStatsResponse
+    , GetDataSourceIndexStatsResponse
+    , getDataSourceIndexStatsResponse
+    , gdsisrStats
+
+    -- * ObjectDisplayOptions
+    , ObjectDisplayOptions
+    , objectDisplayOptions
+    , odoMetalines
+    , odoObjectDisplayLabel
+
+    -- * QueryItem
+    , QueryItem
+    , queryItem
+    , qiIsSynthetic
+
+    -- * ListUnmAppedIdentitiesResponse
+    , ListUnmAppedIdentitiesResponse
+    , listUnmAppedIdentitiesResponse
+    , luairNextPageToken
+    , luairUnmAppedIdentities
+
+    -- * DeleteQueueItemsRequest
+    , DeleteQueueItemsRequest
+    , deleteQueueItemsRequest
+    , dqirQueue
+    , dqirDebugOptions
+    , dqirConnectorName
+
+    -- * SearchResult
+    , SearchResult
+    , searchResult
+    , srDebugInfo
+    , srSnippet
+    , srURL
+    , srClusteredResults
+    , srMetadata
+    , srTitle
+
+    -- * SpellResult
+    , SpellResult
+    , spellResult
+    , srSuggestedQuery
+
+    -- * PeopleSuggestion
+    , PeopleSuggestion
+    , peopleSuggestion
+    , psPerson
+
+    -- * QuerySource
+    , QuerySource
+    , querySource
+    , qsShortName
+    , qsDisplayName
+    , qsSource
+    , qsOperators
+
+    -- * SuggestResponse
+    , SuggestResponse
+    , suggestResponse
+    , srSuggestResults
+
+    -- * RepositoryError
+    , RepositoryError
+    , repositoryError
+    , reHTTPStatusCode
+    , reType
+    , reErrorMessage
+
+    -- * QueryInterpretationInterpretationType
+    , QueryInterpretationInterpretationType (..)
+
+    -- * HTMLPropertyOptions
+    , HTMLPropertyOptions
+    , htmlPropertyOptions
+    , hpoRetrievalImportance
+    , hpoOperatorOptions
+
+    -- * PropertyDefinition
+    , PropertyDefinition
+    , propertyDefinition
+    , pdEnumPropertyOptions
+    , pdHTMLPropertyOptions
+    , pdObjectPropertyOptions
+    , pdIsReturnable
+    , pdTimestampPropertyOptions
+    , pdIntegerPropertyOptions
+    , pdName
+    , pdIsRepeatable
+    , pdDoublePropertyOptions
+    , pdDisplayOptions
+    , pdTextPropertyOptions
+    , pdIsSortable
+    , pdIsFacetable
+    , pdBooleanPropertyOptions
+    , pdDatePropertyOptions
+
+    -- * SortOptions
+    , SortOptions
+    , sortOptions
+    , soSortOrder
+    , soOperatorName
+
+    -- * ObjectPropertyOptions
+    , ObjectPropertyOptions
+    , objectPropertyOptions
+    , opoSubobjectProperties
+
+    -- * InteractionType
+    , InteractionType (..)
+
+    -- * QueryOperatorType
+    , QueryOperatorType (..)
+
+    -- * SearchResponse
+    , SearchResponse
+    , searchResponse
+    , sSpellResults
+    , sFacetResults
+    , sDebugInfo
+    , sResults
+    , sHasMoreResults
+    , sResultCounts
+    , sResultCountExact
+    , sResultCountEstimate
+    , sQueryInterpretation
+    , sStructuredResults
+    , sErrorInfo
+
+    -- * SuggestResult
+    , SuggestResult
+    , suggestResult
+    , sPeopleSuggestion
+    , sQuerySuggestion
+    , sSuggestedQuery
+    , sSource
+
+    -- * TextValues
+    , TextValues
+    , textValues
+    , tvValues
+
+    -- * DriveLocationRestrict
+    , DriveLocationRestrict
+    , driveLocationRestrict
+    , dlrType
+
+    -- * ListQuerySourcesResponse
+    , ListQuerySourcesResponse
+    , listQuerySourcesResponse
+    , lqsrNextPageToken
+    , lqsrSources
+
+    -- * DoubleOperatorOptions
+    , DoubleOperatorOptions
+    , doubleOperatorOptions
+    , dOperatorName
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * Person
+    , Person
+    , person
+    , pEmailAddresses
+    , pPersonNames
+    , pPhotos
+    , pName
+    , pObfuscatedId
+
+    -- * CompositeFilter
+    , CompositeFilter
+    , compositeFilter
+    , cfSubFilters
+    , cfLogicOperator
+
+    -- * ResultDisplayLine
+    , ResultDisplayLine
+    , resultDisplayLine
+    , rdlFields
+
+    -- * DoubleValues
+    , DoubleValues
+    , doubleValues
+    , dvValues
+
+    -- * Snippet
+    , Snippet
+    , snippet
+    , sMatchRanges
+    , sSnippet
+
+    -- * TextOperatorOptions
+    , TextOperatorOptions
+    , textOperatorOptions
+    , tooOperatorName
+    , tooExactMatchWithOperator
+
+    -- * EnumPropertyOptionsOrderedRanking
+    , EnumPropertyOptionsOrderedRanking (..)
+
+    -- * QueryInterpretationOptions
+    , QueryInterpretationOptions
+    , queryInterpretationOptions
+    , qioDisableNlInterpretation
+
+    -- * ResetSearchApplicationRequest
+    , ResetSearchApplicationRequest
+    , resetSearchApplicationRequest
+    , rsarDebugOptions
+
+    -- * IntegerPropertyOptionsOrderedRanking
+    , IntegerPropertyOptionsOrderedRanking (..)
+
+    -- * ItemMetadata
+    , ItemMetadata
+    , itemMetadata
+    , imSourceRepositoryURL
+    , imHash
+    , imObjectType
+    , imContainerName
+    , imInteractions
+    , imMimeType
+    , imUpdateTime
+    , imKeywords
+    , imTitle
+    , imContentLanguage
+    , imSearchQualityMetadata
+    , imCreateTime
+
+    -- * FilterOptions
+    , FilterOptions
+    , filterOptions
+    , foObjectType
+    , foFilter
+
+    -- * StructuredResult
+    , StructuredResult
+    , structuredResult
+    , srPerson
+
+    -- * ProcessingError
+    , ProcessingError
+    , processingError
+    , peFieldViolations
+    , peCode
+    , peErrorMessage
+
+    -- * PushItemType
+    , PushItemType (..)
+
+    -- * ListItemNamesForUnmAppedIdentityResponse
+    , ListItemNamesForUnmAppedIdentityResponse
+    , listItemNamesForUnmAppedIdentityResponse
+    , linfuairNextPageToken
+    , linfuairItemNames
+
+    -- * CompositeFilterLogicOperator
+    , CompositeFilterLogicOperator (..)
+
+    -- * ItemACL
+    , ItemACL
+    , itemACL
+    , iaOwners
+    , iaReaders
+    , iaACLInheritanceType
+    , iaInheritACLFrom
+    , iaDeniedReaders
+
+    -- * Value
+    , Value
+    , value
+    , vIntegerValue
+    , vTimestampValue
+    , vDoubleValue
+    , vStringValue
+    , vDateValue
+    , vBooleanValue
+
+    -- * FieldViolation
+    , FieldViolation
+    , fieldViolation
+    , fvField
+    , fvDescription
+
+    -- * SourceScoringConfigSourceImportance
+    , SourceScoringConfigSourceImportance (..)
+
+    -- * Metaline
+    , Metaline
+    , metaline
+    , mProperties
+
+    -- * FacetBucket
+    , FacetBucket
+    , facetBucket
+    , fbValue
+    , fbCount
+    , fbPercentage
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * RetrievalImportanceImportance
+    , RetrievalImportanceImportance (..)
+
+    -- * TimestampOperatorOptions
+    , TimestampOperatorOptions
+    , timestampOperatorOptions
+    , tOperatorName
+    , tLessThanOperatorName
+    , tGreaterThanOperatorName
+
+    -- * ProcessingErrorCode
+    , ProcessingErrorCode (..)
+
+    -- * IntegerOperatorOptions
+    , IntegerOperatorOptions
+    , integerOperatorOptions
+    , iooOperatorName
+    , iooLessThanOperatorName
+    , iooGreaterThanOperatorName
+
+    -- * SortOptionsSortOrder
+    , SortOptionsSortOrder (..)
+
+    -- * QuerySuggestion
+    , QuerySuggestion
+    , querySuggestion
+
+    -- * ListSearchApplicationsResponse
+    , ListSearchApplicationsResponse
+    , listSearchApplicationsResponse
+    , lsarNextPageToken
+    , lsarSearchApplications
+
+    -- * ResultDebugInfo
+    , ResultDebugInfo
+    , resultDebugInfo
+    , rdiFormattedDebugInfo
+
+    -- * ItemCountByStatus
+    , ItemCountByStatus
+    , itemCountByStatus
+    , icbsCount
+    , icbsStatusCode
+
+    -- * TimestampPropertyOptions
+    , TimestampPropertyOptions
+    , timestampPropertyOptions
+    , tpoOperatorOptions
+
+    -- * ResultCounts
+    , ResultCounts
+    , resultCounts
+    , rcSourceResultCounts
+
+    -- * FreshnessOptions
+    , FreshnessOptions
+    , freshnessOptions
+    , foFreshnessDuration
+    , foFreshnessProperty
+
+    -- * DebugOptions
+    , DebugOptions
+    , debugOptions
+    , doEnableDebugging
+
+    -- * IntegerPropertyOptions
+    , IntegerPropertyOptions
+    , integerPropertyOptions
+    , ipoMaximumValue
+    , ipoOrderedRanking
+    , ipoMinimumValue
+    , ipoOperatorOptions
+
+    -- * DataSourceRestriction
+    , DataSourceRestriction
+    , dataSourceRestriction
+    , dsrFilterOptions
+    , dsrSource
+
+    -- * Schema
+    , Schema
+    , schema
+    , sObjectDefinitions
+    , sOperationIds
+
+    -- * DriveTimeSpanRestrict
+    , DriveTimeSpanRestrict
+    , driveTimeSpanRestrict
+    , dtsrType
+
+    -- * ResultDisplayField
+    , ResultDisplayField
+    , resultDisplayField
+    , rdfProperty
+    , rdfOperatorName
+    , rdfLabel
+
+    -- * UpdateSchemaRequest
+    , UpdateSchemaRequest
+    , updateSchemaRequest
+    , usrValidateOnly
+    , usrSchema
+    , usrDebugOptions
+
+    -- * Date
+    , Date
+    , date
+    , dDay
+    , dYear
+    , dMonth
+
+    -- * DisplayedProperty
+    , DisplayedProperty
+    , displayedProperty
+    , dpPropertyName
+
+    -- * FacetResult
+    , FacetResult
+    , facetResult
+    , frSourceName
+    , frBuckets
+    , frObjectType
+    , frOperatorName
+
+    -- * DriveMimeTypeRestrict
+    , DriveMimeTypeRestrict
+    , driveMimeTypeRestrict
+    , dmtrType
+
+    -- * StructuredDataObject
+    , StructuredDataObject
+    , structuredDataObject
+    , sdoProperties
+
+    -- * Media
+    , Media
+    , media
+    , mResourceName
+
+    -- * ItemStructuredData
+    , ItemStructuredData
+    , itemStructuredData
+    , isdHash
+    , isdObject
+
+    -- * DriveFollowUpRestrict
+    , DriveFollowUpRestrict
+    , driveFollowUpRestrict
+    , dfurType
+
+    -- * DateValues
+    , DateValues
+    , dateValues
+    , dValues
+
+    -- * NamedProperty
+    , NamedProperty
+    , namedProperty
+    , npDoubleValues
+    , npTextValues
+    , npDateValues
+    , npName
+    , npBooleanValue
+    , npObjectValues
+    , npHTMLValues
+    , npEnumValues
+    , npTimestampValues
+    , npIntegerValues
+
+    -- * MatchRange
+    , MatchRange
+    , matchRange
+    , mrStart
+    , mrEnd
+
+    -- * ResponseDebugInfo
+    , ResponseDebugInfo
+    , responseDebugInfo
+    , rFormattedDebugInfo
+
+    -- * ListDataSourceResponse
+    , ListDataSourceResponse
+    , listDataSourceResponse
+    , ldsrNextPageToken
+    , ldsrSources
+
+    -- * SearchRequest
+    , SearchRequest
+    , searchRequest
+    , srSortOptions
+    , srDataSourceRestrictions
+    , srQueryInterpretationOptions
+    , srStart
+    , srQuery
+    , srFacetOptions
+    , srPageSize
+    , srRequestOptions
+
+    -- * Name
+    , Name
+    , name
+    , nDisplayName
+
+    -- * SourceResultCount
+    , SourceResultCount
+    , sourceResultCount
+    , srcHasMoreResults
+    , srcResultCountExact
+    , srcResultCountEstimate
+    , srcSource
+
+    -- * SourceConfig
+    , SourceConfig
+    , sourceConfig
+    , scCrowdingConfig
+    , scScoringConfig
+    , scSource
+
+    -- * UnmAppedIdentityResolutionStatusCode
+    , UnmAppedIdentityResolutionStatusCode (..)
+
+    -- * ListItemsResponse
+    , ListItemsResponse
+    , listItemsResponse
+    , lirNextPageToken
+    , lirItems
+
+    -- * ScoringConfig
+    , ScoringConfig
+    , scoringConfig
+    , scDisablePersonalization
+    , scDisableFreshness
+
+    -- * StartUploadItemRequest
+    , StartUploadItemRequest
+    , startUploadItemRequest
+    , suirDebugOptions
+    , suirConnectorName
+
+    -- * UploadItemRef
+    , UploadItemRef
+    , uploadItemRef
+    , uirName
+
+    -- * PushItemRequest
+    , PushItemRequest
+    , pushItemRequest
+    , pirDebugOptions
+    , pirConnectorName
+    , pirItem
+
+    -- * DoublePropertyOptions
+    , DoublePropertyOptions
+    , doublePropertyOptions
+    , dpoOperatorOptions
+
+    -- * QueryOperator
+    , QueryOperator
+    , queryOperator
+    , qoIsSuggestable
+    , qoIsReturnable
+    , qoIsRepeatable
+    , qoOperatorName
+    , qoIsSortable
+    , qoIsFacetable
+    , qoDisplayName
+    , qoLessThanOperatorName
+    , qoType
+    , qoEnumValues
+    , qoGreaterThanOperatorName
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * PollItemsResponse
+    , PollItemsResponse
+    , pollItemsResponse
+    , pirItems
+
+    -- * SourceScoringConfig
+    , SourceScoringConfig
+    , sourceScoringConfig
+    , sscSourceImportance
+
+    -- * EmailAddress
+    , EmailAddress
+    , emailAddress
+    , eaEmailAddress
+
+    -- * RetrievalImportance
+    , RetrievalImportance
+    , retrievalImportance
+    , riImportance
+
+    -- * DataSourceIndexStats
+    , DataSourceIndexStats
+    , dataSourceIndexStats
+    , dsisItemCountByStatus
+    , dsisDate
+
+    -- * SourceCrowdingConfig
+    , SourceCrowdingConfig
+    , sourceCrowdingConfig
+    , sccField
+    , sccNumSuggestions
+    , sccNumResults
+    , sccSource
+
+    -- * Interaction
+    , Interaction
+    , interaction
+    , iInteractionTime
+    , iPrincipal
+    , iType
+
+    -- * Principal
+    , Principal
+    , principal
+    , pUserResourceName
+    , pGroupResourceName
+    , pGsuitePrincipal
+
+    -- * IndexItemRequest
+    , IndexItemRequest
+    , indexItemRequest
+    , iirMode
+    , iirDebugOptions
+    , iirConnectorName
+    , iirItem
+
+    -- * RepositoryErrorType
+    , RepositoryErrorType (..)
+
+    -- * TextPropertyOptions
+    , TextPropertyOptions
+    , textPropertyOptions
+    , tRetrievalImportance
+    , tOperatorOptions
+
+    -- * EnumValuePair
+    , EnumValuePair
+    , enumValuePair
+    , evpIntegerValue
+    , evpStringValue
+
+    -- * DriveLocationRestrictType
+    , DriveLocationRestrictType (..)
+
+    -- * Metadata
+    , Metadata
+    , metadata
+    , mObjectType
+    , mOwner
+    , mMimeType
+    , mUpdateTime
+    , mDisplayOptions
+    , mSource
+    , mCreateTime
+    , mFields
+
+    -- * UpdateDataSourceRequest
+    , UpdateDataSourceRequest
+    , updateDataSourceRequest
+    , udsrDebugOptions
+    , udsrSource
+
+    -- * DataSource
+    , DataSource
+    , dataSource
+    , dsShortName
+    , dsItemsVisibility
+    , dsOperationIds
+    , dsDisableServing
+    , dsIndexingServiceAccounts
+    , dsDisableModifications
+    , dsName
+    , dsDisplayName
+
+    -- * HTMLValues
+    , HTMLValues
+    , htmlValues
+    , hvValues
+
+    -- * HTMLOperatorOptions
+    , HTMLOperatorOptions
+    , htmlOperatorOptions
+    , hooOperatorName
+
+    -- * Item
+    , Item
+    , item
+    , iStatus
+    , iItemType
+    , iPayload
+    , iStructuredData
+    , iQueue
+    , iContent
+    , iName
+    , iVersion
+    , iMetadata
+    , iACL
+
+    -- * Source
+    , Source
+    , source
+    , sName
+    , sPredefinedSource
+
+    -- * PropertyDisplayOptions
+    , PropertyDisplayOptions
+    , propertyDisplayOptions
+    , pdoDisplayLabel
+
+    -- * ObjectValues
+    , ObjectValues
+    , objectValues
+    , ovValues
+
+    -- * ObjectOptions
+    , ObjectOptions
+    , objectOptions
+    , ooFreshnessOptions
+    , ooDisplayOptions
+
+    -- * FacetOptions
+    , FacetOptions
+    , facetOptions
+    , fSourceName
+    , fObjectType
+    , fOperatorName
+
+    -- * SuggestRequest
+    , SuggestRequest
+    , suggestRequest
+    , sDataSourceRestrictions
+    , sQuery
+    , sRequestOptions
+
+    -- * Filter
+    , Filter
+    , filter'
+    , fCompositeFilter
+    , fValueFilter
+
+    -- * ObjectDefinition
+    , ObjectDefinition
+    , objectDefinition
+    , odName
+    , odOptions
+    , odPropertyDefinitions
+
+    -- * ItemItemType
+    , ItemItemType (..)
+
+    -- * ItemCountByStatusStatusCode
+    , ItemCountByStatusStatusCode (..)
+
+    -- * PollItemsRequest
+    , PollItemsRequest
+    , pollItemsRequest
+    , pQueue
+    , pDebugOptions
+    , pConnectorName
+    , pStatusCodes
+    , pLimit
+
+    -- * QueryInterpretation
+    , QueryInterpretation
+    , queryInterpretation
+    , qiInterpretedQuery
+    , qiInterpretationType
+
+    -- * UnmAppedIdentity
+    , UnmAppedIdentity
+    , unmAppedIdentity
+    , uaiResolutionStatusCode
+    , uaiExternalIdentity
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- * CustomerIndexStats
+    , CustomerIndexStats
+    , customerIndexStats
+    , cisItemCountByStatus
+    , cisDate
+
+    -- * PushItem
+    , PushItem
+    , pushItem
+    , piRepositoryError
+    , piContentHash
+    , piStructuredDataHash
+    , piPayload
+    , piQueue
+    , piMetadataHash
+    , piType
+
+    -- * ErrorMessage
+    , ErrorMessage
+    , errorMessage
+    , emSource
+    , emErrorMessage
+
+    -- * BooleanPropertyOptions
+    , BooleanPropertyOptions
+    , booleanPropertyOptions
+    , bpoOperatorOptions
+
+    -- * ValueFilter
+    , ValueFilter
+    , valueFilter
+    , vfValue
+    , vfOperatorName
+
+    -- * EnumOperatorOptions
+    , EnumOperatorOptions
+    , enumOperatorOptions
+    , eooOperatorName
+
+    -- * DatePropertyOptions
+    , DatePropertyOptions
+    , datePropertyOptions
+    , dOperatorOptions
+
+    -- * EnumValues
+    , EnumValues
+    , enumValues
+    , evValues
+
+    -- * GSuitePrincipal
+    , GSuitePrincipal
+    , gSuitePrincipal
+    , gspGsuiteGroupEmail
+    , gspGsuiteUserEmail
+    , gspGsuiteDomain
+
+    -- * SearchQualityMetadata
+    , SearchQualityMetadata
+    , searchQualityMetadata
+    , sqmQuality
+
+    -- * ItemContentContentFormat
+    , ItemContentContentFormat (..)
+
+    -- * TimestampValues
+    , TimestampValues
+    , timestampValues
+    , tValues
+
+    -- * ErrorInfo
+    , ErrorInfo
+    , errorInfo
+    , eiErrorMessages
+
+    -- * ResultDisplayMetadata
+    , ResultDisplayMetadata
+    , resultDisplayMetadata
+    , rdmMetalines
+    , rdmObjectTypeLabel
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * IntegerValues
+    , IntegerValues
+    , integerValues
+    , ivValues
+
+    -- * SearchItemsByViewURLResponse
+    , SearchItemsByViewURLResponse
+    , searchItemsByViewURLResponse
+    , sibvurNextPageToken
+    , sibvurItems
+
+    -- * SourcePredefinedSource
+    , SourcePredefinedSource (..)
+
+    -- * GetCustomerIndexStatsResponse
+    , GetCustomerIndexStatsResponse
+    , getCustomerIndexStatsResponse
+    , gcisrStats
+
+    -- * RestrictItem
+    , RestrictItem
+    , restrictItem
+    , riDriveLocationRestrict
+    , riDriveTimeSpanRestrict
+    , riDriveMimeTypeRestrict
+    , riDriveFollowUpRestrict
+    , riSearchOperator
+
+    -- * DriveTimeSpanRestrictType
+    , DriveTimeSpanRestrictType (..)
+
+    -- * IndexItemRequestMode
+    , IndexItemRequestMode (..)
+
+    -- * ItemACLACLInheritanceType
+    , ItemACLACLInheritanceType (..)
+
+    -- * CheckAccessResponse
+    , CheckAccessResponse
+    , checkAccessResponse
+    , carHasAccess
+
+    -- * RequestOptions
+    , RequestOptions
+    , requestOptions
+    , roLanguageCode
+    , roDebugOptions
+    , roTimeZone
+    , roSearchApplicationId
+
+    -- * ItemStatus
+    , ItemStatus
+    , itemStatus
+    , isProcessingErrors
+    , isCode
+    , isRepositoryErrors
+    ) where
+
+import           Network.Google.CloudSearch.Types.Product
+import           Network.Google.CloudSearch.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Cloud Search API. This contains the host and root path used as a starting point for constructing service requests.
+cloudSearchService :: ServiceConfig
+cloudSearchService
+  = defaultService (ServiceId "cloudsearch:v1")
+      "cloudsearch.googleapis.com"
+
+-- | New Service:
+-- https:\/\/www.googleapis.com\/auth\/cloud_search.settings.query
+cloudSearchSettingsQueryScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.settings.query"]
+cloudSearchSettingsQueryScope = Proxy;
+
+-- | New Service:
+-- https:\/\/www.googleapis.com\/auth\/cloud_search.stats.indexing
+cloudSearchStatsIndexingScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.stats.indexing"]
+cloudSearchStatsIndexingScope = Proxy;
+
+-- | New Service: https:\/\/www.googleapis.com\/auth\/cloud_search.indexing
+cloudSearchIndexingScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.indexing"]
+cloudSearchIndexingScope = Proxy;
+
+-- | Index and serve your organization\'s data with Cloud Search
+cloudSearchScope :: Proxy '["https://www.googleapis.com/auth/cloud_search"]
+cloudSearchScope = Proxy;
+
+-- | New Service:
+-- https:\/\/www.googleapis.com\/auth\/cloud_search.settings.indexing
+cloudSearchSettingsIndexingScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+cloudSearchSettingsIndexingScope = Proxy;
+
+-- | Search your organization\'s data in the Cloud Search index
+cloudSearchQueryScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.query"]
+cloudSearchQueryScope = Proxy;
+
+-- | New Service: https:\/\/www.googleapis.com\/auth\/cloud_search.debug
+cloudSearchDebugScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.debug"]
+cloudSearchDebugScope = Proxy;
+
+-- | New Service: https:\/\/www.googleapis.com\/auth\/cloud_search.stats
+cloudSearchStatsScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.stats"]
+cloudSearchStatsScope = Proxy;
+
+-- | New Service: https:\/\/www.googleapis.com\/auth\/cloud_search.settings
+cloudSearchSettingsScope :: Proxy '["https://www.googleapis.com/auth/cloud_search.settings"]
+cloudSearchSettingsScope = Proxy;
diff --git a/gen/Network/Google/CloudSearch/Types/Product.hs b/gen/Network/Google/CloudSearch/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudSearch/Types/Product.hs
@@ -0,0 +1,8432 @@
+{-# 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.CloudSearch.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.CloudSearch.Types.Product where
+
+import           Network.Google.CloudSearch.Types.Sum
+import           Network.Google.Prelude
+
+-- | Content of an item to be indexed and surfaced by Cloud Search.
+--
+-- /See:/ 'itemContent' smart constructor.
+data ItemContent = ItemContent'
+    { _icHash           :: !(Maybe Text)
+    , _icContentFormat  :: !(Maybe ItemContentContentFormat)
+    , _icContentDataRef :: !(Maybe UploadItemRef)
+    , _icInlineContent  :: !(Maybe Bytes)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ItemContent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icHash'
+--
+-- * 'icContentFormat'
+--
+-- * 'icContentDataRef'
+--
+-- * 'icInlineContent'
+itemContent
+    :: ItemContent
+itemContent =
+    ItemContent'
+    { _icHash = Nothing
+    , _icContentFormat = Nothing
+    , _icContentDataRef = Nothing
+    , _icInlineContent = Nothing
+    }
+
+-- | Hashing info calculated and provided by the API client for content. Can
+-- be used with the items.push method to calculate modified state. The
+-- maximum length is 2048 characters.
+icHash :: Lens' ItemContent (Maybe Text)
+icHash = lens _icHash (\ s a -> s{_icHash = a})
+
+icContentFormat :: Lens' ItemContent (Maybe ItemContentContentFormat)
+icContentFormat
+  = lens _icContentFormat
+      (\ s a -> s{_icContentFormat = a})
+
+-- | Upload reference ID of a previously uploaded content via write method.
+icContentDataRef :: Lens' ItemContent (Maybe UploadItemRef)
+icContentDataRef
+  = lens _icContentDataRef
+      (\ s a -> s{_icContentDataRef = a})
+
+-- | Content that is supplied inlined within the update method. The maximum
+-- length is 102400 bytes (100 KiB).
+icInlineContent :: Lens' ItemContent (Maybe ByteString)
+icInlineContent
+  = lens _icInlineContent
+      (\ s a -> s{_icInlineContent = a})
+      . mapping _Bytes
+
+instance FromJSON ItemContent where
+        parseJSON
+          = withObject "ItemContent"
+              (\ o ->
+                 ItemContent' <$>
+                   (o .:? "hash") <*> (o .:? "contentFormat") <*>
+                     (o .:? "contentDataRef")
+                     <*> (o .:? "inlineContent"))
+
+instance ToJSON ItemContent where
+        toJSON ItemContent'{..}
+          = object
+              (catMaybes
+                 [("hash" .=) <$> _icHash,
+                  ("contentFormat" .=) <$> _icContentFormat,
+                  ("contentDataRef" .=) <$> _icContentDataRef,
+                  ("inlineContent" .=) <$> _icInlineContent])
+
+-- | A person\'s photo.
+--
+-- /See:/ 'photo' smart constructor.
+newtype Photo = Photo'
+    { _pURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Photo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pURL'
+photo
+    :: Photo
+photo =
+    Photo'
+    { _pURL = Nothing
+    }
+
+-- | The URL of the photo.
+pURL :: Lens' Photo (Maybe Text)
+pURL = lens _pURL (\ s a -> s{_pURL = a})
+
+instance FromJSON Photo where
+        parseJSON
+          = withObject "Photo"
+              (\ o -> Photo' <$> (o .:? "url"))
+
+instance ToJSON Photo where
+        toJSON Photo'{..}
+          = object (catMaybes [("url" .=) <$> _pURL])
+
+--
+-- /See:/ 'searchItemsByViewURLRequest' smart constructor.
+data SearchItemsByViewURLRequest = SearchItemsByViewURLRequest'
+    { _sibvurDebugOptions :: !(Maybe DebugOptions)
+    , _sibvurPageToken    :: !(Maybe Text)
+    , _sibvurViewURL      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchItemsByViewURLRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sibvurDebugOptions'
+--
+-- * 'sibvurPageToken'
+--
+-- * 'sibvurViewURL'
+searchItemsByViewURLRequest
+    :: SearchItemsByViewURLRequest
+searchItemsByViewURLRequest =
+    SearchItemsByViewURLRequest'
+    { _sibvurDebugOptions = Nothing
+    , _sibvurPageToken = Nothing
+    , _sibvurViewURL = Nothing
+    }
+
+-- | Common debug options.
+sibvurDebugOptions :: Lens' SearchItemsByViewURLRequest (Maybe DebugOptions)
+sibvurDebugOptions
+  = lens _sibvurDebugOptions
+      (\ s a -> s{_sibvurDebugOptions = a})
+
+-- | The next_page_token value returned from a previous request, if any.
+sibvurPageToken :: Lens' SearchItemsByViewURLRequest (Maybe Text)
+sibvurPageToken
+  = lens _sibvurPageToken
+      (\ s a -> s{_sibvurPageToken = a})
+
+-- | Specify the full view URL to find the corresponding item. The maximum
+-- length is 2048 characters.
+sibvurViewURL :: Lens' SearchItemsByViewURLRequest (Maybe Text)
+sibvurViewURL
+  = lens _sibvurViewURL
+      (\ s a -> s{_sibvurViewURL = a})
+
+instance FromJSON SearchItemsByViewURLRequest where
+        parseJSON
+          = withObject "SearchItemsByViewURLRequest"
+              (\ o ->
+                 SearchItemsByViewURLRequest' <$>
+                   (o .:? "debugOptions") <*> (o .:? "pageToken") <*>
+                     (o .:? "viewUrl"))
+
+instance ToJSON SearchItemsByViewURLRequest where
+        toJSON SearchItemsByViewURLRequest'{..}
+          = object
+              (catMaybes
+                 [("debugOptions" .=) <$> _sibvurDebugOptions,
+                  ("pageToken" .=) <$> _sibvurPageToken,
+                  ("viewUrl" .=) <$> _sibvurViewURL])
+
+-- | SearchApplication
+--
+-- /See:/ 'searchApplication' smart constructor.
+data SearchApplication = SearchApplication'
+    { _saDataSourceRestrictions :: !(Maybe [DataSourceRestriction])
+    , _saOperationIds           :: !(Maybe [Text])
+    , _saDefaultFacetOptions    :: !(Maybe [FacetOptions])
+    , _saScoringConfig          :: !(Maybe ScoringConfig)
+    , _saName                   :: !(Maybe Text)
+    , _saSourceConfig           :: !(Maybe [SourceConfig])
+    , _saDisplayName            :: !(Maybe Text)
+    , _saDefaultSortOptions     :: !(Maybe SortOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchApplication' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saDataSourceRestrictions'
+--
+-- * 'saOperationIds'
+--
+-- * 'saDefaultFacetOptions'
+--
+-- * 'saScoringConfig'
+--
+-- * 'saName'
+--
+-- * 'saSourceConfig'
+--
+-- * 'saDisplayName'
+--
+-- * 'saDefaultSortOptions'
+searchApplication
+    :: SearchApplication
+searchApplication =
+    SearchApplication'
+    { _saDataSourceRestrictions = Nothing
+    , _saOperationIds = Nothing
+    , _saDefaultFacetOptions = Nothing
+    , _saScoringConfig = Nothing
+    , _saName = Nothing
+    , _saSourceConfig = Nothing
+    , _saDisplayName = Nothing
+    , _saDefaultSortOptions = Nothing
+    }
+
+-- | Retrictions applied to the configurations. The maximum number of
+-- elements is 10.
+saDataSourceRestrictions :: Lens' SearchApplication [DataSourceRestriction]
+saDataSourceRestrictions
+  = lens _saDataSourceRestrictions
+      (\ s a -> s{_saDataSourceRestrictions = a})
+      . _Default
+      . _Coerce
+
+-- | IDs of the Long Running Operations (LROs) currently running for this
+-- schema. Output only field.
+saOperationIds :: Lens' SearchApplication [Text]
+saOperationIds
+  = lens _saOperationIds
+      (\ s a -> s{_saOperationIds = a})
+      . _Default
+      . _Coerce
+
+-- | The default fields for returning facet results. The sources specified
+-- here also have been included in data_source_restrictions above.
+saDefaultFacetOptions :: Lens' SearchApplication [FacetOptions]
+saDefaultFacetOptions
+  = lens _saDefaultFacetOptions
+      (\ s a -> s{_saDefaultFacetOptions = a})
+      . _Default
+      . _Coerce
+
+-- | Configuration for ranking results.
+saScoringConfig :: Lens' SearchApplication (Maybe ScoringConfig)
+saScoringConfig
+  = lens _saScoringConfig
+      (\ s a -> s{_saScoringConfig = a})
+
+-- | Name of the Search Application.
+-- Format: searchapplications\/{application_id}.
+saName :: Lens' SearchApplication (Maybe Text)
+saName = lens _saName (\ s a -> s{_saName = a})
+
+-- | Configuration for a sources specified in data_source_restrictions.
+saSourceConfig :: Lens' SearchApplication [SourceConfig]
+saSourceConfig
+  = lens _saSourceConfig
+      (\ s a -> s{_saSourceConfig = a})
+      . _Default
+      . _Coerce
+
+-- | Display name of the Search Application. The maximum length is 300
+-- characters.
+saDisplayName :: Lens' SearchApplication (Maybe Text)
+saDisplayName
+  = lens _saDisplayName
+      (\ s a -> s{_saDisplayName = a})
+
+-- | The default options for sorting the search results
+saDefaultSortOptions :: Lens' SearchApplication (Maybe SortOptions)
+saDefaultSortOptions
+  = lens _saDefaultSortOptions
+      (\ s a -> s{_saDefaultSortOptions = a})
+
+instance FromJSON SearchApplication where
+        parseJSON
+          = withObject "SearchApplication"
+              (\ o ->
+                 SearchApplication' <$>
+                   (o .:? "dataSourceRestrictions" .!= mempty) <*>
+                     (o .:? "operationIds" .!= mempty)
+                     <*> (o .:? "defaultFacetOptions" .!= mempty)
+                     <*> (o .:? "scoringConfig")
+                     <*> (o .:? "name")
+                     <*> (o .:? "sourceConfig" .!= mempty)
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "defaultSortOptions"))
+
+instance ToJSON SearchApplication where
+        toJSON SearchApplication'{..}
+          = object
+              (catMaybes
+                 [("dataSourceRestrictions" .=) <$>
+                    _saDataSourceRestrictions,
+                  ("operationIds" .=) <$> _saOperationIds,
+                  ("defaultFacetOptions" .=) <$>
+                    _saDefaultFacetOptions,
+                  ("scoringConfig" .=) <$> _saScoringConfig,
+                  ("name" .=) <$> _saName,
+                  ("sourceConfig" .=) <$> _saSourceConfig,
+                  ("displayName" .=) <$> _saDisplayName,
+                  ("defaultSortOptions" .=) <$> _saDefaultSortOptions])
+
+-- | Used to provide a search operator for boolean properties. This is
+-- optional. Search operators let users restrict the query to specific
+-- fields relevant to the type of item being searched.
+--
+-- /See:/ 'booleanOperatorOptions' smart constructor.
+newtype BooleanOperatorOptions = BooleanOperatorOptions'
+    { _booOperatorName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooleanOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'booOperatorName'
+booleanOperatorOptions
+    :: BooleanOperatorOptions
+booleanOperatorOptions =
+    BooleanOperatorOptions'
+    { _booOperatorName = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the boolean property. For example, if operatorName is *closed* and the
+-- property\'s name is *isClosed*, then queries like *closed:\<value>* will
+-- show results only where the value of the property named *isClosed*
+-- matches *\<value>*. By contrast, a search that uses the same *\<value>*
+-- without an operator will return all items where *\<value>* matches the
+-- value of any String properties or text within the content field for the
+-- item. The operator name can only contain lowercase letters (a-z). The
+-- maximum length is 32 characters.
+booOperatorName :: Lens' BooleanOperatorOptions (Maybe Text)
+booOperatorName
+  = lens _booOperatorName
+      (\ s a -> s{_booOperatorName = a})
+
+instance FromJSON BooleanOperatorOptions where
+        parseJSON
+          = withObject "BooleanOperatorOptions"
+              (\ o ->
+                 BooleanOperatorOptions' <$> (o .:? "operatorName"))
+
+instance ToJSON BooleanOperatorOptions where
+        toJSON BooleanOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _booOperatorName])
+
+-- | 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])
+
+-- | Options for enum properties, which allow you to define a restricted set
+-- of strings to match user queries, set rankings for those string values,
+-- and define an operator name to be paired with those strings so that
+-- users can narrow results to only items with a specific value. For
+-- example, for items in a request tracking system with priority
+-- information, you could define *p0* as an allowable enum value and tie
+-- this enum to the operator name *priority* so that search users could add
+-- *priority:p0* to their query to restrict the set of results to only
+-- those items indexed with the value *p0*.
+--
+-- /See:/ 'enumPropertyOptions' smart constructor.
+data EnumPropertyOptions = EnumPropertyOptions'
+    { _epoPossibleValues  :: !(Maybe [EnumValuePair])
+    , _epoOrderedRanking  :: !(Maybe EnumPropertyOptionsOrderedRanking)
+    , _epoOperatorOptions :: !(Maybe EnumOperatorOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnumPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epoPossibleValues'
+--
+-- * 'epoOrderedRanking'
+--
+-- * 'epoOperatorOptions'
+enumPropertyOptions
+    :: EnumPropertyOptions
+enumPropertyOptions =
+    EnumPropertyOptions'
+    { _epoPossibleValues = Nothing
+    , _epoOrderedRanking = Nothing
+    , _epoOperatorOptions = Nothing
+    }
+
+-- | The list of possible values for the enumeration property. All
+-- EnumValuePairs must provide a string value. If you specify an integer
+-- value for one EnumValuePair, then all possible EnumValuePairs must
+-- provide an integer value. Both the string value and integer value must
+-- be unique over all possible values. Once set, possible values cannot be
+-- removed or modified. If you supply an ordered ranking and think you
+-- might insert additional enum values in the future, leave gaps in the
+-- initial integer values to allow adding a value in between previously
+-- registered values. The maximum number of elements is 100.
+epoPossibleValues :: Lens' EnumPropertyOptions [EnumValuePair]
+epoPossibleValues
+  = lens _epoPossibleValues
+      (\ s a -> s{_epoPossibleValues = a})
+      . _Default
+      . _Coerce
+
+-- | Used to specify the ordered ranking for the enumeration that determines
+-- how the integer values provided in the possible EnumValuePairs are used
+-- to rank results. If specified, integer values must be provided for all
+-- possible EnumValuePair values given for this property. Can only be used
+-- if isRepeatable is false.
+epoOrderedRanking :: Lens' EnumPropertyOptions (Maybe EnumPropertyOptionsOrderedRanking)
+epoOrderedRanking
+  = lens _epoOrderedRanking
+      (\ s a -> s{_epoOrderedRanking = a})
+
+-- | If set, describes how the enum should be used as a search operator.
+epoOperatorOptions :: Lens' EnumPropertyOptions (Maybe EnumOperatorOptions)
+epoOperatorOptions
+  = lens _epoOperatorOptions
+      (\ s a -> s{_epoOperatorOptions = a})
+
+instance FromJSON EnumPropertyOptions where
+        parseJSON
+          = withObject "EnumPropertyOptions"
+              (\ o ->
+                 EnumPropertyOptions' <$>
+                   (o .:? "possibleValues" .!= mempty) <*>
+                     (o .:? "orderedRanking")
+                     <*> (o .:? "operatorOptions"))
+
+instance ToJSON EnumPropertyOptions where
+        toJSON EnumPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("possibleValues" .=) <$> _epoPossibleValues,
+                  ("orderedRanking" .=) <$> _epoOrderedRanking,
+                  ("operatorOptions" .=) <$> _epoOperatorOptions])
+
+--
+-- /See:/ 'unreserveItemsRequest' smart constructor.
+data UnreserveItemsRequest = UnreserveItemsRequest'
+    { _uirQueue         :: !(Maybe Text)
+    , _uirDebugOptions  :: !(Maybe DebugOptions)
+    , _uirConnectorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnreserveItemsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uirQueue'
+--
+-- * 'uirDebugOptions'
+--
+-- * 'uirConnectorName'
+unreserveItemsRequest
+    :: UnreserveItemsRequest
+unreserveItemsRequest =
+    UnreserveItemsRequest'
+    { _uirQueue = Nothing
+    , _uirDebugOptions = Nothing
+    , _uirConnectorName = Nothing
+    }
+
+-- | Name of a queue to unreserve items from.
+uirQueue :: Lens' UnreserveItemsRequest (Maybe Text)
+uirQueue = lens _uirQueue (\ s a -> s{_uirQueue = a})
+
+-- | Common debug options.
+uirDebugOptions :: Lens' UnreserveItemsRequest (Maybe DebugOptions)
+uirDebugOptions
+  = lens _uirDebugOptions
+      (\ s a -> s{_uirDebugOptions = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+uirConnectorName :: Lens' UnreserveItemsRequest (Maybe Text)
+uirConnectorName
+  = lens _uirConnectorName
+      (\ s a -> s{_uirConnectorName = a})
+
+instance FromJSON UnreserveItemsRequest where
+        parseJSON
+          = withObject "UnreserveItemsRequest"
+              (\ o ->
+                 UnreserveItemsRequest' <$>
+                   (o .:? "queue") <*> (o .:? "debugOptions") <*>
+                     (o .:? "connectorName"))
+
+instance ToJSON UnreserveItemsRequest where
+        toJSON UnreserveItemsRequest'{..}
+          = object
+              (catMaybes
+                 [("queue" .=) <$> _uirQueue,
+                  ("debugOptions" .=) <$> _uirDebugOptions,
+                  ("connectorName" .=) <$> _uirConnectorName])
+
+-- | Optional. Provides a search operator for date properties. Search
+-- operators let users restrict the query to specific fields relevant to
+-- the type of item being searched.
+--
+-- /See:/ 'dateOperatorOptions' smart constructor.
+data DateOperatorOptions = DateOperatorOptions'
+    { _dooOperatorName            :: !(Maybe Text)
+    , _dooLessThanOperatorName    :: !(Maybe Text)
+    , _dooGreaterThanOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DateOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dooOperatorName'
+--
+-- * 'dooLessThanOperatorName'
+--
+-- * 'dooGreaterThanOperatorName'
+dateOperatorOptions
+    :: DateOperatorOptions
+dateOperatorOptions =
+    DateOperatorOptions'
+    { _dooOperatorName = Nothing
+    , _dooLessThanOperatorName = Nothing
+    , _dooGreaterThanOperatorName = Nothing
+    }
+
+-- | Indicates the actual string required in the query in order to isolate
+-- the date property. For example, suppose an issue tracking schema object
+-- has a property named *closeDate* that specifies an operator with an
+-- operatorName of *closedon*. For searches on that data, queries like
+-- *closedon:\<value>* will show results only where the value of the
+-- *closeDate* property matches *\<value>*. By contrast, a search that uses
+-- the same *\<value>* without an operator will return all items where
+-- *\<value>* matches the value of any String properties or text within the
+-- content field for the indexed datasource. The operator name can only
+-- contain lowercase letters (a-z). The maximum length is 32 characters.
+dooOperatorName :: Lens' DateOperatorOptions (Maybe Text)
+dooOperatorName
+  = lens _dooOperatorName
+      (\ s a -> s{_dooOperatorName = a})
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the date property using the less-than operator. For example, if
+-- lessThanOperatorName is *closedbefore* and the property\'s name is
+-- *closeDate*, then queries like *closedbefore:\<value>* will show results
+-- only where the value of the property named *closeDate* is earlier than
+-- *\<value>*. The operator name can only contain lowercase letters (a-z).
+-- The maximum length is 32 characters.
+dooLessThanOperatorName :: Lens' DateOperatorOptions (Maybe Text)
+dooLessThanOperatorName
+  = lens _dooLessThanOperatorName
+      (\ s a -> s{_dooLessThanOperatorName = a})
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the date property using the greater-than operator. For example, if
+-- greaterThanOperatorName is *closedafter* and the property\'s name is
+-- *closeDate*, then queries like *closedafter:\<value>* will show results
+-- only where the value of the property named *closeDate* is later than
+-- *\<value>*. The operator name can only contain lowercase letters (a-z).
+-- The maximum length is 32 characters.
+dooGreaterThanOperatorName :: Lens' DateOperatorOptions (Maybe Text)
+dooGreaterThanOperatorName
+  = lens _dooGreaterThanOperatorName
+      (\ s a -> s{_dooGreaterThanOperatorName = a})
+
+instance FromJSON DateOperatorOptions where
+        parseJSON
+          = withObject "DateOperatorOptions"
+              (\ o ->
+                 DateOperatorOptions' <$>
+                   (o .:? "operatorName") <*>
+                     (o .:? "lessThanOperatorName")
+                     <*> (o .:? "greaterThanOperatorName"))
+
+instance ToJSON DateOperatorOptions where
+        toJSON DateOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _dooOperatorName,
+                  ("lessThanOperatorName" .=) <$>
+                    _dooLessThanOperatorName,
+                  ("greaterThanOperatorName" .=) <$>
+                    _dooGreaterThanOperatorName])
+
+--
+-- /See:/ 'getDataSourceIndexStatsResponse' smart constructor.
+newtype GetDataSourceIndexStatsResponse = GetDataSourceIndexStatsResponse'
+    { _gdsisrStats :: Maybe [DataSourceIndexStats]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetDataSourceIndexStatsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdsisrStats'
+getDataSourceIndexStatsResponse
+    :: GetDataSourceIndexStatsResponse
+getDataSourceIndexStatsResponse =
+    GetDataSourceIndexStatsResponse'
+    { _gdsisrStats = Nothing
+    }
+
+-- | Summary of indexed item counts, one for each day in the requested range.
+gdsisrStats :: Lens' GetDataSourceIndexStatsResponse [DataSourceIndexStats]
+gdsisrStats
+  = lens _gdsisrStats (\ s a -> s{_gdsisrStats = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON GetDataSourceIndexStatsResponse
+         where
+        parseJSON
+          = withObject "GetDataSourceIndexStatsResponse"
+              (\ o ->
+                 GetDataSourceIndexStatsResponse' <$>
+                   (o .:? "stats" .!= mempty))
+
+instance ToJSON GetDataSourceIndexStatsResponse where
+        toJSON GetDataSourceIndexStatsResponse'{..}
+          = object (catMaybes [("stats" .=) <$> _gdsisrStats])
+
+-- | The display options for an object.
+--
+-- /See:/ 'objectDisplayOptions' smart constructor.
+data ObjectDisplayOptions = ObjectDisplayOptions'
+    { _odoMetalines          :: !(Maybe [Metaline])
+    , _odoObjectDisplayLabel :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectDisplayOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'odoMetalines'
+--
+-- * 'odoObjectDisplayLabel'
+objectDisplayOptions
+    :: ObjectDisplayOptions
+objectDisplayOptions =
+    ObjectDisplayOptions'
+    { _odoMetalines = Nothing
+    , _odoObjectDisplayLabel = Nothing
+    }
+
+-- | Defines the properties that will be displayed in the metalines of the
+-- search results. The property values will be displayed in the order given
+-- here. If a property holds multiple values, all of the values will be
+-- diplayed before the next properties. For this reason, it is a good
+-- practice to specify singular properties before repeated properties in
+-- this list. All of the properties must set is_returnable to true. The
+-- maximum number of elements is 3.
+odoMetalines :: Lens' ObjectDisplayOptions [Metaline]
+odoMetalines
+  = lens _odoMetalines (\ s a -> s{_odoMetalines = a})
+      . _Default
+      . _Coerce
+
+-- | The user friendly label to display in the search result to inidicate the
+-- type of the item. This is OPTIONAL; if not given, an object label will
+-- not be displayed on the context line of the search results. The maximum
+-- length is 32 characters.
+odoObjectDisplayLabel :: Lens' ObjectDisplayOptions (Maybe Text)
+odoObjectDisplayLabel
+  = lens _odoObjectDisplayLabel
+      (\ s a -> s{_odoObjectDisplayLabel = a})
+
+instance FromJSON ObjectDisplayOptions where
+        parseJSON
+          = withObject "ObjectDisplayOptions"
+              (\ o ->
+                 ObjectDisplayOptions' <$>
+                   (o .:? "metalines" .!= mempty) <*>
+                     (o .:? "objectDisplayLabel"))
+
+instance ToJSON ObjectDisplayOptions where
+        toJSON ObjectDisplayOptions'{..}
+          = object
+              (catMaybes
+                 [("metalines" .=) <$> _odoMetalines,
+                  ("objectDisplayLabel" .=) <$>
+                    _odoObjectDisplayLabel])
+
+-- | Information relevant only to a query entry.
+--
+-- /See:/ 'queryItem' smart constructor.
+newtype QueryItem = QueryItem'
+    { _qiIsSynthetic :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qiIsSynthetic'
+queryItem
+    :: QueryItem
+queryItem =
+    QueryItem'
+    { _qiIsSynthetic = Nothing
+    }
+
+-- | True if the text was generated by means other than a previous user
+-- search.
+qiIsSynthetic :: Lens' QueryItem (Maybe Bool)
+qiIsSynthetic
+  = lens _qiIsSynthetic
+      (\ s a -> s{_qiIsSynthetic = a})
+
+instance FromJSON QueryItem where
+        parseJSON
+          = withObject "QueryItem"
+              (\ o -> QueryItem' <$> (o .:? "isSynthetic"))
+
+instance ToJSON QueryItem where
+        toJSON QueryItem'{..}
+          = object
+              (catMaybes [("isSynthetic" .=) <$> _qiIsSynthetic])
+
+--
+-- /See:/ 'listUnmAppedIdentitiesResponse' smart constructor.
+data ListUnmAppedIdentitiesResponse = ListUnmAppedIdentitiesResponse'
+    { _luairNextPageToken      :: !(Maybe Text)
+    , _luairUnmAppedIdentities :: !(Maybe [UnmAppedIdentity])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListUnmAppedIdentitiesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'luairNextPageToken'
+--
+-- * 'luairUnmAppedIdentities'
+listUnmAppedIdentitiesResponse
+    :: ListUnmAppedIdentitiesResponse
+listUnmAppedIdentitiesResponse =
+    ListUnmAppedIdentitiesResponse'
+    { _luairNextPageToken = Nothing
+    , _luairUnmAppedIdentities = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+luairNextPageToken :: Lens' ListUnmAppedIdentitiesResponse (Maybe Text)
+luairNextPageToken
+  = lens _luairNextPageToken
+      (\ s a -> s{_luairNextPageToken = a})
+
+luairUnmAppedIdentities :: Lens' ListUnmAppedIdentitiesResponse [UnmAppedIdentity]
+luairUnmAppedIdentities
+  = lens _luairUnmAppedIdentities
+      (\ s a -> s{_luairUnmAppedIdentities = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListUnmAppedIdentitiesResponse
+         where
+        parseJSON
+          = withObject "ListUnmAppedIdentitiesResponse"
+              (\ o ->
+                 ListUnmAppedIdentitiesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "unmappedIdentities" .!= mempty))
+
+instance ToJSON ListUnmAppedIdentitiesResponse where
+        toJSON ListUnmAppedIdentitiesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _luairNextPageToken,
+                  ("unmappedIdentities" .=) <$>
+                    _luairUnmAppedIdentities])
+
+--
+-- /See:/ 'deleteQueueItemsRequest' smart constructor.
+data DeleteQueueItemsRequest = DeleteQueueItemsRequest'
+    { _dqirQueue         :: !(Maybe Text)
+    , _dqirDebugOptions  :: !(Maybe DebugOptions)
+    , _dqirConnectorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteQueueItemsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dqirQueue'
+--
+-- * 'dqirDebugOptions'
+--
+-- * 'dqirConnectorName'
+deleteQueueItemsRequest
+    :: DeleteQueueItemsRequest
+deleteQueueItemsRequest =
+    DeleteQueueItemsRequest'
+    { _dqirQueue = Nothing
+    , _dqirDebugOptions = Nothing
+    , _dqirConnectorName = Nothing
+    }
+
+-- | Name of a queue to delete items from.
+dqirQueue :: Lens' DeleteQueueItemsRequest (Maybe Text)
+dqirQueue
+  = lens _dqirQueue (\ s a -> s{_dqirQueue = a})
+
+-- | Common debug options.
+dqirDebugOptions :: Lens' DeleteQueueItemsRequest (Maybe DebugOptions)
+dqirDebugOptions
+  = lens _dqirDebugOptions
+      (\ s a -> s{_dqirDebugOptions = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+dqirConnectorName :: Lens' DeleteQueueItemsRequest (Maybe Text)
+dqirConnectorName
+  = lens _dqirConnectorName
+      (\ s a -> s{_dqirConnectorName = a})
+
+instance FromJSON DeleteQueueItemsRequest where
+        parseJSON
+          = withObject "DeleteQueueItemsRequest"
+              (\ o ->
+                 DeleteQueueItemsRequest' <$>
+                   (o .:? "queue") <*> (o .:? "debugOptions") <*>
+                     (o .:? "connectorName"))
+
+instance ToJSON DeleteQueueItemsRequest where
+        toJSON DeleteQueueItemsRequest'{..}
+          = object
+              (catMaybes
+                 [("queue" .=) <$> _dqirQueue,
+                  ("debugOptions" .=) <$> _dqirDebugOptions,
+                  ("connectorName" .=) <$> _dqirConnectorName])
+
+-- | Results containing indexed information for a document.
+--
+-- /See:/ 'searchResult' smart constructor.
+data SearchResult = SearchResult'
+    { _srDebugInfo        :: !(Maybe ResultDebugInfo)
+    , _srSnippet          :: !(Maybe Snippet)
+    , _srURL              :: !(Maybe Text)
+    , _srClusteredResults :: !(Maybe [SearchResult])
+    , _srMetadata         :: !(Maybe Metadata)
+    , _srTitle            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srDebugInfo'
+--
+-- * 'srSnippet'
+--
+-- * 'srURL'
+--
+-- * 'srClusteredResults'
+--
+-- * 'srMetadata'
+--
+-- * 'srTitle'
+searchResult
+    :: SearchResult
+searchResult =
+    SearchResult'
+    { _srDebugInfo = Nothing
+    , _srSnippet = Nothing
+    , _srURL = Nothing
+    , _srClusteredResults = Nothing
+    , _srMetadata = Nothing
+    , _srTitle = Nothing
+    }
+
+-- | Debugging information about this search result.
+srDebugInfo :: Lens' SearchResult (Maybe ResultDebugInfo)
+srDebugInfo
+  = lens _srDebugInfo (\ s a -> s{_srDebugInfo = a})
+
+-- | The concatenation of all snippets (summaries) available for this result.
+srSnippet :: Lens' SearchResult (Maybe Snippet)
+srSnippet
+  = lens _srSnippet (\ s a -> s{_srSnippet = a})
+
+-- | The URL of the result.
+srURL :: Lens' SearchResult (Maybe Text)
+srURL = lens _srURL (\ s a -> s{_srURL = a})
+
+-- | If source is clustered, provide list of clustered results. There will
+-- only be one level of clustered results. If current source is not enabled
+-- for clustering, this field will be empty.
+srClusteredResults :: Lens' SearchResult [SearchResult]
+srClusteredResults
+  = lens _srClusteredResults
+      (\ s a -> s{_srClusteredResults = a})
+      . _Default
+      . _Coerce
+
+-- | Metadata of the search result.
+srMetadata :: Lens' SearchResult (Maybe Metadata)
+srMetadata
+  = lens _srMetadata (\ s a -> s{_srMetadata = a})
+
+-- | Title of the search result.
+srTitle :: Lens' SearchResult (Maybe Text)
+srTitle = lens _srTitle (\ s a -> s{_srTitle = a})
+
+instance FromJSON SearchResult where
+        parseJSON
+          = withObject "SearchResult"
+              (\ o ->
+                 SearchResult' <$>
+                   (o .:? "debugInfo") <*> (o .:? "snippet") <*>
+                     (o .:? "url")
+                     <*> (o .:? "clusteredResults" .!= mempty)
+                     <*> (o .:? "metadata")
+                     <*> (o .:? "title"))
+
+instance ToJSON SearchResult where
+        toJSON SearchResult'{..}
+          = object
+              (catMaybes
+                 [("debugInfo" .=) <$> _srDebugInfo,
+                  ("snippet" .=) <$> _srSnippet, ("url" .=) <$> _srURL,
+                  ("clusteredResults" .=) <$> _srClusteredResults,
+                  ("metadata" .=) <$> _srMetadata,
+                  ("title" .=) <$> _srTitle])
+
+--
+-- /See:/ 'spellResult' smart constructor.
+newtype SpellResult = SpellResult'
+    { _srSuggestedQuery :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpellResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srSuggestedQuery'
+spellResult
+    :: SpellResult
+spellResult =
+    SpellResult'
+    { _srSuggestedQuery = Nothing
+    }
+
+-- | The suggested spelling of the query.
+srSuggestedQuery :: Lens' SpellResult (Maybe Text)
+srSuggestedQuery
+  = lens _srSuggestedQuery
+      (\ s a -> s{_srSuggestedQuery = a})
+
+instance FromJSON SpellResult where
+        parseJSON
+          = withObject "SpellResult"
+              (\ o -> SpellResult' <$> (o .:? "suggestedQuery"))
+
+instance ToJSON SpellResult where
+        toJSON SpellResult'{..}
+          = object
+              (catMaybes
+                 [("suggestedQuery" .=) <$> _srSuggestedQuery])
+
+-- | A people suggestion.
+--
+-- /See:/ 'peopleSuggestion' smart constructor.
+newtype PeopleSuggestion = PeopleSuggestion'
+    { _psPerson :: Maybe Person
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PeopleSuggestion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psPerson'
+peopleSuggestion
+    :: PeopleSuggestion
+peopleSuggestion =
+    PeopleSuggestion'
+    { _psPerson = Nothing
+    }
+
+-- | Suggested person. All fields of the person object might not be
+-- populated.
+psPerson :: Lens' PeopleSuggestion (Maybe Person)
+psPerson = lens _psPerson (\ s a -> s{_psPerson = a})
+
+instance FromJSON PeopleSuggestion where
+        parseJSON
+          = withObject "PeopleSuggestion"
+              (\ o -> PeopleSuggestion' <$> (o .:? "person"))
+
+instance ToJSON PeopleSuggestion where
+        toJSON PeopleSuggestion'{..}
+          = object (catMaybes [("person" .=) <$> _psPerson])
+
+-- | List of sources that the user can search using the query API.
+--
+-- /See:/ 'querySource' smart constructor.
+data QuerySource = QuerySource'
+    { _qsShortName   :: !(Maybe Text)
+    , _qsDisplayName :: !(Maybe Text)
+    , _qsSource      :: !(Maybe Source)
+    , _qsOperators   :: !(Maybe [QueryOperator])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QuerySource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qsShortName'
+--
+-- * 'qsDisplayName'
+--
+-- * 'qsSource'
+--
+-- * 'qsOperators'
+querySource
+    :: QuerySource
+querySource =
+    QuerySource'
+    { _qsShortName = Nothing
+    , _qsDisplayName = Nothing
+    , _qsSource = Nothing
+    , _qsOperators = Nothing
+    }
+
+-- | A short name or alias for the source. This value can be used with the
+-- \'source\' operator.
+qsShortName :: Lens' QuerySource (Maybe Text)
+qsShortName
+  = lens _qsShortName (\ s a -> s{_qsShortName = a})
+
+-- | Display name of the data source.
+qsDisplayName :: Lens' QuerySource (Maybe Text)
+qsDisplayName
+  = lens _qsDisplayName
+      (\ s a -> s{_qsDisplayName = a})
+
+-- | Name of the source
+qsSource :: Lens' QuerySource (Maybe Source)
+qsSource = lens _qsSource (\ s a -> s{_qsSource = a})
+
+-- | List of all operators applicable for this source.
+qsOperators :: Lens' QuerySource [QueryOperator]
+qsOperators
+  = lens _qsOperators (\ s a -> s{_qsOperators = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON QuerySource where
+        parseJSON
+          = withObject "QuerySource"
+              (\ o ->
+                 QuerySource' <$>
+                   (o .:? "shortName") <*> (o .:? "displayName") <*>
+                     (o .:? "source")
+                     <*> (o .:? "operators" .!= mempty))
+
+instance ToJSON QuerySource where
+        toJSON QuerySource'{..}
+          = object
+              (catMaybes
+                 [("shortName" .=) <$> _qsShortName,
+                  ("displayName" .=) <$> _qsDisplayName,
+                  ("source" .=) <$> _qsSource,
+                  ("operators" .=) <$> _qsOperators])
+
+-- | Response of the suggest API.
+--
+-- /See:/ 'suggestResponse' smart constructor.
+newtype SuggestResponse = SuggestResponse'
+    { _srSuggestResults :: Maybe [SuggestResult]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SuggestResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srSuggestResults'
+suggestResponse
+    :: SuggestResponse
+suggestResponse =
+    SuggestResponse'
+    { _srSuggestResults = Nothing
+    }
+
+-- | List of suggestion results.
+srSuggestResults :: Lens' SuggestResponse [SuggestResult]
+srSuggestResults
+  = lens _srSuggestResults
+      (\ s a -> s{_srSuggestResults = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON SuggestResponse where
+        parseJSON
+          = withObject "SuggestResponse"
+              (\ o ->
+                 SuggestResponse' <$>
+                   (o .:? "suggestResults" .!= mempty))
+
+instance ToJSON SuggestResponse where
+        toJSON SuggestResponse'{..}
+          = object
+              (catMaybes
+                 [("suggestResults" .=) <$> _srSuggestResults])
+
+-- | Errors when the connector is communicating to the source repository.
+--
+-- /See:/ 'repositoryError' smart constructor.
+data RepositoryError = RepositoryError'
+    { _reHTTPStatusCode :: !(Maybe (Textual Int32))
+    , _reType           :: !(Maybe RepositoryErrorType)
+    , _reErrorMessage   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RepositoryError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'reHTTPStatusCode'
+--
+-- * 'reType'
+--
+-- * 'reErrorMessage'
+repositoryError
+    :: RepositoryError
+repositoryError =
+    RepositoryError'
+    { _reHTTPStatusCode = Nothing
+    , _reType = Nothing
+    , _reErrorMessage = Nothing
+    }
+
+-- | Error codes. Matches the definition of HTTP status codes.
+reHTTPStatusCode :: Lens' RepositoryError (Maybe Int32)
+reHTTPStatusCode
+  = lens _reHTTPStatusCode
+      (\ s a -> s{_reHTTPStatusCode = a})
+      . mapping _Coerce
+
+-- | Type of error.
+reType :: Lens' RepositoryError (Maybe RepositoryErrorType)
+reType = lens _reType (\ s a -> s{_reType = a})
+
+-- | Message that describes the error. The maximum allowable length of the
+-- message is 8192 characters.
+reErrorMessage :: Lens' RepositoryError (Maybe Text)
+reErrorMessage
+  = lens _reErrorMessage
+      (\ s a -> s{_reErrorMessage = a})
+
+instance FromJSON RepositoryError where
+        parseJSON
+          = withObject "RepositoryError"
+              (\ o ->
+                 RepositoryError' <$>
+                   (o .:? "httpStatusCode") <*> (o .:? "type") <*>
+                     (o .:? "errorMessage"))
+
+instance ToJSON RepositoryError where
+        toJSON RepositoryError'{..}
+          = object
+              (catMaybes
+                 [("httpStatusCode" .=) <$> _reHTTPStatusCode,
+                  ("type" .=) <$> _reType,
+                  ("errorMessage" .=) <$> _reErrorMessage])
+
+-- | Options for html properties.
+--
+-- /See:/ 'htmlPropertyOptions' smart constructor.
+data HTMLPropertyOptions = HTMLPropertyOptions'
+    { _hpoRetrievalImportance :: !(Maybe RetrievalImportance)
+    , _hpoOperatorOptions     :: !(Maybe HTMLOperatorOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTMLPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hpoRetrievalImportance'
+--
+-- * 'hpoOperatorOptions'
+htmlPropertyOptions
+    :: HTMLPropertyOptions
+htmlPropertyOptions =
+    HTMLPropertyOptions'
+    { _hpoRetrievalImportance = Nothing
+    , _hpoOperatorOptions = Nothing
+    }
+
+-- | Indicates the search quality importance of the tokens within the field
+-- when used for retrieval. Can only be set to DEFAULT or NONE.
+hpoRetrievalImportance :: Lens' HTMLPropertyOptions (Maybe RetrievalImportance)
+hpoRetrievalImportance
+  = lens _hpoRetrievalImportance
+      (\ s a -> s{_hpoRetrievalImportance = a})
+
+-- | If set, describes how the property should be used as a search operator.
+hpoOperatorOptions :: Lens' HTMLPropertyOptions (Maybe HTMLOperatorOptions)
+hpoOperatorOptions
+  = lens _hpoOperatorOptions
+      (\ s a -> s{_hpoOperatorOptions = a})
+
+instance FromJSON HTMLPropertyOptions where
+        parseJSON
+          = withObject "HTMLPropertyOptions"
+              (\ o ->
+                 HTMLPropertyOptions' <$>
+                   (o .:? "retrievalImportance") <*>
+                     (o .:? "operatorOptions"))
+
+instance ToJSON HTMLPropertyOptions where
+        toJSON HTMLPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("retrievalImportance" .=) <$>
+                    _hpoRetrievalImportance,
+                  ("operatorOptions" .=) <$> _hpoOperatorOptions])
+
+-- | The definition of a property within an object.
+--
+-- /See:/ 'propertyDefinition' smart constructor.
+data PropertyDefinition = PropertyDefinition'
+    { _pdEnumPropertyOptions      :: !(Maybe EnumPropertyOptions)
+    , _pdHTMLPropertyOptions      :: !(Maybe HTMLPropertyOptions)
+    , _pdObjectPropertyOptions    :: !(Maybe ObjectPropertyOptions)
+    , _pdIsReturnable             :: !(Maybe Bool)
+    , _pdTimestampPropertyOptions :: !(Maybe TimestampPropertyOptions)
+    , _pdIntegerPropertyOptions   :: !(Maybe IntegerPropertyOptions)
+    , _pdName                     :: !(Maybe Text)
+    , _pdIsRepeatable             :: !(Maybe Bool)
+    , _pdDoublePropertyOptions    :: !(Maybe DoublePropertyOptions)
+    , _pdDisplayOptions           :: !(Maybe PropertyDisplayOptions)
+    , _pdTextPropertyOptions      :: !(Maybe TextPropertyOptions)
+    , _pdIsSortable               :: !(Maybe Bool)
+    , _pdIsFacetable              :: !(Maybe Bool)
+    , _pdBooleanPropertyOptions   :: !(Maybe BooleanPropertyOptions)
+    , _pdDatePropertyOptions      :: !(Maybe DatePropertyOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertyDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdEnumPropertyOptions'
+--
+-- * 'pdHTMLPropertyOptions'
+--
+-- * 'pdObjectPropertyOptions'
+--
+-- * 'pdIsReturnable'
+--
+-- * 'pdTimestampPropertyOptions'
+--
+-- * 'pdIntegerPropertyOptions'
+--
+-- * 'pdName'
+--
+-- * 'pdIsRepeatable'
+--
+-- * 'pdDoublePropertyOptions'
+--
+-- * 'pdDisplayOptions'
+--
+-- * 'pdTextPropertyOptions'
+--
+-- * 'pdIsSortable'
+--
+-- * 'pdIsFacetable'
+--
+-- * 'pdBooleanPropertyOptions'
+--
+-- * 'pdDatePropertyOptions'
+propertyDefinition
+    :: PropertyDefinition
+propertyDefinition =
+    PropertyDefinition'
+    { _pdEnumPropertyOptions = Nothing
+    , _pdHTMLPropertyOptions = Nothing
+    , _pdObjectPropertyOptions = Nothing
+    , _pdIsReturnable = Nothing
+    , _pdTimestampPropertyOptions = Nothing
+    , _pdIntegerPropertyOptions = Nothing
+    , _pdName = Nothing
+    , _pdIsRepeatable = Nothing
+    , _pdDoublePropertyOptions = Nothing
+    , _pdDisplayOptions = Nothing
+    , _pdTextPropertyOptions = Nothing
+    , _pdIsSortable = Nothing
+    , _pdIsFacetable = Nothing
+    , _pdBooleanPropertyOptions = Nothing
+    , _pdDatePropertyOptions = Nothing
+    }
+
+pdEnumPropertyOptions :: Lens' PropertyDefinition (Maybe EnumPropertyOptions)
+pdEnumPropertyOptions
+  = lens _pdEnumPropertyOptions
+      (\ s a -> s{_pdEnumPropertyOptions = a})
+
+pdHTMLPropertyOptions :: Lens' PropertyDefinition (Maybe HTMLPropertyOptions)
+pdHTMLPropertyOptions
+  = lens _pdHTMLPropertyOptions
+      (\ s a -> s{_pdHTMLPropertyOptions = a})
+
+pdObjectPropertyOptions :: Lens' PropertyDefinition (Maybe ObjectPropertyOptions)
+pdObjectPropertyOptions
+  = lens _pdObjectPropertyOptions
+      (\ s a -> s{_pdObjectPropertyOptions = a})
+
+-- | Indicates that the property identifies data that should be returned in
+-- search results via the Query API. If set to *true*, indicates that Query
+-- API users can use matching property fields in results. However, storing
+-- fields requires more space allocation and uses more bandwidth for search
+-- queries, which impacts performance over large datasets. Set to *true*
+-- here only if the field is needed for search results. Cannot be true for
+-- properties whose type is an object.
+pdIsReturnable :: Lens' PropertyDefinition (Maybe Bool)
+pdIsReturnable
+  = lens _pdIsReturnable
+      (\ s a -> s{_pdIsReturnable = a})
+
+pdTimestampPropertyOptions :: Lens' PropertyDefinition (Maybe TimestampPropertyOptions)
+pdTimestampPropertyOptions
+  = lens _pdTimestampPropertyOptions
+      (\ s a -> s{_pdTimestampPropertyOptions = a})
+
+pdIntegerPropertyOptions :: Lens' PropertyDefinition (Maybe IntegerPropertyOptions)
+pdIntegerPropertyOptions
+  = lens _pdIntegerPropertyOptions
+      (\ s a -> s{_pdIntegerPropertyOptions = a})
+
+-- | The name of the property. Item indexing requests sent to the Indexing
+-- API should set the property name equal to this value. For example, if
+-- name is *subject_line*, then indexing requests for document items with
+-- subject fields should set the name for that field equal to
+-- *subject_line*. Use the name as the identifier for the object property.
+-- Once registered as a property for an object, you cannot re-use this name
+-- for another property within that object. The name must start with a
+-- letter and can only contain letters (A-Z, a-z) or numbers (0-9). The
+-- maximum length is 256 characters.
+pdName :: Lens' PropertyDefinition (Maybe Text)
+pdName = lens _pdName (\ s a -> s{_pdName = a})
+
+-- | Indicates that multiple values are allowed for the property. For
+-- example, a document only has one description but can have multiple
+-- comments. Cannot be true for properties whose type is a boolean. If set
+-- to false, properties that contain more than one value will cause the
+-- indexing request for that item to be rejected.
+pdIsRepeatable :: Lens' PropertyDefinition (Maybe Bool)
+pdIsRepeatable
+  = lens _pdIsRepeatable
+      (\ s a -> s{_pdIsRepeatable = a})
+
+pdDoublePropertyOptions :: Lens' PropertyDefinition (Maybe DoublePropertyOptions)
+pdDoublePropertyOptions
+  = lens _pdDoublePropertyOptions
+      (\ s a -> s{_pdDoublePropertyOptions = a})
+
+-- | Options that determine how the property is displayed in the Cloud Search
+-- results page if it is specified to be displayed in the object\'s display
+-- options .
+pdDisplayOptions :: Lens' PropertyDefinition (Maybe PropertyDisplayOptions)
+pdDisplayOptions
+  = lens _pdDisplayOptions
+      (\ s a -> s{_pdDisplayOptions = a})
+
+pdTextPropertyOptions :: Lens' PropertyDefinition (Maybe TextPropertyOptions)
+pdTextPropertyOptions
+  = lens _pdTextPropertyOptions
+      (\ s a -> s{_pdTextPropertyOptions = a})
+
+-- | Indicates that the property can be used for sorting. Cannot be true for
+-- properties that are repeatable. Cannot be true for properties whose type
+-- is object or user identifier. IsReturnable must be true to set this
+-- option. Only supported for Boolean, Date, Double, Integer, and Timestamp
+-- properties.
+pdIsSortable :: Lens' PropertyDefinition (Maybe Bool)
+pdIsSortable
+  = lens _pdIsSortable (\ s a -> s{_pdIsSortable = a})
+
+-- | Indicates that the property can be used for generating facets. Cannot be
+-- true for properties whose type is object. IsReturnable must be true to
+-- set this option. Only supported for Boolean, Enum, and Text properties.
+pdIsFacetable :: Lens' PropertyDefinition (Maybe Bool)
+pdIsFacetable
+  = lens _pdIsFacetable
+      (\ s a -> s{_pdIsFacetable = a})
+
+pdBooleanPropertyOptions :: Lens' PropertyDefinition (Maybe BooleanPropertyOptions)
+pdBooleanPropertyOptions
+  = lens _pdBooleanPropertyOptions
+      (\ s a -> s{_pdBooleanPropertyOptions = a})
+
+pdDatePropertyOptions :: Lens' PropertyDefinition (Maybe DatePropertyOptions)
+pdDatePropertyOptions
+  = lens _pdDatePropertyOptions
+      (\ s a -> s{_pdDatePropertyOptions = a})
+
+instance FromJSON PropertyDefinition where
+        parseJSON
+          = withObject "PropertyDefinition"
+              (\ o ->
+                 PropertyDefinition' <$>
+                   (o .:? "enumPropertyOptions") <*>
+                     (o .:? "htmlPropertyOptions")
+                     <*> (o .:? "objectPropertyOptions")
+                     <*> (o .:? "isReturnable")
+                     <*> (o .:? "timestampPropertyOptions")
+                     <*> (o .:? "integerPropertyOptions")
+                     <*> (o .:? "name")
+                     <*> (o .:? "isRepeatable")
+                     <*> (o .:? "doublePropertyOptions")
+                     <*> (o .:? "displayOptions")
+                     <*> (o .:? "textPropertyOptions")
+                     <*> (o .:? "isSortable")
+                     <*> (o .:? "isFacetable")
+                     <*> (o .:? "booleanPropertyOptions")
+                     <*> (o .:? "datePropertyOptions"))
+
+instance ToJSON PropertyDefinition where
+        toJSON PropertyDefinition'{..}
+          = object
+              (catMaybes
+                 [("enumPropertyOptions" .=) <$>
+                    _pdEnumPropertyOptions,
+                  ("htmlPropertyOptions" .=) <$>
+                    _pdHTMLPropertyOptions,
+                  ("objectPropertyOptions" .=) <$>
+                    _pdObjectPropertyOptions,
+                  ("isReturnable" .=) <$> _pdIsReturnable,
+                  ("timestampPropertyOptions" .=) <$>
+                    _pdTimestampPropertyOptions,
+                  ("integerPropertyOptions" .=) <$>
+                    _pdIntegerPropertyOptions,
+                  ("name" .=) <$> _pdName,
+                  ("isRepeatable" .=) <$> _pdIsRepeatable,
+                  ("doublePropertyOptions" .=) <$>
+                    _pdDoublePropertyOptions,
+                  ("displayOptions" .=) <$> _pdDisplayOptions,
+                  ("textPropertyOptions" .=) <$>
+                    _pdTextPropertyOptions,
+                  ("isSortable" .=) <$> _pdIsSortable,
+                  ("isFacetable" .=) <$> _pdIsFacetable,
+                  ("booleanPropertyOptions" .=) <$>
+                    _pdBooleanPropertyOptions,
+                  ("datePropertyOptions" .=) <$>
+                    _pdDatePropertyOptions])
+
+--
+-- /See:/ 'sortOptions' smart constructor.
+data SortOptions = SortOptions'
+    { _soSortOrder    :: !(Maybe SortOptionsSortOrder)
+    , _soOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SortOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'soSortOrder'
+--
+-- * 'soOperatorName'
+sortOptions
+    :: SortOptions
+sortOptions =
+    SortOptions'
+    { _soSortOrder = Nothing
+    , _soOperatorName = Nothing
+    }
+
+-- | Ascending is the default sort order
+soSortOrder :: Lens' SortOptions (Maybe SortOptionsSortOrder)
+soSortOrder
+  = lens _soSortOrder (\ s a -> s{_soSortOrder = a})
+
+-- | Name of the operator corresponding to the field to sort on. The
+-- corresponding property must be marked as sortable.
+soOperatorName :: Lens' SortOptions (Maybe Text)
+soOperatorName
+  = lens _soOperatorName
+      (\ s a -> s{_soOperatorName = a})
+
+instance FromJSON SortOptions where
+        parseJSON
+          = withObject "SortOptions"
+              (\ o ->
+                 SortOptions' <$>
+                   (o .:? "sortOrder") <*> (o .:? "operatorName"))
+
+instance ToJSON SortOptions where
+        toJSON SortOptions'{..}
+          = object
+              (catMaybes
+                 [("sortOrder" .=) <$> _soSortOrder,
+                  ("operatorName" .=) <$> _soOperatorName])
+
+-- | Options for object properties.
+--
+-- /See:/ 'objectPropertyOptions' smart constructor.
+newtype ObjectPropertyOptions = ObjectPropertyOptions'
+    { _opoSubobjectProperties :: Maybe [PropertyDefinition]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'opoSubobjectProperties'
+objectPropertyOptions
+    :: ObjectPropertyOptions
+objectPropertyOptions =
+    ObjectPropertyOptions'
+    { _opoSubobjectProperties = Nothing
+    }
+
+-- | The properties of the sub-object. These properties represent a nested
+-- object. For example, if this property represents a postal address, the
+-- subobjectProperties might be named *street*, *city*, and *state*. The
+-- maximum number of elements is 1000.
+opoSubobjectProperties :: Lens' ObjectPropertyOptions [PropertyDefinition]
+opoSubobjectProperties
+  = lens _opoSubobjectProperties
+      (\ s a -> s{_opoSubobjectProperties = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ObjectPropertyOptions where
+        parseJSON
+          = withObject "ObjectPropertyOptions"
+              (\ o ->
+                 ObjectPropertyOptions' <$>
+                   (o .:? "subobjectProperties" .!= mempty))
+
+instance ToJSON ObjectPropertyOptions where
+        toJSON ObjectPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("subobjectProperties" .=) <$>
+                    _opoSubobjectProperties])
+
+-- | The search API response.
+--
+-- /See:/ 'searchResponse' smart constructor.
+data SearchResponse = SearchResponse'
+    { _sSpellResults        :: !(Maybe [SpellResult])
+    , _sFacetResults        :: !(Maybe [FacetResult])
+    , _sDebugInfo           :: !(Maybe ResponseDebugInfo)
+    , _sResults             :: !(Maybe [SearchResult])
+    , _sHasMoreResults      :: !(Maybe Bool)
+    , _sResultCounts        :: !(Maybe ResultCounts)
+    , _sResultCountExact    :: !(Maybe (Textual Int64))
+    , _sResultCountEstimate :: !(Maybe (Textual Int64))
+    , _sQueryInterpretation :: !(Maybe QueryInterpretation)
+    , _sStructuredResults   :: !(Maybe [StructuredResult])
+    , _sErrorInfo           :: !(Maybe ErrorInfo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSpellResults'
+--
+-- * 'sFacetResults'
+--
+-- * 'sDebugInfo'
+--
+-- * 'sResults'
+--
+-- * 'sHasMoreResults'
+--
+-- * 'sResultCounts'
+--
+-- * 'sResultCountExact'
+--
+-- * 'sResultCountEstimate'
+--
+-- * 'sQueryInterpretation'
+--
+-- * 'sStructuredResults'
+--
+-- * 'sErrorInfo'
+searchResponse
+    :: SearchResponse
+searchResponse =
+    SearchResponse'
+    { _sSpellResults = Nothing
+    , _sFacetResults = Nothing
+    , _sDebugInfo = Nothing
+    , _sResults = Nothing
+    , _sHasMoreResults = Nothing
+    , _sResultCounts = Nothing
+    , _sResultCountExact = Nothing
+    , _sResultCountEstimate = Nothing
+    , _sQueryInterpretation = Nothing
+    , _sStructuredResults = Nothing
+    , _sErrorInfo = Nothing
+    }
+
+-- | Suggested spelling for the query.
+sSpellResults :: Lens' SearchResponse [SpellResult]
+sSpellResults
+  = lens _sSpellResults
+      (\ s a -> s{_sSpellResults = a})
+      . _Default
+      . _Coerce
+
+-- | Repeated facet results.
+sFacetResults :: Lens' SearchResponse [FacetResult]
+sFacetResults
+  = lens _sFacetResults
+      (\ s a -> s{_sFacetResults = a})
+      . _Default
+      . _Coerce
+
+-- | Debugging information about the response.
+sDebugInfo :: Lens' SearchResponse (Maybe ResponseDebugInfo)
+sDebugInfo
+  = lens _sDebugInfo (\ s a -> s{_sDebugInfo = a})
+
+-- | Results from a search query.
+sResults :: Lens' SearchResponse [SearchResult]
+sResults
+  = lens _sResults (\ s a -> s{_sResults = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether there are more search results matching the query.
+sHasMoreResults :: Lens' SearchResponse (Maybe Bool)
+sHasMoreResults
+  = lens _sHasMoreResults
+      (\ s a -> s{_sHasMoreResults = a})
+
+-- | Expanded result count information.
+sResultCounts :: Lens' SearchResponse (Maybe ResultCounts)
+sResultCounts
+  = lens _sResultCounts
+      (\ s a -> s{_sResultCounts = a})
+
+-- | The exact result count for this query.
+sResultCountExact :: Lens' SearchResponse (Maybe Int64)
+sResultCountExact
+  = lens _sResultCountExact
+      (\ s a -> s{_sResultCountExact = a})
+      . mapping _Coerce
+
+-- | The estimated result count for this query.
+sResultCountEstimate :: Lens' SearchResponse (Maybe Int64)
+sResultCountEstimate
+  = lens _sResultCountEstimate
+      (\ s a -> s{_sResultCountEstimate = a})
+      . mapping _Coerce
+
+-- | Query interpretation result for user query. Empty if query
+-- interpretation is disabled.
+sQueryInterpretation :: Lens' SearchResponse (Maybe QueryInterpretation)
+sQueryInterpretation
+  = lens _sQueryInterpretation
+      (\ s a -> s{_sQueryInterpretation = a})
+
+-- | Structured results for the user query. These results are not counted
+-- against the page_size.
+sStructuredResults :: Lens' SearchResponse [StructuredResult]
+sStructuredResults
+  = lens _sStructuredResults
+      (\ s a -> s{_sStructuredResults = a})
+      . _Default
+      . _Coerce
+
+-- | Error information about the response.
+sErrorInfo :: Lens' SearchResponse (Maybe ErrorInfo)
+sErrorInfo
+  = lens _sErrorInfo (\ s a -> s{_sErrorInfo = a})
+
+instance FromJSON SearchResponse where
+        parseJSON
+          = withObject "SearchResponse"
+              (\ o ->
+                 SearchResponse' <$>
+                   (o .:? "spellResults" .!= mempty) <*>
+                     (o .:? "facetResults" .!= mempty)
+                     <*> (o .:? "debugInfo")
+                     <*> (o .:? "results" .!= mempty)
+                     <*> (o .:? "hasMoreResults")
+                     <*> (o .:? "resultCounts")
+                     <*> (o .:? "resultCountExact")
+                     <*> (o .:? "resultCountEstimate")
+                     <*> (o .:? "queryInterpretation")
+                     <*> (o .:? "structuredResults" .!= mempty)
+                     <*> (o .:? "errorInfo"))
+
+instance ToJSON SearchResponse where
+        toJSON SearchResponse'{..}
+          = object
+              (catMaybes
+                 [("spellResults" .=) <$> _sSpellResults,
+                  ("facetResults" .=) <$> _sFacetResults,
+                  ("debugInfo" .=) <$> _sDebugInfo,
+                  ("results" .=) <$> _sResults,
+                  ("hasMoreResults" .=) <$> _sHasMoreResults,
+                  ("resultCounts" .=) <$> _sResultCounts,
+                  ("resultCountExact" .=) <$> _sResultCountExact,
+                  ("resultCountEstimate" .=) <$> _sResultCountEstimate,
+                  ("queryInterpretation" .=) <$> _sQueryInterpretation,
+                  ("structuredResults" .=) <$> _sStructuredResults,
+                  ("errorInfo" .=) <$> _sErrorInfo])
+
+-- | One suggestion result.
+--
+-- /See:/ 'suggestResult' smart constructor.
+data SuggestResult = SuggestResult'
+    { _sPeopleSuggestion :: !(Maybe PeopleSuggestion)
+    , _sQuerySuggestion  :: !(Maybe QuerySuggestion)
+    , _sSuggestedQuery   :: !(Maybe Text)
+    , _sSource           :: !(Maybe Source)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SuggestResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sPeopleSuggestion'
+--
+-- * 'sQuerySuggestion'
+--
+-- * 'sSuggestedQuery'
+--
+-- * 'sSource'
+suggestResult
+    :: SuggestResult
+suggestResult =
+    SuggestResult'
+    { _sPeopleSuggestion = Nothing
+    , _sQuerySuggestion = Nothing
+    , _sSuggestedQuery = Nothing
+    , _sSource = Nothing
+    }
+
+sPeopleSuggestion :: Lens' SuggestResult (Maybe PeopleSuggestion)
+sPeopleSuggestion
+  = lens _sPeopleSuggestion
+      (\ s a -> s{_sPeopleSuggestion = a})
+
+sQuerySuggestion :: Lens' SuggestResult (Maybe QuerySuggestion)
+sQuerySuggestion
+  = lens _sQuerySuggestion
+      (\ s a -> s{_sQuerySuggestion = a})
+
+-- | The suggested query that will be used for search, when the user clicks
+-- on the suggestion
+sSuggestedQuery :: Lens' SuggestResult (Maybe Text)
+sSuggestedQuery
+  = lens _sSuggestedQuery
+      (\ s a -> s{_sSuggestedQuery = a})
+
+-- | The source of the suggestion.
+sSource :: Lens' SuggestResult (Maybe Source)
+sSource = lens _sSource (\ s a -> s{_sSource = a})
+
+instance FromJSON SuggestResult where
+        parseJSON
+          = withObject "SuggestResult"
+              (\ o ->
+                 SuggestResult' <$>
+                   (o .:? "peopleSuggestion") <*>
+                     (o .:? "querySuggestion")
+                     <*> (o .:? "suggestedQuery")
+                     <*> (o .:? "source"))
+
+instance ToJSON SuggestResult where
+        toJSON SuggestResult'{..}
+          = object
+              (catMaybes
+                 [("peopleSuggestion" .=) <$> _sPeopleSuggestion,
+                  ("querySuggestion" .=) <$> _sQuerySuggestion,
+                  ("suggestedQuery" .=) <$> _sSuggestedQuery,
+                  ("source" .=) <$> _sSource])
+
+-- | List of text values.
+--
+-- /See:/ 'textValues' smart constructor.
+newtype TextValues = TextValues'
+    { _tvValues :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvValues'
+textValues
+    :: TextValues
+textValues =
+    TextValues'
+    { _tvValues = Nothing
+    }
+
+-- | The maximum allowable length for text values is 2048 characters. The
+-- maximum number of string elements is 100.
+tvValues :: Lens' TextValues [Text]
+tvValues
+  = lens _tvValues (\ s a -> s{_tvValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON TextValues where
+        parseJSON
+          = withObject "TextValues"
+              (\ o -> TextValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON TextValues where
+        toJSON TextValues'{..}
+          = object (catMaybes [("values" .=) <$> _tvValues])
+
+-- | Drive location search restricts (e.g. \"is:starred\").
+--
+-- /See:/ 'driveLocationRestrict' smart constructor.
+newtype DriveLocationRestrict = DriveLocationRestrict'
+    { _dlrType :: Maybe DriveLocationRestrictType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveLocationRestrict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlrType'
+driveLocationRestrict
+    :: DriveLocationRestrict
+driveLocationRestrict =
+    DriveLocationRestrict'
+    { _dlrType = Nothing
+    }
+
+dlrType :: Lens' DriveLocationRestrict (Maybe DriveLocationRestrictType)
+dlrType = lens _dlrType (\ s a -> s{_dlrType = a})
+
+instance FromJSON DriveLocationRestrict where
+        parseJSON
+          = withObject "DriveLocationRestrict"
+              (\ o -> DriveLocationRestrict' <$> (o .:? "type"))
+
+instance ToJSON DriveLocationRestrict where
+        toJSON DriveLocationRestrict'{..}
+          = object (catMaybes [("type" .=) <$> _dlrType])
+
+-- | List sources response.
+--
+-- /See:/ 'listQuerySourcesResponse' smart constructor.
+data ListQuerySourcesResponse = ListQuerySourcesResponse'
+    { _lqsrNextPageToken :: !(Maybe Text)
+    , _lqsrSources       :: !(Maybe [QuerySource])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListQuerySourcesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lqsrNextPageToken'
+--
+-- * 'lqsrSources'
+listQuerySourcesResponse
+    :: ListQuerySourcesResponse
+listQuerySourcesResponse =
+    ListQuerySourcesResponse'
+    { _lqsrNextPageToken = Nothing
+    , _lqsrSources = Nothing
+    }
+
+lqsrNextPageToken :: Lens' ListQuerySourcesResponse (Maybe Text)
+lqsrNextPageToken
+  = lens _lqsrNextPageToken
+      (\ s a -> s{_lqsrNextPageToken = a})
+
+lqsrSources :: Lens' ListQuerySourcesResponse [QuerySource]
+lqsrSources
+  = lens _lqsrSources (\ s a -> s{_lqsrSources = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListQuerySourcesResponse where
+        parseJSON
+          = withObject "ListQuerySourcesResponse"
+              (\ o ->
+                 ListQuerySourcesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "sources" .!= mempty))
+
+instance ToJSON ListQuerySourcesResponse where
+        toJSON ListQuerySourcesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lqsrNextPageToken,
+                  ("sources" .=) <$> _lqsrSources])
+
+-- | Used to provide a search operator for double properties. This is
+-- optional. Search operators let users restrict the query to specific
+-- fields relevant to the type of item being searched.
+--
+-- /See:/ 'doubleOperatorOptions' smart constructor.
+newtype DoubleOperatorOptions = DoubleOperatorOptions'
+    { _dOperatorName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DoubleOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dOperatorName'
+doubleOperatorOptions
+    :: DoubleOperatorOptions
+doubleOperatorOptions =
+    DoubleOperatorOptions'
+    { _dOperatorName = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to use the
+-- double property in sorting or as a facet. The operator name can only
+-- contain lowercase letters (a-z). The maximum length is 32 characters.
+dOperatorName :: Lens' DoubleOperatorOptions (Maybe Text)
+dOperatorName
+  = lens _dOperatorName
+      (\ s a -> s{_dOperatorName = a})
+
+instance FromJSON DoubleOperatorOptions where
+        parseJSON
+          = withObject "DoubleOperatorOptions"
+              (\ o ->
+                 DoubleOperatorOptions' <$> (o .:? "operatorName"))
+
+instance ToJSON DoubleOperatorOptions where
+        toJSON DoubleOperatorOptions'{..}
+          = object
+              (catMaybes [("operatorName" .=) <$> _dOperatorName])
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+    { _oDone     :: !(Maybe Bool)
+    , _oError    :: !(Maybe Status)
+    , _oResponse :: !(Maybe OperationResponse)
+    , _oName     :: !(Maybe Text)
+    , _oMetadata :: !(Maybe OperationMetadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDone'
+--
+-- * 'oError'
+--
+-- * 'oResponse'
+--
+-- * 'oName'
+--
+-- * 'oMetadata'
+operation
+    :: Operation
+operation =
+    Operation'
+    { _oDone = Nothing
+    , _oError = Nothing
+    , _oResponse = Nothing
+    , _oName = Nothing
+    , _oMetadata = 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.
+oDone :: Lens' Operation (Maybe Bool)
+oDone = lens _oDone (\ s a -> s{_oDone = a})
+
+-- | The error result of the operation in case of failure or cancellation.
+oError :: Lens' Operation (Maybe Status)
+oError = lens _oError (\ s a -> s{_oError = 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\`.
+oResponse :: Lens' Operation (Maybe OperationResponse)
+oResponse
+  = lens _oResponse (\ s a -> s{_oResponse = 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\`.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = 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.
+oMetadata :: Lens' Operation (Maybe OperationMetadata)
+oMetadata
+  = lens _oMetadata (\ s a -> s{_oMetadata = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON Operation where
+        toJSON Operation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _oDone, ("error" .=) <$> _oError,
+                  ("response" .=) <$> _oResponse,
+                  ("name" .=) <$> _oName,
+                  ("metadata" .=) <$> _oMetadata])
+
+-- | Object to represent a person.
+--
+-- /See:/ 'person' smart constructor.
+data Person = Person'
+    { _pEmailAddresses :: !(Maybe [EmailAddress])
+    , _pPersonNames    :: !(Maybe [Name])
+    , _pPhotos         :: !(Maybe [Photo])
+    , _pName           :: !(Maybe Text)
+    , _pObfuscatedId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Person' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pEmailAddresses'
+--
+-- * 'pPersonNames'
+--
+-- * 'pPhotos'
+--
+-- * 'pName'
+--
+-- * 'pObfuscatedId'
+person
+    :: Person
+person =
+    Person'
+    { _pEmailAddresses = Nothing
+    , _pPersonNames = Nothing
+    , _pPhotos = Nothing
+    , _pName = Nothing
+    , _pObfuscatedId = Nothing
+    }
+
+-- | The person\'s email addresses
+pEmailAddresses :: Lens' Person [EmailAddress]
+pEmailAddresses
+  = lens _pEmailAddresses
+      (\ s a -> s{_pEmailAddresses = a})
+      . _Default
+      . _Coerce
+
+-- | The person\'s name
+pPersonNames :: Lens' Person [Name]
+pPersonNames
+  = lens _pPersonNames (\ s a -> s{_pPersonNames = a})
+      . _Default
+      . _Coerce
+
+-- | A person\'s read-only photo. A picture shown next to the person\'s name
+-- to help others recognize the person in search results.
+pPhotos :: Lens' Person [Photo]
+pPhotos
+  = lens _pPhotos (\ s a -> s{_pPhotos = a}) . _Default
+      . _Coerce
+
+-- | The resource name of the person to provide information about. See
+-- <https://developers.google.com/people/api/rest/v1/people/get People.get>
+-- from Google People API.
+pName :: Lens' Person (Maybe Text)
+pName = lens _pName (\ s a -> s{_pName = a})
+
+-- | Obfuscated ID of a person.
+pObfuscatedId :: Lens' Person (Maybe Text)
+pObfuscatedId
+  = lens _pObfuscatedId
+      (\ s a -> s{_pObfuscatedId = a})
+
+instance FromJSON Person where
+        parseJSON
+          = withObject "Person"
+              (\ o ->
+                 Person' <$>
+                   (o .:? "emailAddresses" .!= mempty) <*>
+                     (o .:? "personNames" .!= mempty)
+                     <*> (o .:? "photos" .!= mempty)
+                     <*> (o .:? "name")
+                     <*> (o .:? "obfuscatedId"))
+
+instance ToJSON Person where
+        toJSON Person'{..}
+          = object
+              (catMaybes
+                 [("emailAddresses" .=) <$> _pEmailAddresses,
+                  ("personNames" .=) <$> _pPersonNames,
+                  ("photos" .=) <$> _pPhotos, ("name" .=) <$> _pName,
+                  ("obfuscatedId" .=) <$> _pObfuscatedId])
+
+--
+-- /See:/ 'compositeFilter' smart constructor.
+data CompositeFilter = CompositeFilter'
+    { _cfSubFilters    :: !(Maybe [Filter])
+    , _cfLogicOperator :: !(Maybe CompositeFilterLogicOperator)
+    } 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:
+--
+-- * 'cfSubFilters'
+--
+-- * 'cfLogicOperator'
+compositeFilter
+    :: CompositeFilter
+compositeFilter =
+    CompositeFilter'
+    { _cfSubFilters = Nothing
+    , _cfLogicOperator = Nothing
+    }
+
+-- | Sub filters.
+cfSubFilters :: Lens' CompositeFilter [Filter]
+cfSubFilters
+  = lens _cfSubFilters (\ s a -> s{_cfSubFilters = a})
+      . _Default
+      . _Coerce
+
+-- | The logic operator of the sub filter.
+cfLogicOperator :: Lens' CompositeFilter (Maybe CompositeFilterLogicOperator)
+cfLogicOperator
+  = lens _cfLogicOperator
+      (\ s a -> s{_cfLogicOperator = a})
+
+instance FromJSON CompositeFilter where
+        parseJSON
+          = withObject "CompositeFilter"
+              (\ o ->
+                 CompositeFilter' <$>
+                   (o .:? "subFilters" .!= mempty) <*>
+                     (o .:? "logicOperator"))
+
+instance ToJSON CompositeFilter where
+        toJSON CompositeFilter'{..}
+          = object
+              (catMaybes
+                 [("subFilters" .=) <$> _cfSubFilters,
+                  ("logicOperator" .=) <$> _cfLogicOperator])
+
+-- | The collection of fields that make up a displayed line
+--
+-- /See:/ 'resultDisplayLine' smart constructor.
+newtype ResultDisplayLine = ResultDisplayLine'
+    { _rdlFields :: Maybe [ResultDisplayField]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultDisplayLine' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdlFields'
+resultDisplayLine
+    :: ResultDisplayLine
+resultDisplayLine =
+    ResultDisplayLine'
+    { _rdlFields = Nothing
+    }
+
+rdlFields :: Lens' ResultDisplayLine [ResultDisplayField]
+rdlFields
+  = lens _rdlFields (\ s a -> s{_rdlFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ResultDisplayLine where
+        parseJSON
+          = withObject "ResultDisplayLine"
+              (\ o ->
+                 ResultDisplayLine' <$> (o .:? "fields" .!= mempty))
+
+instance ToJSON ResultDisplayLine where
+        toJSON ResultDisplayLine'{..}
+          = object (catMaybes [("fields" .=) <$> _rdlFields])
+
+-- | List of double values.
+--
+-- /See:/ 'doubleValues' smart constructor.
+newtype DoubleValues = DoubleValues'
+    { _dvValues :: Maybe [Textual Double]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DoubleValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvValues'
+doubleValues
+    :: DoubleValues
+doubleValues =
+    DoubleValues'
+    { _dvValues = Nothing
+    }
+
+-- | The maximum number of elements is 100.
+dvValues :: Lens' DoubleValues [Double]
+dvValues
+  = lens _dvValues (\ s a -> s{_dvValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DoubleValues where
+        parseJSON
+          = withObject "DoubleValues"
+              (\ o ->
+                 DoubleValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON DoubleValues where
+        toJSON DoubleValues'{..}
+          = object (catMaybes [("values" .=) <$> _dvValues])
+
+-- | Snippet of the search result, which summarizes the content of the
+-- resulting page.
+--
+-- /See:/ 'snippet' smart constructor.
+data Snippet = Snippet'
+    { _sMatchRanges :: !(Maybe [MatchRange])
+    , _sSnippet     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Snippet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sMatchRanges'
+--
+-- * 'sSnippet'
+snippet
+    :: Snippet
+snippet =
+    Snippet'
+    { _sMatchRanges = Nothing
+    , _sSnippet = Nothing
+    }
+
+-- | The matched ranges in the snippet.
+sMatchRanges :: Lens' Snippet [MatchRange]
+sMatchRanges
+  = lens _sMatchRanges (\ s a -> s{_sMatchRanges = a})
+      . _Default
+      . _Coerce
+
+-- | The snippet of the document. The snippet of the document. May contain
+-- escaped HTML character that should be unescaped prior to rendering.
+sSnippet :: Lens' Snippet (Maybe Text)
+sSnippet = lens _sSnippet (\ s a -> s{_sSnippet = a})
+
+instance FromJSON Snippet where
+        parseJSON
+          = withObject "Snippet"
+              (\ o ->
+                 Snippet' <$>
+                   (o .:? "matchRanges" .!= mempty) <*>
+                     (o .:? "snippet"))
+
+instance ToJSON Snippet where
+        toJSON Snippet'{..}
+          = object
+              (catMaybes
+                 [("matchRanges" .=) <$> _sMatchRanges,
+                  ("snippet" .=) <$> _sSnippet])
+
+-- | Used to provide a search operator for text properties. This is optional.
+-- Search operators let users restrict the query to specific fields
+-- relevant to the type of item being searched.
+--
+-- /See:/ 'textOperatorOptions' smart constructor.
+data TextOperatorOptions = TextOperatorOptions'
+    { _tooOperatorName           :: !(Maybe Text)
+    , _tooExactMatchWithOperator :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tooOperatorName'
+--
+-- * 'tooExactMatchWithOperator'
+textOperatorOptions
+    :: TextOperatorOptions
+textOperatorOptions =
+    TextOperatorOptions'
+    { _tooOperatorName = Nothing
+    , _tooExactMatchWithOperator = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the text property. For example, if operatorName is *subject* and the
+-- property\'s name is *subjectLine*, then queries like *subject:\<value>*
+-- will show results only where the value of the property named
+-- *subjectLine* matches *\<value>*. By contrast, a search that uses the
+-- same *\<value>* without an operator will return all items where
+-- *\<value>* matches the value of any text properties or text within the
+-- content field for the item. The operator name can only contain lowercase
+-- letters (a-z). The maximum length is 32 characters.
+tooOperatorName :: Lens' TextOperatorOptions (Maybe Text)
+tooOperatorName
+  = lens _tooOperatorName
+      (\ s a -> s{_tooOperatorName = a})
+
+-- | If true, the text value will be tokenized as one atomic value in
+-- operator searches and facet matches. For example, if the operator name
+-- is \"genre\" and the value is \"science-fiction\" the query restrictions
+-- \"genre:science\" and \"genre:fiction\" will not match the item;
+-- \"genre:science-fiction\" will. Value matching is case-sensitive and
+-- does not remove special characters. If false, the text will be
+-- tokenized. For example, if the value is \"science-fiction\" the queries
+-- \"genre:science\" and \"genre:fiction\" will match the item.
+tooExactMatchWithOperator :: Lens' TextOperatorOptions (Maybe Bool)
+tooExactMatchWithOperator
+  = lens _tooExactMatchWithOperator
+      (\ s a -> s{_tooExactMatchWithOperator = a})
+
+instance FromJSON TextOperatorOptions where
+        parseJSON
+          = withObject "TextOperatorOptions"
+              (\ o ->
+                 TextOperatorOptions' <$>
+                   (o .:? "operatorName") <*>
+                     (o .:? "exactMatchWithOperator"))
+
+instance ToJSON TextOperatorOptions where
+        toJSON TextOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _tooOperatorName,
+                  ("exactMatchWithOperator" .=) <$>
+                    _tooExactMatchWithOperator])
+
+-- | Options to interpret user query.
+--
+-- /See:/ 'queryInterpretationOptions' smart constructor.
+newtype QueryInterpretationOptions = QueryInterpretationOptions'
+    { _qioDisableNlInterpretation :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryInterpretationOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qioDisableNlInterpretation'
+queryInterpretationOptions
+    :: QueryInterpretationOptions
+queryInterpretationOptions =
+    QueryInterpretationOptions'
+    { _qioDisableNlInterpretation = Nothing
+    }
+
+-- | Flag to disable natural language (NL) interpretation of queries. Default
+-- is false, Set to true to disable natural language interpretation. NL
+-- interpretation only applies to predefined datasources.
+qioDisableNlInterpretation :: Lens' QueryInterpretationOptions (Maybe Bool)
+qioDisableNlInterpretation
+  = lens _qioDisableNlInterpretation
+      (\ s a -> s{_qioDisableNlInterpretation = a})
+
+instance FromJSON QueryInterpretationOptions where
+        parseJSON
+          = withObject "QueryInterpretationOptions"
+              (\ o ->
+                 QueryInterpretationOptions' <$>
+                   (o .:? "disableNlInterpretation"))
+
+instance ToJSON QueryInterpretationOptions where
+        toJSON QueryInterpretationOptions'{..}
+          = object
+              (catMaybes
+                 [("disableNlInterpretation" .=) <$>
+                    _qioDisableNlInterpretation])
+
+--
+-- /See:/ 'resetSearchApplicationRequest' smart constructor.
+newtype ResetSearchApplicationRequest = ResetSearchApplicationRequest'
+    { _rsarDebugOptions :: Maybe DebugOptions
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResetSearchApplicationRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsarDebugOptions'
+resetSearchApplicationRequest
+    :: ResetSearchApplicationRequest
+resetSearchApplicationRequest =
+    ResetSearchApplicationRequest'
+    { _rsarDebugOptions = Nothing
+    }
+
+-- | Common debug options.
+rsarDebugOptions :: Lens' ResetSearchApplicationRequest (Maybe DebugOptions)
+rsarDebugOptions
+  = lens _rsarDebugOptions
+      (\ s a -> s{_rsarDebugOptions = a})
+
+instance FromJSON ResetSearchApplicationRequest where
+        parseJSON
+          = withObject "ResetSearchApplicationRequest"
+              (\ o ->
+                 ResetSearchApplicationRequest' <$>
+                   (o .:? "debugOptions"))
+
+instance ToJSON ResetSearchApplicationRequest where
+        toJSON ResetSearchApplicationRequest'{..}
+          = object
+              (catMaybes
+                 [("debugOptions" .=) <$> _rsarDebugOptions])
+
+-- | Available metadata fields for the item.
+--
+-- /See:/ 'itemMetadata' smart constructor.
+data ItemMetadata = ItemMetadata'
+    { _imSourceRepositoryURL   :: !(Maybe Text)
+    , _imHash                  :: !(Maybe Text)
+    , _imObjectType            :: !(Maybe Text)
+    , _imContainerName         :: !(Maybe Text)
+    , _imInteractions          :: !(Maybe [Interaction])
+    , _imMimeType              :: !(Maybe Text)
+    , _imUpdateTime            :: !(Maybe DateTime')
+    , _imKeywords              :: !(Maybe [Text])
+    , _imTitle                 :: !(Maybe Text)
+    , _imContentLanguage       :: !(Maybe Text)
+    , _imSearchQualityMetadata :: !(Maybe SearchQualityMetadata)
+    , _imCreateTime            :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ItemMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'imSourceRepositoryURL'
+--
+-- * 'imHash'
+--
+-- * 'imObjectType'
+--
+-- * 'imContainerName'
+--
+-- * 'imInteractions'
+--
+-- * 'imMimeType'
+--
+-- * 'imUpdateTime'
+--
+-- * 'imKeywords'
+--
+-- * 'imTitle'
+--
+-- * 'imContentLanguage'
+--
+-- * 'imSearchQualityMetadata'
+--
+-- * 'imCreateTime'
+itemMetadata
+    :: ItemMetadata
+itemMetadata =
+    ItemMetadata'
+    { _imSourceRepositoryURL = Nothing
+    , _imHash = Nothing
+    , _imObjectType = Nothing
+    , _imContainerName = Nothing
+    , _imInteractions = Nothing
+    , _imMimeType = Nothing
+    , _imUpdateTime = Nothing
+    , _imKeywords = Nothing
+    , _imTitle = Nothing
+    , _imContentLanguage = Nothing
+    , _imSearchQualityMetadata = Nothing
+    , _imCreateTime = Nothing
+    }
+
+-- | Link to the source repository serving the data. Search results apply
+-- this link to the title. The maximum length is 2048 characters.
+imSourceRepositoryURL :: Lens' ItemMetadata (Maybe Text)
+imSourceRepositoryURL
+  = lens _imSourceRepositoryURL
+      (\ s a -> s{_imSourceRepositoryURL = a})
+
+-- | Hashing value provided by the API caller. This can be used with the
+-- items.push method to calculate modified state. The maximum length is
+-- 2048 characters.
+imHash :: Lens' ItemMetadata (Maybe Text)
+imHash = lens _imHash (\ s a -> s{_imHash = a})
+
+-- | The type of the item. This should correspond to the name of an object
+-- definition in the schema registered for the data source. For example, if
+-- the schema for the data source contains an object definition with name
+-- \'document\', then item indexing requests for objects of that type
+-- should set objectType to \'document\'. The maximum length is 256
+-- characters.
+imObjectType :: Lens' ItemMetadata (Maybe Text)
+imObjectType
+  = lens _imObjectType (\ s a -> s{_imObjectType = a})
+
+-- | The name of the container for this item. Deletion of the container item
+-- leads to automatic deletion of this item. Note: ACLs are not inherited
+-- from a container item. To provide ACL inheritance for an item, use the
+-- inheritAclFrom field. The maximum length is 1536 characters.
+imContainerName :: Lens' ItemMetadata (Maybe Text)
+imContainerName
+  = lens _imContainerName
+      (\ s a -> s{_imContainerName = a})
+
+-- | A list of interactions for the item. Interactions are used to improve
+-- Search quality, but are not exposed to end users. The maximum number of
+-- elements is 1000.
+imInteractions :: Lens' ItemMetadata [Interaction]
+imInteractions
+  = lens _imInteractions
+      (\ s a -> s{_imInteractions = a})
+      . _Default
+      . _Coerce
+
+-- | The original mime-type of ItemContent.content in the source repository.
+-- The maximum length is 256 characters.
+imMimeType :: Lens' ItemMetadata (Maybe Text)
+imMimeType
+  = lens _imMimeType (\ s a -> s{_imMimeType = a})
+
+-- | The time when the item was last modified in the source repository.
+imUpdateTime :: Lens' ItemMetadata (Maybe UTCTime)
+imUpdateTime
+  = lens _imUpdateTime (\ s a -> s{_imUpdateTime = a})
+      . mapping _DateTime
+
+-- | Additional keywords or phrases that should match the item. Used
+-- internally for user generated content. The maximum number of elements is
+-- 100. The maximum length is 8192 characters.
+imKeywords :: Lens' ItemMetadata [Text]
+imKeywords
+  = lens _imKeywords (\ s a -> s{_imKeywords = a}) .
+      _Default
+      . _Coerce
+
+-- | The title of the item. If given, this will be the displayed title of the
+-- Search result. The maximum length is 2048 characters.
+imTitle :: Lens' ItemMetadata (Maybe Text)
+imTitle = lens _imTitle (\ s a -> s{_imTitle = a})
+
+-- | The BCP-47 language code for the item, such as \"en-US\" or \"sr-Latn\".
+-- For more information, see
+-- http:\/\/www.unicode.org\/reports\/tr35\/#Unicode_locale_identifier. The
+-- maximum length is 32 characters.
+imContentLanguage :: Lens' ItemMetadata (Maybe Text)
+imContentLanguage
+  = lens _imContentLanguage
+      (\ s a -> s{_imContentLanguage = a})
+
+-- | Additional search quality metadata of the item
+imSearchQualityMetadata :: Lens' ItemMetadata (Maybe SearchQualityMetadata)
+imSearchQualityMetadata
+  = lens _imSearchQualityMetadata
+      (\ s a -> s{_imSearchQualityMetadata = a})
+
+-- | The time when the item was created in the source repository.
+imCreateTime :: Lens' ItemMetadata (Maybe UTCTime)
+imCreateTime
+  = lens _imCreateTime (\ s a -> s{_imCreateTime = a})
+      . mapping _DateTime
+
+instance FromJSON ItemMetadata where
+        parseJSON
+          = withObject "ItemMetadata"
+              (\ o ->
+                 ItemMetadata' <$>
+                   (o .:? "sourceRepositoryUrl") <*> (o .:? "hash") <*>
+                     (o .:? "objectType")
+                     <*> (o .:? "containerName")
+                     <*> (o .:? "interactions" .!= mempty)
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "keywords" .!= mempty)
+                     <*> (o .:? "title")
+                     <*> (o .:? "contentLanguage")
+                     <*> (o .:? "searchQualityMetadata")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON ItemMetadata where
+        toJSON ItemMetadata'{..}
+          = object
+              (catMaybes
+                 [("sourceRepositoryUrl" .=) <$>
+                    _imSourceRepositoryURL,
+                  ("hash" .=) <$> _imHash,
+                  ("objectType" .=) <$> _imObjectType,
+                  ("containerName" .=) <$> _imContainerName,
+                  ("interactions" .=) <$> _imInteractions,
+                  ("mimeType" .=) <$> _imMimeType,
+                  ("updateTime" .=) <$> _imUpdateTime,
+                  ("keywords" .=) <$> _imKeywords,
+                  ("title" .=) <$> _imTitle,
+                  ("contentLanguage" .=) <$> _imContentLanguage,
+                  ("searchQualityMetadata" .=) <$>
+                    _imSearchQualityMetadata,
+                  ("createTime" .=) <$> _imCreateTime])
+
+-- | Filter options to be applied on query.
+--
+-- /See:/ 'filterOptions' smart constructor.
+data FilterOptions = FilterOptions'
+    { _foObjectType :: !(Maybe Text)
+    , _foFilter     :: !(Maybe Filter)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FilterOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'foObjectType'
+--
+-- * 'foFilter'
+filterOptions
+    :: FilterOptions
+filterOptions =
+    FilterOptions'
+    { _foObjectType = Nothing
+    , _foFilter = Nothing
+    }
+
+-- | If object_type is set, only objects of that type are returned. This
+-- should correspond to the name of the object that was registered within
+-- the definition of schema. The maximum length is 256 characters.
+foObjectType :: Lens' FilterOptions (Maybe Text)
+foObjectType
+  = lens _foObjectType (\ s a -> s{_foObjectType = a})
+
+-- | Generic filter to restrict the search, such as \`lang:en\`,
+-- \`site:xyz\`.
+foFilter :: Lens' FilterOptions (Maybe Filter)
+foFilter = lens _foFilter (\ s a -> s{_foFilter = a})
+
+instance FromJSON FilterOptions where
+        parseJSON
+          = withObject "FilterOptions"
+              (\ o ->
+                 FilterOptions' <$>
+                   (o .:? "objectType") <*> (o .:? "filter"))
+
+instance ToJSON FilterOptions where
+        toJSON FilterOptions'{..}
+          = object
+              (catMaybes
+                 [("objectType" .=) <$> _foObjectType,
+                  ("filter" .=) <$> _foFilter])
+
+-- | Structured results that are returned as part of search request.
+--
+-- /See:/ 'structuredResult' smart constructor.
+newtype StructuredResult = StructuredResult'
+    { _srPerson :: Maybe Person
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StructuredResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srPerson'
+structuredResult
+    :: StructuredResult
+structuredResult =
+    StructuredResult'
+    { _srPerson = Nothing
+    }
+
+srPerson :: Lens' StructuredResult (Maybe Person)
+srPerson = lens _srPerson (\ s a -> s{_srPerson = a})
+
+instance FromJSON StructuredResult where
+        parseJSON
+          = withObject "StructuredResult"
+              (\ o -> StructuredResult' <$> (o .:? "person"))
+
+instance ToJSON StructuredResult where
+        toJSON StructuredResult'{..}
+          = object (catMaybes [("person" .=) <$> _srPerson])
+
+--
+-- /See:/ 'processingError' smart constructor.
+data ProcessingError = ProcessingError'
+    { _peFieldViolations :: !(Maybe [FieldViolation])
+    , _peCode            :: !(Maybe ProcessingErrorCode)
+    , _peErrorMessage    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProcessingError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'peFieldViolations'
+--
+-- * 'peCode'
+--
+-- * 'peErrorMessage'
+processingError
+    :: ProcessingError
+processingError =
+    ProcessingError'
+    { _peFieldViolations = Nothing
+    , _peCode = Nothing
+    , _peErrorMessage = Nothing
+    }
+
+-- | In case the item fields are invalid, this field contains the details
+-- about the validation errors.
+peFieldViolations :: Lens' ProcessingError [FieldViolation]
+peFieldViolations
+  = lens _peFieldViolations
+      (\ s a -> s{_peFieldViolations = a})
+      . _Default
+      . _Coerce
+
+-- | Error code indicating the nature of the error.
+peCode :: Lens' ProcessingError (Maybe ProcessingErrorCode)
+peCode = lens _peCode (\ s a -> s{_peCode = a})
+
+-- | Description of the error.
+peErrorMessage :: Lens' ProcessingError (Maybe Text)
+peErrorMessage
+  = lens _peErrorMessage
+      (\ s a -> s{_peErrorMessage = a})
+
+instance FromJSON ProcessingError where
+        parseJSON
+          = withObject "ProcessingError"
+              (\ o ->
+                 ProcessingError' <$>
+                   (o .:? "fieldViolations" .!= mempty) <*>
+                     (o .:? "code")
+                     <*> (o .:? "errorMessage"))
+
+instance ToJSON ProcessingError where
+        toJSON ProcessingError'{..}
+          = object
+              (catMaybes
+                 [("fieldViolations" .=) <$> _peFieldViolations,
+                  ("code" .=) <$> _peCode,
+                  ("errorMessage" .=) <$> _peErrorMessage])
+
+--
+-- /See:/ 'listItemNamesForUnmAppedIdentityResponse' smart constructor.
+data ListItemNamesForUnmAppedIdentityResponse = ListItemNamesForUnmAppedIdentityResponse'
+    { _linfuairNextPageToken :: !(Maybe Text)
+    , _linfuairItemNames     :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListItemNamesForUnmAppedIdentityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'linfuairNextPageToken'
+--
+-- * 'linfuairItemNames'
+listItemNamesForUnmAppedIdentityResponse
+    :: ListItemNamesForUnmAppedIdentityResponse
+listItemNamesForUnmAppedIdentityResponse =
+    ListItemNamesForUnmAppedIdentityResponse'
+    { _linfuairNextPageToken = Nothing
+    , _linfuairItemNames = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+linfuairNextPageToken :: Lens' ListItemNamesForUnmAppedIdentityResponse (Maybe Text)
+linfuairNextPageToken
+  = lens _linfuairNextPageToken
+      (\ s a -> s{_linfuairNextPageToken = a})
+
+linfuairItemNames :: Lens' ListItemNamesForUnmAppedIdentityResponse [Text]
+linfuairItemNames
+  = lens _linfuairItemNames
+      (\ s a -> s{_linfuairItemNames = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         ListItemNamesForUnmAppedIdentityResponse where
+        parseJSON
+          = withObject
+              "ListItemNamesForUnmAppedIdentityResponse"
+              (\ o ->
+                 ListItemNamesForUnmAppedIdentityResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "itemNames" .!= mempty))
+
+instance ToJSON
+         ListItemNamesForUnmAppedIdentityResponse where
+        toJSON ListItemNamesForUnmAppedIdentityResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _linfuairNextPageToken,
+                  ("itemNames" .=) <$> _linfuairItemNames])
+
+-- | Access control list information for the item. For more information see
+-- https:\/\/developers.google.com\/cloud-search\/docs\/guides\/index-your-data#acls
+--
+-- /See:/ 'itemACL' smart constructor.
+data ItemACL = ItemACL'
+    { _iaOwners             :: !(Maybe [Principal])
+    , _iaReaders            :: !(Maybe [Principal])
+    , _iaACLInheritanceType :: !(Maybe ItemACLACLInheritanceType)
+    , _iaInheritACLFrom     :: !(Maybe Text)
+    , _iaDeniedReaders      :: !(Maybe [Principal])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ItemACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iaOwners'
+--
+-- * 'iaReaders'
+--
+-- * 'iaACLInheritanceType'
+--
+-- * 'iaInheritACLFrom'
+--
+-- * 'iaDeniedReaders'
+itemACL
+    :: ItemACL
+itemACL =
+    ItemACL'
+    { _iaOwners = Nothing
+    , _iaReaders = Nothing
+    , _iaACLInheritanceType = Nothing
+    , _iaInheritACLFrom = Nothing
+    , _iaDeniedReaders = Nothing
+    }
+
+-- | Optional. List of owners for the item. This field has no bearing on
+-- document access permissions. It does, however, offer a slight ranking
+-- boosts items where the querying user is an owner. The maximum number of
+-- elements is 5.
+iaOwners :: Lens' ItemACL [Principal]
+iaOwners
+  = lens _iaOwners (\ s a -> s{_iaOwners = a}) .
+      _Default
+      . _Coerce
+
+-- | List of principals who are allowed to see the item in search results.
+-- Optional if inheriting permissions from another item or if the item is
+-- not intended to be visible, such as virtual containers. The maximum
+-- number of elements is 1000.
+iaReaders :: Lens' ItemACL [Principal]
+iaReaders
+  = lens _iaReaders (\ s a -> s{_iaReaders = a}) .
+      _Default
+      . _Coerce
+
+-- | Sets the type of access rules to apply when an item inherits its ACL
+-- from a parent. This should always be set in tandem with the
+-- inheritAclFrom field. Also, when the inheritAclFrom field is set, this
+-- field should be set to a valid AclInheritanceType.
+iaACLInheritanceType :: Lens' ItemACL (Maybe ItemACLACLInheritanceType)
+iaACLInheritanceType
+  = lens _iaACLInheritanceType
+      (\ s a -> s{_iaACLInheritanceType = a})
+
+-- | Name of the item to inherit the Access Permission List (ACL) from. Note:
+-- ACL inheritance *only* provides access permissions to child items and
+-- does not define structural relationships, nor does it provide convenient
+-- ways to delete large groups of items. Deleting an ACL parent from the
+-- index only alters the access permissions of child items that reference
+-- the parent in the inheritAclFrom field. The item is still in the index,
+-- but may not visible in search results. By contrast, deletion of a
+-- container item also deletes all items that reference the container via
+-- the containerName field. The maximum length for this field is 1536
+-- characters.
+iaInheritACLFrom :: Lens' ItemACL (Maybe Text)
+iaInheritACLFrom
+  = lens _iaInheritACLFrom
+      (\ s a -> s{_iaInheritACLFrom = a})
+
+-- | List of principals who are explicitly denied access to the item in
+-- search results. While principals are denied access by default, use
+-- denied readers to handle exceptions and override the list allowed
+-- readers. The maximum number of elements is 100.
+iaDeniedReaders :: Lens' ItemACL [Principal]
+iaDeniedReaders
+  = lens _iaDeniedReaders
+      (\ s a -> s{_iaDeniedReaders = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ItemACL where
+        parseJSON
+          = withObject "ItemACL"
+              (\ o ->
+                 ItemACL' <$>
+                   (o .:? "owners" .!= mempty) <*>
+                     (o .:? "readers" .!= mempty)
+                     <*> (o .:? "aclInheritanceType")
+                     <*> (o .:? "inheritAclFrom")
+                     <*> (o .:? "deniedReaders" .!= mempty))
+
+instance ToJSON ItemACL where
+        toJSON ItemACL'{..}
+          = object
+              (catMaybes
+                 [("owners" .=) <$> _iaOwners,
+                  ("readers" .=) <$> _iaReaders,
+                  ("aclInheritanceType" .=) <$> _iaACLInheritanceType,
+                  ("inheritAclFrom" .=) <$> _iaInheritACLFrom,
+                  ("deniedReaders" .=) <$> _iaDeniedReaders])
+
+-- | Definition of a single value with generic type.
+--
+-- /See:/ 'value' smart constructor.
+data Value = Value'
+    { _vIntegerValue   :: !(Maybe (Textual Int64))
+    , _vTimestampValue :: !(Maybe DateTime')
+    , _vDoubleValue    :: !(Maybe (Textual Double))
+    , _vStringValue    :: !(Maybe Text)
+    , _vDateValue      :: !(Maybe Date)
+    , _vBooleanValue   :: !(Maybe Bool)
+    } 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:
+--
+-- * 'vIntegerValue'
+--
+-- * 'vTimestampValue'
+--
+-- * 'vDoubleValue'
+--
+-- * 'vStringValue'
+--
+-- * 'vDateValue'
+--
+-- * 'vBooleanValue'
+value
+    :: Value
+value =
+    Value'
+    { _vIntegerValue = Nothing
+    , _vTimestampValue = Nothing
+    , _vDoubleValue = Nothing
+    , _vStringValue = Nothing
+    , _vDateValue = Nothing
+    , _vBooleanValue = Nothing
+    }
+
+vIntegerValue :: Lens' Value (Maybe Int64)
+vIntegerValue
+  = lens _vIntegerValue
+      (\ s a -> s{_vIntegerValue = a})
+      . mapping _Coerce
+
+vTimestampValue :: Lens' Value (Maybe UTCTime)
+vTimestampValue
+  = lens _vTimestampValue
+      (\ s a -> s{_vTimestampValue = a})
+      . mapping _DateTime
+
+vDoubleValue :: Lens' Value (Maybe Double)
+vDoubleValue
+  = lens _vDoubleValue (\ s a -> s{_vDoubleValue = a})
+      . mapping _Coerce
+
+vStringValue :: Lens' Value (Maybe Text)
+vStringValue
+  = lens _vStringValue (\ s a -> s{_vStringValue = a})
+
+vDateValue :: Lens' Value (Maybe Date)
+vDateValue
+  = lens _vDateValue (\ s a -> s{_vDateValue = a})
+
+vBooleanValue :: Lens' Value (Maybe Bool)
+vBooleanValue
+  = lens _vBooleanValue
+      (\ s a -> s{_vBooleanValue = a})
+
+instance FromJSON Value where
+        parseJSON
+          = withObject "Value"
+              (\ o ->
+                 Value' <$>
+                   (o .:? "integerValue") <*> (o .:? "timestampValue")
+                     <*> (o .:? "doubleValue")
+                     <*> (o .:? "stringValue")
+                     <*> (o .:? "dateValue")
+                     <*> (o .:? "booleanValue"))
+
+instance ToJSON Value where
+        toJSON Value'{..}
+          = object
+              (catMaybes
+                 [("integerValue" .=) <$> _vIntegerValue,
+                  ("timestampValue" .=) <$> _vTimestampValue,
+                  ("doubleValue" .=) <$> _vDoubleValue,
+                  ("stringValue" .=) <$> _vStringValue,
+                  ("dateValue" .=) <$> _vDateValue,
+                  ("booleanValue" .=) <$> _vBooleanValue])
+
+--
+-- /See:/ 'fieldViolation' smart constructor.
+data FieldViolation = FieldViolation'
+    { _fvField       :: !(Maybe Text)
+    , _fvDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FieldViolation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fvField'
+--
+-- * 'fvDescription'
+fieldViolation
+    :: FieldViolation
+fieldViolation =
+    FieldViolation'
+    { _fvField = Nothing
+    , _fvDescription = Nothing
+    }
+
+-- | Path of field with violation.
+fvField :: Lens' FieldViolation (Maybe Text)
+fvField = lens _fvField (\ s a -> s{_fvField = a})
+
+-- | Description of the error.
+fvDescription :: Lens' FieldViolation (Maybe Text)
+fvDescription
+  = lens _fvDescription
+      (\ s a -> s{_fvDescription = a})
+
+instance FromJSON FieldViolation where
+        parseJSON
+          = withObject "FieldViolation"
+              (\ o ->
+                 FieldViolation' <$>
+                   (o .:? "field") <*> (o .:? "description"))
+
+instance ToJSON FieldViolation where
+        toJSON FieldViolation'{..}
+          = object
+              (catMaybes
+                 [("field" .=) <$> _fvField,
+                  ("description" .=) <$> _fvDescription])
+
+-- | A metaline is a list of properties that are displayed along with the
+-- search result to provide context.
+--
+-- /See:/ 'metaline' smart constructor.
+newtype Metaline = Metaline'
+    { _mProperties :: Maybe [DisplayedProperty]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Metaline' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mProperties'
+metaline
+    :: Metaline
+metaline =
+    Metaline'
+    { _mProperties = Nothing
+    }
+
+-- | The list of displayed properties for the metaline.
+mProperties :: Lens' Metaline [DisplayedProperty]
+mProperties
+  = lens _mProperties (\ s a -> s{_mProperties = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Metaline where
+        parseJSON
+          = withObject "Metaline"
+              (\ o ->
+                 Metaline' <$> (o .:? "properties" .!= mempty))
+
+instance ToJSON Metaline where
+        toJSON Metaline'{..}
+          = object
+              (catMaybes [("properties" .=) <$> _mProperties])
+
+-- | A bucket in a facet is the basic unit of operation. A bucket can
+-- comprise either a single value OR a contiguous range of values,
+-- depending on the type of the field bucketed. FacetBucket is currently
+-- used only for returning the response object.
+--
+-- /See:/ 'facetBucket' smart constructor.
+data FacetBucket = FacetBucket'
+    { _fbValue      :: !(Maybe Value)
+    , _fbCount      :: !(Maybe (Textual Int32))
+    , _fbPercentage :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FacetBucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fbValue'
+--
+-- * 'fbCount'
+--
+-- * 'fbPercentage'
+facetBucket
+    :: FacetBucket
+facetBucket =
+    FacetBucket'
+    { _fbValue = Nothing
+    , _fbCount = Nothing
+    , _fbPercentage = Nothing
+    }
+
+fbValue :: Lens' FacetBucket (Maybe Value)
+fbValue = lens _fbValue (\ s a -> s{_fbValue = a})
+
+-- | Number of results that match the bucket value.
+fbCount :: Lens' FacetBucket (Maybe Int32)
+fbCount
+  = lens _fbCount (\ s a -> s{_fbCount = a}) .
+      mapping _Coerce
+
+-- | Percent of results that match the bucket value. This value is between
+-- (0-100]. This may not be accurate and is a best effort estimate.
+fbPercentage :: Lens' FacetBucket (Maybe Int32)
+fbPercentage
+  = lens _fbPercentage (\ s a -> s{_fbPercentage = a})
+      . mapping _Coerce
+
+instance FromJSON FacetBucket where
+        parseJSON
+          = withObject "FacetBucket"
+              (\ o ->
+                 FacetBucket' <$>
+                   (o .:? "value") <*> (o .:? "count") <*>
+                     (o .:? "percentage"))
+
+instance ToJSON FacetBucket where
+        toJSON FacetBucket'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _fbValue,
+                  ("count" .=) <$> _fbCount,
+                  ("percentage" .=) <$> _fbPercentage])
+
+--
+-- /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
+
+-- | Used to provide a search operator for timestamp properties. This is
+-- optional. Search operators let users restrict the query to specific
+-- fields relevant to the type of item being searched.
+--
+-- /See:/ 'timestampOperatorOptions' smart constructor.
+data TimestampOperatorOptions = TimestampOperatorOptions'
+    { _tOperatorName            :: !(Maybe Text)
+    , _tLessThanOperatorName    :: !(Maybe Text)
+    , _tGreaterThanOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimestampOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tOperatorName'
+--
+-- * 'tLessThanOperatorName'
+--
+-- * 'tGreaterThanOperatorName'
+timestampOperatorOptions
+    :: TimestampOperatorOptions
+timestampOperatorOptions =
+    TimestampOperatorOptions'
+    { _tOperatorName = Nothing
+    , _tLessThanOperatorName = Nothing
+    , _tGreaterThanOperatorName = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the timestamp property. For example, if operatorName is *closedon* and
+-- the property\'s name is *closeDate*, then queries like
+-- *closedon:\<value>* will show results only where the value of the
+-- property named *closeDate* matches *\<value>*. By contrast, a search
+-- that uses the same *\<value>* without an operator will return all items
+-- where *\<value>* matches the value of any String properties or text
+-- within the content field for the item. The operator name can only
+-- contain lowercase letters (a-z). The maximum length is 32 characters.
+tOperatorName :: Lens' TimestampOperatorOptions (Maybe Text)
+tOperatorName
+  = lens _tOperatorName
+      (\ s a -> s{_tOperatorName = a})
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the timestamp property using the less-than operator. For example, if
+-- lessThanOperatorName is *closedbefore* and the property\'s name is
+-- *closeDate*, then queries like *closedbefore:\<value>* will show results
+-- only where the value of the property named *closeDate* is earlier than
+-- *\<value>*. The operator name can only contain lowercase letters (a-z).
+-- The maximum length is 32 characters.
+tLessThanOperatorName :: Lens' TimestampOperatorOptions (Maybe Text)
+tLessThanOperatorName
+  = lens _tLessThanOperatorName
+      (\ s a -> s{_tLessThanOperatorName = a})
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the timestamp property using the greater-than operator. For example, if
+-- greaterThanOperatorName is *closedafter* and the property\'s name is
+-- *closeDate*, then queries like *closedafter:\<value>* will show results
+-- only where the value of the property named *closeDate* is later than
+-- *\<value>*. The operator name can only contain lowercase letters (a-z).
+-- The maximum length is 32 characters.
+tGreaterThanOperatorName :: Lens' TimestampOperatorOptions (Maybe Text)
+tGreaterThanOperatorName
+  = lens _tGreaterThanOperatorName
+      (\ s a -> s{_tGreaterThanOperatorName = a})
+
+instance FromJSON TimestampOperatorOptions where
+        parseJSON
+          = withObject "TimestampOperatorOptions"
+              (\ o ->
+                 TimestampOperatorOptions' <$>
+                   (o .:? "operatorName") <*>
+                     (o .:? "lessThanOperatorName")
+                     <*> (o .:? "greaterThanOperatorName"))
+
+instance ToJSON TimestampOperatorOptions where
+        toJSON TimestampOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _tOperatorName,
+                  ("lessThanOperatorName" .=) <$>
+                    _tLessThanOperatorName,
+                  ("greaterThanOperatorName" .=) <$>
+                    _tGreaterThanOperatorName])
+
+-- | Used to provide a search operator for integer properties. This is
+-- optional. Search operators let users restrict the query to specific
+-- fields relevant to the type of item being searched.
+--
+-- /See:/ 'integerOperatorOptions' smart constructor.
+data IntegerOperatorOptions = IntegerOperatorOptions'
+    { _iooOperatorName            :: !(Maybe Text)
+    , _iooLessThanOperatorName    :: !(Maybe Text)
+    , _iooGreaterThanOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IntegerOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iooOperatorName'
+--
+-- * 'iooLessThanOperatorName'
+--
+-- * 'iooGreaterThanOperatorName'
+integerOperatorOptions
+    :: IntegerOperatorOptions
+integerOperatorOptions =
+    IntegerOperatorOptions'
+    { _iooOperatorName = Nothing
+    , _iooLessThanOperatorName = Nothing
+    , _iooGreaterThanOperatorName = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the integer property. For example, if operatorName is *priority* and the
+-- property\'s name is *priorityVal*, then queries like *priority:\<value>*
+-- will show results only where the value of the property named
+-- *priorityVal* matches *\<value>*. By contrast, a search that uses the
+-- same *\<value>* without an operator will return all items where
+-- *\<value>* matches the value of any String properties or text within the
+-- content field for the item. The operator name can only contain lowercase
+-- letters (a-z). The maximum length is 32 characters.
+iooOperatorName :: Lens' IntegerOperatorOptions (Maybe Text)
+iooOperatorName
+  = lens _iooOperatorName
+      (\ s a -> s{_iooOperatorName = a})
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the integer property using the less-than operator. For example, if
+-- lessThanOperatorName is *prioritybelow* and the property\'s name is
+-- *priorityVal*, then queries like *prioritybelow:\<value>* will show
+-- results only where the value of the property named *priorityVal* is less
+-- than *\<value>*. The operator name can only contain lowercase letters
+-- (a-z). The maximum length is 32 characters.
+iooLessThanOperatorName :: Lens' IntegerOperatorOptions (Maybe Text)
+iooLessThanOperatorName
+  = lens _iooLessThanOperatorName
+      (\ s a -> s{_iooLessThanOperatorName = a})
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the integer property using the greater-than operator. For example, if
+-- greaterThanOperatorName is *priorityabove* and the property\'s name is
+-- *priorityVal*, then queries like *priorityabove:\<value>* will show
+-- results only where the value of the property named *priorityVal* is
+-- greater than *\<value>*. The operator name can only contain lowercase
+-- letters (a-z). The maximum length is 32 characters.
+iooGreaterThanOperatorName :: Lens' IntegerOperatorOptions (Maybe Text)
+iooGreaterThanOperatorName
+  = lens _iooGreaterThanOperatorName
+      (\ s a -> s{_iooGreaterThanOperatorName = a})
+
+instance FromJSON IntegerOperatorOptions where
+        parseJSON
+          = withObject "IntegerOperatorOptions"
+              (\ o ->
+                 IntegerOperatorOptions' <$>
+                   (o .:? "operatorName") <*>
+                     (o .:? "lessThanOperatorName")
+                     <*> (o .:? "greaterThanOperatorName"))
+
+instance ToJSON IntegerOperatorOptions where
+        toJSON IntegerOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _iooOperatorName,
+                  ("lessThanOperatorName" .=) <$>
+                    _iooLessThanOperatorName,
+                  ("greaterThanOperatorName" .=) <$>
+                    _iooGreaterThanOperatorName])
+
+-- | A completed query suggestion.
+--
+-- /See:/ 'querySuggestion' smart constructor.
+data QuerySuggestion =
+    QuerySuggestion'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QuerySuggestion' with the minimum fields required to make a request.
+--
+querySuggestion
+    :: QuerySuggestion
+querySuggestion = QuerySuggestion'
+
+instance FromJSON QuerySuggestion where
+        parseJSON
+          = withObject "QuerySuggestion"
+              (\ o -> pure QuerySuggestion')
+
+instance ToJSON QuerySuggestion where
+        toJSON = const emptyObject
+
+--
+-- /See:/ 'listSearchApplicationsResponse' smart constructor.
+data ListSearchApplicationsResponse = ListSearchApplicationsResponse'
+    { _lsarNextPageToken      :: !(Maybe Text)
+    , _lsarSearchApplications :: !(Maybe [SearchApplication])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListSearchApplicationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsarNextPageToken'
+--
+-- * 'lsarSearchApplications'
+listSearchApplicationsResponse
+    :: ListSearchApplicationsResponse
+listSearchApplicationsResponse =
+    ListSearchApplicationsResponse'
+    { _lsarNextPageToken = Nothing
+    , _lsarSearchApplications = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+lsarNextPageToken :: Lens' ListSearchApplicationsResponse (Maybe Text)
+lsarNextPageToken
+  = lens _lsarNextPageToken
+      (\ s a -> s{_lsarNextPageToken = a})
+
+lsarSearchApplications :: Lens' ListSearchApplicationsResponse [SearchApplication]
+lsarSearchApplications
+  = lens _lsarSearchApplications
+      (\ s a -> s{_lsarSearchApplications = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListSearchApplicationsResponse
+         where
+        parseJSON
+          = withObject "ListSearchApplicationsResponse"
+              (\ o ->
+                 ListSearchApplicationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "searchApplications" .!= mempty))
+
+instance ToJSON ListSearchApplicationsResponse where
+        toJSON ListSearchApplicationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lsarNextPageToken,
+                  ("searchApplications" .=) <$>
+                    _lsarSearchApplications])
+
+-- | Debugging information about the result.
+--
+-- /See:/ 'resultDebugInfo' smart constructor.
+newtype ResultDebugInfo = ResultDebugInfo'
+    { _rdiFormattedDebugInfo :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultDebugInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdiFormattedDebugInfo'
+resultDebugInfo
+    :: ResultDebugInfo
+resultDebugInfo =
+    ResultDebugInfo'
+    { _rdiFormattedDebugInfo = Nothing
+    }
+
+-- | General debug info formatted for display.
+rdiFormattedDebugInfo :: Lens' ResultDebugInfo (Maybe Text)
+rdiFormattedDebugInfo
+  = lens _rdiFormattedDebugInfo
+      (\ s a -> s{_rdiFormattedDebugInfo = a})
+
+instance FromJSON ResultDebugInfo where
+        parseJSON
+          = withObject "ResultDebugInfo"
+              (\ o ->
+                 ResultDebugInfo' <$> (o .:? "formattedDebugInfo"))
+
+instance ToJSON ResultDebugInfo where
+        toJSON ResultDebugInfo'{..}
+          = object
+              (catMaybes
+                 [("formattedDebugInfo" .=) <$>
+                    _rdiFormattedDebugInfo])
+
+--
+-- /See:/ 'itemCountByStatus' smart constructor.
+data ItemCountByStatus = ItemCountByStatus'
+    { _icbsCount      :: !(Maybe (Textual Int64))
+    , _icbsStatusCode :: !(Maybe ItemCountByStatusStatusCode)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ItemCountByStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icbsCount'
+--
+-- * 'icbsStatusCode'
+itemCountByStatus
+    :: ItemCountByStatus
+itemCountByStatus =
+    ItemCountByStatus'
+    { _icbsCount = Nothing
+    , _icbsStatusCode = Nothing
+    }
+
+-- | Number of items matching the status code.
+icbsCount :: Lens' ItemCountByStatus (Maybe Int64)
+icbsCount
+  = lens _icbsCount (\ s a -> s{_icbsCount = a}) .
+      mapping _Coerce
+
+-- | Status of the items.
+icbsStatusCode :: Lens' ItemCountByStatus (Maybe ItemCountByStatusStatusCode)
+icbsStatusCode
+  = lens _icbsStatusCode
+      (\ s a -> s{_icbsStatusCode = a})
+
+instance FromJSON ItemCountByStatus where
+        parseJSON
+          = withObject "ItemCountByStatus"
+              (\ o ->
+                 ItemCountByStatus' <$>
+                   (o .:? "count") <*> (o .:? "statusCode"))
+
+instance ToJSON ItemCountByStatus where
+        toJSON ItemCountByStatus'{..}
+          = object
+              (catMaybes
+                 [("count" .=) <$> _icbsCount,
+                  ("statusCode" .=) <$> _icbsStatusCode])
+
+-- | Options for timestamp properties.
+--
+-- /See:/ 'timestampPropertyOptions' smart constructor.
+newtype TimestampPropertyOptions = TimestampPropertyOptions'
+    { _tpoOperatorOptions :: Maybe TimestampOperatorOptions
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimestampPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpoOperatorOptions'
+timestampPropertyOptions
+    :: TimestampPropertyOptions
+timestampPropertyOptions =
+    TimestampPropertyOptions'
+    { _tpoOperatorOptions = Nothing
+    }
+
+-- | If set, describes how the timestamp should be used as a search operator.
+tpoOperatorOptions :: Lens' TimestampPropertyOptions (Maybe TimestampOperatorOptions)
+tpoOperatorOptions
+  = lens _tpoOperatorOptions
+      (\ s a -> s{_tpoOperatorOptions = a})
+
+instance FromJSON TimestampPropertyOptions where
+        parseJSON
+          = withObject "TimestampPropertyOptions"
+              (\ o ->
+                 TimestampPropertyOptions' <$>
+                   (o .:? "operatorOptions"))
+
+instance ToJSON TimestampPropertyOptions where
+        toJSON TimestampPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorOptions" .=) <$> _tpoOperatorOptions])
+
+-- | Result count information
+--
+-- /See:/ 'resultCounts' smart constructor.
+newtype ResultCounts = ResultCounts'
+    { _rcSourceResultCounts :: Maybe [SourceResultCount]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultCounts' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcSourceResultCounts'
+resultCounts
+    :: ResultCounts
+resultCounts =
+    ResultCounts'
+    { _rcSourceResultCounts = Nothing
+    }
+
+-- | Result count information for each source with results.
+rcSourceResultCounts :: Lens' ResultCounts [SourceResultCount]
+rcSourceResultCounts
+  = lens _rcSourceResultCounts
+      (\ s a -> s{_rcSourceResultCounts = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ResultCounts where
+        parseJSON
+          = withObject "ResultCounts"
+              (\ o ->
+                 ResultCounts' <$>
+                   (o .:? "sourceResultCounts" .!= mempty))
+
+instance ToJSON ResultCounts where
+        toJSON ResultCounts'{..}
+          = object
+              (catMaybes
+                 [("sourceResultCounts" .=) <$>
+                    _rcSourceResultCounts])
+
+-- | Indicates which freshness property to use when adjusting search ranking
+-- for an item. Fresher, more recent dates indicate higher quality. Use the
+-- freshness option property that best works with your data. For fileshare
+-- documents, last modified time is most relevant. For calendar event data,
+-- the time when the event occurs is a more relevant freshness indicator.
+-- In this way, calendar events that occur closer to the time of the search
+-- query are considered higher quality and ranked accordingly.
+--
+-- /See:/ 'freshnessOptions' smart constructor.
+data FreshnessOptions = FreshnessOptions'
+    { _foFreshnessDuration :: !(Maybe GDuration)
+    , _foFreshnessProperty :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FreshnessOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'foFreshnessDuration'
+--
+-- * 'foFreshnessProperty'
+freshnessOptions
+    :: FreshnessOptions
+freshnessOptions =
+    FreshnessOptions'
+    { _foFreshnessDuration = Nothing
+    , _foFreshnessProperty = Nothing
+    }
+
+-- | The duration (in seconds) after which an object should be considered
+-- stale.
+foFreshnessDuration :: Lens' FreshnessOptions (Maybe Scientific)
+foFreshnessDuration
+  = lens _foFreshnessDuration
+      (\ s a -> s{_foFreshnessDuration = a})
+      . mapping _GDuration
+
+-- | This property indicates the freshness level of the object in the index.
+-- If set, this property must be a top-level property within the property
+-- definitions and it must be a timestamp type or date type. Otherwise, the
+-- Indexing API uses updateTime as the freshness indicator. The maximum
+-- length is 256 characters.
+foFreshnessProperty :: Lens' FreshnessOptions (Maybe Text)
+foFreshnessProperty
+  = lens _foFreshnessProperty
+      (\ s a -> s{_foFreshnessProperty = a})
+
+instance FromJSON FreshnessOptions where
+        parseJSON
+          = withObject "FreshnessOptions"
+              (\ o ->
+                 FreshnessOptions' <$>
+                   (o .:? "freshnessDuration") <*>
+                     (o .:? "freshnessProperty"))
+
+instance ToJSON FreshnessOptions where
+        toJSON FreshnessOptions'{..}
+          = object
+              (catMaybes
+                 [("freshnessDuration" .=) <$> _foFreshnessDuration,
+                  ("freshnessProperty" .=) <$> _foFreshnessProperty])
+
+-- | Shared request debug options for all cloudsearch RPC methods.
+--
+-- /See:/ 'debugOptions' smart constructor.
+newtype DebugOptions = DebugOptions'
+    { _doEnableDebugging :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DebugOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'doEnableDebugging'
+debugOptions
+    :: DebugOptions
+debugOptions =
+    DebugOptions'
+    { _doEnableDebugging = Nothing
+    }
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+doEnableDebugging :: Lens' DebugOptions (Maybe Bool)
+doEnableDebugging
+  = lens _doEnableDebugging
+      (\ s a -> s{_doEnableDebugging = a})
+
+instance FromJSON DebugOptions where
+        parseJSON
+          = withObject "DebugOptions"
+              (\ o -> DebugOptions' <$> (o .:? "enableDebugging"))
+
+instance ToJSON DebugOptions where
+        toJSON DebugOptions'{..}
+          = object
+              (catMaybes
+                 [("enableDebugging" .=) <$> _doEnableDebugging])
+
+-- | Options for integer properties.
+--
+-- /See:/ 'integerPropertyOptions' smart constructor.
+data IntegerPropertyOptions = IntegerPropertyOptions'
+    { _ipoMaximumValue    :: !(Maybe (Textual Int64))
+    , _ipoOrderedRanking  :: !(Maybe IntegerPropertyOptionsOrderedRanking)
+    , _ipoMinimumValue    :: !(Maybe (Textual Int64))
+    , _ipoOperatorOptions :: !(Maybe IntegerOperatorOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IntegerPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipoMaximumValue'
+--
+-- * 'ipoOrderedRanking'
+--
+-- * 'ipoMinimumValue'
+--
+-- * 'ipoOperatorOptions'
+integerPropertyOptions
+    :: IntegerPropertyOptions
+integerPropertyOptions =
+    IntegerPropertyOptions'
+    { _ipoMaximumValue = Nothing
+    , _ipoOrderedRanking = Nothing
+    , _ipoMinimumValue = Nothing
+    , _ipoOperatorOptions = Nothing
+    }
+
+-- | The maximum value of the property. The minimum and maximum values for
+-- the property are used to rank results according to the ordered ranking.
+-- Indexing requests with values greater than the maximum are accepted and
+-- ranked with the same weight as items indexed with the maximum value.
+ipoMaximumValue :: Lens' IntegerPropertyOptions (Maybe Int64)
+ipoMaximumValue
+  = lens _ipoMaximumValue
+      (\ s a -> s{_ipoMaximumValue = a})
+      . mapping _Coerce
+
+-- | Used to specify the ordered ranking for the integer. Can only be used if
+-- isRepeatable is false.
+ipoOrderedRanking :: Lens' IntegerPropertyOptions (Maybe IntegerPropertyOptionsOrderedRanking)
+ipoOrderedRanking
+  = lens _ipoOrderedRanking
+      (\ s a -> s{_ipoOrderedRanking = a})
+
+-- | The minimum value of the property. The minimum and maximum values for
+-- the property are used to rank results according to the ordered ranking.
+-- Indexing requests with values less than the minimum are accepted and
+-- ranked with the same weight as items indexed with the minimum value.
+ipoMinimumValue :: Lens' IntegerPropertyOptions (Maybe Int64)
+ipoMinimumValue
+  = lens _ipoMinimumValue
+      (\ s a -> s{_ipoMinimumValue = a})
+      . mapping _Coerce
+
+-- | If set, describes how the integer should be used as a search operator.
+ipoOperatorOptions :: Lens' IntegerPropertyOptions (Maybe IntegerOperatorOptions)
+ipoOperatorOptions
+  = lens _ipoOperatorOptions
+      (\ s a -> s{_ipoOperatorOptions = a})
+
+instance FromJSON IntegerPropertyOptions where
+        parseJSON
+          = withObject "IntegerPropertyOptions"
+              (\ o ->
+                 IntegerPropertyOptions' <$>
+                   (o .:? "maximumValue") <*> (o .:? "orderedRanking")
+                     <*> (o .:? "minimumValue")
+                     <*> (o .:? "operatorOptions"))
+
+instance ToJSON IntegerPropertyOptions where
+        toJSON IntegerPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("maximumValue" .=) <$> _ipoMaximumValue,
+                  ("orderedRanking" .=) <$> _ipoOrderedRanking,
+                  ("minimumValue" .=) <$> _ipoMinimumValue,
+                  ("operatorOptions" .=) <$> _ipoOperatorOptions])
+
+-- | Restriction on Datasource.
+--
+-- /See:/ 'dataSourceRestriction' smart constructor.
+data DataSourceRestriction = DataSourceRestriction'
+    { _dsrFilterOptions :: !(Maybe [FilterOptions])
+    , _dsrSource        :: !(Maybe Source)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSourceRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrFilterOptions'
+--
+-- * 'dsrSource'
+dataSourceRestriction
+    :: DataSourceRestriction
+dataSourceRestriction =
+    DataSourceRestriction'
+    { _dsrFilterOptions = Nothing
+    , _dsrSource = Nothing
+    }
+
+-- | Filter options restricting the results. If multiple filters are present,
+-- they are grouped by object type before joining. Filters with the same
+-- object type are joined conjunctively, then the resulting expressions are
+-- joined disjunctively. The maximum number of elements is 20.
+dsrFilterOptions :: Lens' DataSourceRestriction [FilterOptions]
+dsrFilterOptions
+  = lens _dsrFilterOptions
+      (\ s a -> s{_dsrFilterOptions = a})
+      . _Default
+      . _Coerce
+
+-- | The source of restriction.
+dsrSource :: Lens' DataSourceRestriction (Maybe Source)
+dsrSource
+  = lens _dsrSource (\ s a -> s{_dsrSource = a})
+
+instance FromJSON DataSourceRestriction where
+        parseJSON
+          = withObject "DataSourceRestriction"
+              (\ o ->
+                 DataSourceRestriction' <$>
+                   (o .:? "filterOptions" .!= mempty) <*>
+                     (o .:? "source"))
+
+instance ToJSON DataSourceRestriction where
+        toJSON DataSourceRestriction'{..}
+          = object
+              (catMaybes
+                 [("filterOptions" .=) <$> _dsrFilterOptions,
+                  ("source" .=) <$> _dsrSource])
+
+-- | The schema definition for a data source.
+--
+-- /See:/ 'schema' smart constructor.
+data Schema = Schema'
+    { _sObjectDefinitions :: !(Maybe [ObjectDefinition])
+    , _sOperationIds      :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Schema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sObjectDefinitions'
+--
+-- * 'sOperationIds'
+schema
+    :: Schema
+schema =
+    Schema'
+    { _sObjectDefinitions = Nothing
+    , _sOperationIds = Nothing
+    }
+
+-- | The list of top-level objects for the data source. The maximum number of
+-- elements is 10.
+sObjectDefinitions :: Lens' Schema [ObjectDefinition]
+sObjectDefinitions
+  = lens _sObjectDefinitions
+      (\ s a -> s{_sObjectDefinitions = a})
+      . _Default
+      . _Coerce
+
+-- | IDs of the Long Running Operations (LROs) currently running for this
+-- schema. After modifying the schema, wait for opeations to complete
+-- before indexing additional content.
+sOperationIds :: Lens' Schema [Text]
+sOperationIds
+  = lens _sOperationIds
+      (\ s a -> s{_sOperationIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Schema where
+        parseJSON
+          = withObject "Schema"
+              (\ o ->
+                 Schema' <$>
+                   (o .:? "objectDefinitions" .!= mempty) <*>
+                     (o .:? "operationIds" .!= mempty))
+
+instance ToJSON Schema where
+        toJSON Schema'{..}
+          = object
+              (catMaybes
+                 [("objectDefinitions" .=) <$> _sObjectDefinitions,
+                  ("operationIds" .=) <$> _sOperationIds])
+
+-- | The time span search restrict (e.g. \"after:2017-09-11
+-- before:2017-09-12\").
+--
+-- /See:/ 'driveTimeSpanRestrict' smart constructor.
+newtype DriveTimeSpanRestrict = DriveTimeSpanRestrict'
+    { _dtsrType :: Maybe DriveTimeSpanRestrictType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveTimeSpanRestrict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtsrType'
+driveTimeSpanRestrict
+    :: DriveTimeSpanRestrict
+driveTimeSpanRestrict =
+    DriveTimeSpanRestrict'
+    { _dtsrType = Nothing
+    }
+
+dtsrType :: Lens' DriveTimeSpanRestrict (Maybe DriveTimeSpanRestrictType)
+dtsrType = lens _dtsrType (\ s a -> s{_dtsrType = a})
+
+instance FromJSON DriveTimeSpanRestrict where
+        parseJSON
+          = withObject "DriveTimeSpanRestrict"
+              (\ o -> DriveTimeSpanRestrict' <$> (o .:? "type"))
+
+instance ToJSON DriveTimeSpanRestrict where
+        toJSON DriveTimeSpanRestrict'{..}
+          = object (catMaybes [("type" .=) <$> _dtsrType])
+
+-- | Display Fields for Search Results
+--
+-- /See:/ 'resultDisplayField' smart constructor.
+data ResultDisplayField = ResultDisplayField'
+    { _rdfProperty     :: !(Maybe NamedProperty)
+    , _rdfOperatorName :: !(Maybe Text)
+    , _rdfLabel        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultDisplayField' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdfProperty'
+--
+-- * 'rdfOperatorName'
+--
+-- * 'rdfLabel'
+resultDisplayField
+    :: ResultDisplayField
+resultDisplayField =
+    ResultDisplayField'
+    { _rdfProperty = Nothing
+    , _rdfOperatorName = Nothing
+    , _rdfLabel = Nothing
+    }
+
+-- | The name value pair for the property.
+rdfProperty :: Lens' ResultDisplayField (Maybe NamedProperty)
+rdfProperty
+  = lens _rdfProperty (\ s a -> s{_rdfProperty = a})
+
+-- | The operator name of the property.
+rdfOperatorName :: Lens' ResultDisplayField (Maybe Text)
+rdfOperatorName
+  = lens _rdfOperatorName
+      (\ s a -> s{_rdfOperatorName = a})
+
+-- | The display label for the property.
+rdfLabel :: Lens' ResultDisplayField (Maybe Text)
+rdfLabel = lens _rdfLabel (\ s a -> s{_rdfLabel = a})
+
+instance FromJSON ResultDisplayField where
+        parseJSON
+          = withObject "ResultDisplayField"
+              (\ o ->
+                 ResultDisplayField' <$>
+                   (o .:? "property") <*> (o .:? "operatorName") <*>
+                     (o .:? "label"))
+
+instance ToJSON ResultDisplayField where
+        toJSON ResultDisplayField'{..}
+          = object
+              (catMaybes
+                 [("property" .=) <$> _rdfProperty,
+                  ("operatorName" .=) <$> _rdfOperatorName,
+                  ("label" .=) <$> _rdfLabel])
+
+--
+-- /See:/ 'updateSchemaRequest' smart constructor.
+data UpdateSchemaRequest = UpdateSchemaRequest'
+    { _usrValidateOnly :: !(Maybe Bool)
+    , _usrSchema       :: !(Maybe Schema)
+    , _usrDebugOptions :: !(Maybe DebugOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateSchemaRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usrValidateOnly'
+--
+-- * 'usrSchema'
+--
+-- * 'usrDebugOptions'
+updateSchemaRequest
+    :: UpdateSchemaRequest
+updateSchemaRequest =
+    UpdateSchemaRequest'
+    { _usrValidateOnly = Nothing
+    , _usrSchema = Nothing
+    , _usrDebugOptions = Nothing
+    }
+
+-- | If true, the request will be validated without side effects.
+usrValidateOnly :: Lens' UpdateSchemaRequest (Maybe Bool)
+usrValidateOnly
+  = lens _usrValidateOnly
+      (\ s a -> s{_usrValidateOnly = a})
+
+-- | The new schema for the source.
+usrSchema :: Lens' UpdateSchemaRequest (Maybe Schema)
+usrSchema
+  = lens _usrSchema (\ s a -> s{_usrSchema = a})
+
+-- | Common debug options.
+usrDebugOptions :: Lens' UpdateSchemaRequest (Maybe DebugOptions)
+usrDebugOptions
+  = lens _usrDebugOptions
+      (\ s a -> s{_usrDebugOptions = a})
+
+instance FromJSON UpdateSchemaRequest where
+        parseJSON
+          = withObject "UpdateSchemaRequest"
+              (\ o ->
+                 UpdateSchemaRequest' <$>
+                   (o .:? "validateOnly") <*> (o .:? "schema") <*>
+                     (o .:? "debugOptions"))
+
+instance ToJSON UpdateSchemaRequest where
+        toJSON UpdateSchemaRequest'{..}
+          = object
+              (catMaybes
+                 [("validateOnly" .=) <$> _usrValidateOnly,
+                  ("schema" .=) <$> _usrSchema,
+                  ("debugOptions" .=) <$> _usrDebugOptions])
+
+-- | Represents a whole calendar date, for example a date of birth. The time
+-- of day and time zone are either specified elsewhere or are not
+-- significant. The date is relative to the [Proleptic Gregorian
+-- Calendar](https:\/\/en.wikipedia.org\/wiki\/Proleptic_Gregorian_calendar).
+-- The date must be a valid calendar date between the year 1 and 9999.
+--
+-- /See:/ 'date' smart constructor.
+data Date = Date'
+    { _dDay   :: !(Maybe (Textual Int32))
+    , _dYear  :: !(Maybe (Textual Int32))
+    , _dMonth :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Date' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dDay'
+--
+-- * 'dYear'
+--
+-- * 'dMonth'
+date
+    :: Date
+date =
+    Date'
+    { _dDay = Nothing
+    , _dYear = Nothing
+    , _dMonth = Nothing
+    }
+
+-- | Day of month. Must be from 1 to 31 and valid for the year and month.
+dDay :: Lens' Date (Maybe Int32)
+dDay
+  = lens _dDay (\ s a -> s{_dDay = a}) .
+      mapping _Coerce
+
+-- | Year of date. Must be from 1 to 9999.
+dYear :: Lens' Date (Maybe Int32)
+dYear
+  = lens _dYear (\ s a -> s{_dYear = a}) .
+      mapping _Coerce
+
+-- | Month of date. Must be from 1 to 12.
+dMonth :: Lens' Date (Maybe Int32)
+dMonth
+  = lens _dMonth (\ s a -> s{_dMonth = a}) .
+      mapping _Coerce
+
+instance FromJSON Date where
+        parseJSON
+          = withObject "Date"
+              (\ o ->
+                 Date' <$>
+                   (o .:? "day") <*> (o .:? "year") <*> (o .:? "month"))
+
+instance ToJSON Date where
+        toJSON Date'{..}
+          = object
+              (catMaybes
+                 [("day" .=) <$> _dDay, ("year" .=) <$> _dYear,
+                  ("month" .=) <$> _dMonth])
+
+-- | A reference to a top-level property within the object that should be
+-- displayed in search results. The values of the chosen properties will be
+-- displayed in the search results along with the dislpay label for that
+-- property if one is specified. If a display label is not specified, only
+-- the values will be shown.
+--
+-- /See:/ 'displayedProperty' smart constructor.
+newtype DisplayedProperty = DisplayedProperty'
+    { _dpPropertyName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisplayedProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpPropertyName'
+displayedProperty
+    :: DisplayedProperty
+displayedProperty =
+    DisplayedProperty'
+    { _dpPropertyName = Nothing
+    }
+
+-- | The name of the top-level property as defined in a property definition
+-- for the object. If the name is not a defined property in the schema, an
+-- error will be given when attempting to update the schema.
+dpPropertyName :: Lens' DisplayedProperty (Maybe Text)
+dpPropertyName
+  = lens _dpPropertyName
+      (\ s a -> s{_dpPropertyName = a})
+
+instance FromJSON DisplayedProperty where
+        parseJSON
+          = withObject "DisplayedProperty"
+              (\ o ->
+                 DisplayedProperty' <$> (o .:? "propertyName"))
+
+instance ToJSON DisplayedProperty where
+        toJSON DisplayedProperty'{..}
+          = object
+              (catMaybes [("propertyName" .=) <$> _dpPropertyName])
+
+-- | Source specific facet response
+--
+-- /See:/ 'facetResult' smart constructor.
+data FacetResult = FacetResult'
+    { _frSourceName   :: !(Maybe Text)
+    , _frBuckets      :: !(Maybe [FacetBucket])
+    , _frObjectType   :: !(Maybe Text)
+    , _frOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FacetResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frSourceName'
+--
+-- * 'frBuckets'
+--
+-- * 'frObjectType'
+--
+-- * 'frOperatorName'
+facetResult
+    :: FacetResult
+facetResult =
+    FacetResult'
+    { _frSourceName = Nothing
+    , _frBuckets = Nothing
+    , _frObjectType = Nothing
+    , _frOperatorName = Nothing
+    }
+
+-- | Source name for which facet results are returned. Will not be empty.
+frSourceName :: Lens' FacetResult (Maybe Text)
+frSourceName
+  = lens _frSourceName (\ s a -> s{_frSourceName = a})
+
+-- | FacetBuckets for values in response containing atleast a single result.
+frBuckets :: Lens' FacetResult [FacetBucket]
+frBuckets
+  = lens _frBuckets (\ s a -> s{_frBuckets = a}) .
+      _Default
+      . _Coerce
+
+-- | Object type for which facet results are returned. Can be empty.
+frObjectType :: Lens' FacetResult (Maybe Text)
+frObjectType
+  = lens _frObjectType (\ s a -> s{_frObjectType = a})
+
+-- | Name of the operator chosen for faceting. \'see
+-- cloudsearch.SchemaPropertyOptions
+frOperatorName :: Lens' FacetResult (Maybe Text)
+frOperatorName
+  = lens _frOperatorName
+      (\ s a -> s{_frOperatorName = a})
+
+instance FromJSON FacetResult where
+        parseJSON
+          = withObject "FacetResult"
+              (\ o ->
+                 FacetResult' <$>
+                   (o .:? "sourceName") <*> (o .:? "buckets" .!= mempty)
+                     <*> (o .:? "objectType")
+                     <*> (o .:? "operatorName"))
+
+instance ToJSON FacetResult where
+        toJSON FacetResult'{..}
+          = object
+              (catMaybes
+                 [("sourceName" .=) <$> _frSourceName,
+                  ("buckets" .=) <$> _frBuckets,
+                  ("objectType" .=) <$> _frObjectType,
+                  ("operatorName" .=) <$> _frOperatorName])
+
+-- | Drive mime-type search restricts (e.g. \"type:pdf\").
+--
+-- /See:/ 'driveMimeTypeRestrict' smart constructor.
+newtype DriveMimeTypeRestrict = DriveMimeTypeRestrict'
+    { _dmtrType :: Maybe DriveMimeTypeRestrictType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveMimeTypeRestrict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmtrType'
+driveMimeTypeRestrict
+    :: DriveMimeTypeRestrict
+driveMimeTypeRestrict =
+    DriveMimeTypeRestrict'
+    { _dmtrType = Nothing
+    }
+
+dmtrType :: Lens' DriveMimeTypeRestrict (Maybe DriveMimeTypeRestrictType)
+dmtrType = lens _dmtrType (\ s a -> s{_dmtrType = a})
+
+instance FromJSON DriveMimeTypeRestrict where
+        parseJSON
+          = withObject "DriveMimeTypeRestrict"
+              (\ o -> DriveMimeTypeRestrict' <$> (o .:? "type"))
+
+instance ToJSON DriveMimeTypeRestrict where
+        toJSON DriveMimeTypeRestrict'{..}
+          = object (catMaybes [("type" .=) <$> _dmtrType])
+
+-- | A structured data object consisting of named properties.
+--
+-- /See:/ 'structuredDataObject' smart constructor.
+newtype StructuredDataObject = StructuredDataObject'
+    { _sdoProperties :: Maybe [NamedProperty]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StructuredDataObject' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdoProperties'
+structuredDataObject
+    :: StructuredDataObject
+structuredDataObject =
+    StructuredDataObject'
+    { _sdoProperties = Nothing
+    }
+
+-- | The properties for the object. The maximum number of elements is 1000.
+sdoProperties :: Lens' StructuredDataObject [NamedProperty]
+sdoProperties
+  = lens _sdoProperties
+      (\ s a -> s{_sdoProperties = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON StructuredDataObject where
+        parseJSON
+          = withObject "StructuredDataObject"
+              (\ o ->
+                 StructuredDataObject' <$>
+                   (o .:? "properties" .!= mempty))
+
+instance ToJSON StructuredDataObject where
+        toJSON StructuredDataObject'{..}
+          = object
+              (catMaybes [("properties" .=) <$> _sdoProperties])
+
+-- | Media resource.
+--
+-- /See:/ 'media' smart constructor.
+newtype Media = Media'
+    { _mResourceName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Media' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mResourceName'
+media
+    :: Media
+media =
+    Media'
+    { _mResourceName = Nothing
+    }
+
+-- | Name of the media resource.
+mResourceName :: Lens' Media (Maybe Text)
+mResourceName
+  = lens _mResourceName
+      (\ s a -> s{_mResourceName = a})
+
+instance FromJSON Media where
+        parseJSON
+          = withObject "Media"
+              (\ o -> Media' <$> (o .:? "resourceName"))
+
+instance ToJSON Media where
+        toJSON Media'{..}
+          = object
+              (catMaybes [("resourceName" .=) <$> _mResourceName])
+
+-- | Available structured data fields for the item.
+--
+-- /See:/ 'itemStructuredData' smart constructor.
+data ItemStructuredData = ItemStructuredData'
+    { _isdHash   :: !(Maybe Text)
+    , _isdObject :: !(Maybe StructuredDataObject)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ItemStructuredData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isdHash'
+--
+-- * 'isdObject'
+itemStructuredData
+    :: ItemStructuredData
+itemStructuredData =
+    ItemStructuredData'
+    { _isdHash = Nothing
+    , _isdObject = Nothing
+    }
+
+-- | Hashing value provided by the API caller. This can be used with the
+-- items.push method to calculate modified state. The maximum length is
+-- 2048 characters.
+isdHash :: Lens' ItemStructuredData (Maybe Text)
+isdHash = lens _isdHash (\ s a -> s{_isdHash = a})
+
+-- | The structured data object that should conform to a registered object
+-- definition in the schema for the data source.
+isdObject :: Lens' ItemStructuredData (Maybe StructuredDataObject)
+isdObject
+  = lens _isdObject (\ s a -> s{_isdObject = a})
+
+instance FromJSON ItemStructuredData where
+        parseJSON
+          = withObject "ItemStructuredData"
+              (\ o ->
+                 ItemStructuredData' <$>
+                   (o .:? "hash") <*> (o .:? "object"))
+
+instance ToJSON ItemStructuredData where
+        toJSON ItemStructuredData'{..}
+          = object
+              (catMaybes
+                 [("hash" .=) <$> _isdHash,
+                  ("object" .=) <$> _isdObject])
+
+-- | Drive follow-up search restricts (e.g. \"followup:suggestions\").
+--
+-- /See:/ 'driveFollowUpRestrict' smart constructor.
+newtype DriveFollowUpRestrict = DriveFollowUpRestrict'
+    { _dfurType :: Maybe DriveFollowUpRestrictType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveFollowUpRestrict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfurType'
+driveFollowUpRestrict
+    :: DriveFollowUpRestrict
+driveFollowUpRestrict =
+    DriveFollowUpRestrict'
+    { _dfurType = Nothing
+    }
+
+dfurType :: Lens' DriveFollowUpRestrict (Maybe DriveFollowUpRestrictType)
+dfurType = lens _dfurType (\ s a -> s{_dfurType = a})
+
+instance FromJSON DriveFollowUpRestrict where
+        parseJSON
+          = withObject "DriveFollowUpRestrict"
+              (\ o -> DriveFollowUpRestrict' <$> (o .:? "type"))
+
+instance ToJSON DriveFollowUpRestrict where
+        toJSON DriveFollowUpRestrict'{..}
+          = object (catMaybes [("type" .=) <$> _dfurType])
+
+-- | List of date values.
+--
+-- /See:/ 'dateValues' smart constructor.
+newtype DateValues = DateValues'
+    { _dValues :: Maybe [Date]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DateValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dValues'
+dateValues
+    :: DateValues
+dateValues =
+    DateValues'
+    { _dValues = Nothing
+    }
+
+-- | The maximum number of elements is 100.
+dValues :: Lens' DateValues [Date]
+dValues
+  = lens _dValues (\ s a -> s{_dValues = a}) . _Default
+      . _Coerce
+
+instance FromJSON DateValues where
+        parseJSON
+          = withObject "DateValues"
+              (\ o -> DateValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON DateValues where
+        toJSON DateValues'{..}
+          = object (catMaybes [("values" .=) <$> _dValues])
+
+-- | A typed name-value pair for structured data. The type of the value
+-- should be the same as the registered type for the \`name\` property in
+-- the object definition of \`objectType\`.
+--
+-- /See:/ 'namedProperty' smart constructor.
+data NamedProperty = NamedProperty'
+    { _npDoubleValues    :: !(Maybe DoubleValues)
+    , _npTextValues      :: !(Maybe TextValues)
+    , _npDateValues      :: !(Maybe DateValues)
+    , _npName            :: !(Maybe Text)
+    , _npBooleanValue    :: !(Maybe Bool)
+    , _npObjectValues    :: !(Maybe ObjectValues)
+    , _npHTMLValues      :: !(Maybe HTMLValues)
+    , _npEnumValues      :: !(Maybe EnumValues)
+    , _npTimestampValues :: !(Maybe TimestampValues)
+    , _npIntegerValues   :: !(Maybe IntegerValues)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NamedProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'npDoubleValues'
+--
+-- * 'npTextValues'
+--
+-- * 'npDateValues'
+--
+-- * 'npName'
+--
+-- * 'npBooleanValue'
+--
+-- * 'npObjectValues'
+--
+-- * 'npHTMLValues'
+--
+-- * 'npEnumValues'
+--
+-- * 'npTimestampValues'
+--
+-- * 'npIntegerValues'
+namedProperty
+    :: NamedProperty
+namedProperty =
+    NamedProperty'
+    { _npDoubleValues = Nothing
+    , _npTextValues = Nothing
+    , _npDateValues = Nothing
+    , _npName = Nothing
+    , _npBooleanValue = Nothing
+    , _npObjectValues = Nothing
+    , _npHTMLValues = Nothing
+    , _npEnumValues = Nothing
+    , _npTimestampValues = Nothing
+    , _npIntegerValues = Nothing
+    }
+
+npDoubleValues :: Lens' NamedProperty (Maybe DoubleValues)
+npDoubleValues
+  = lens _npDoubleValues
+      (\ s a -> s{_npDoubleValues = a})
+
+npTextValues :: Lens' NamedProperty (Maybe TextValues)
+npTextValues
+  = lens _npTextValues (\ s a -> s{_npTextValues = a})
+
+npDateValues :: Lens' NamedProperty (Maybe DateValues)
+npDateValues
+  = lens _npDateValues (\ s a -> s{_npDateValues = a})
+
+-- | The name of the property. This name should correspond to the name of the
+-- property that was registered for object definition in the schema. The
+-- maximum allowable length for this property is 256 characters.
+npName :: Lens' NamedProperty (Maybe Text)
+npName = lens _npName (\ s a -> s{_npName = a})
+
+npBooleanValue :: Lens' NamedProperty (Maybe Bool)
+npBooleanValue
+  = lens _npBooleanValue
+      (\ s a -> s{_npBooleanValue = a})
+
+npObjectValues :: Lens' NamedProperty (Maybe ObjectValues)
+npObjectValues
+  = lens _npObjectValues
+      (\ s a -> s{_npObjectValues = a})
+
+npHTMLValues :: Lens' NamedProperty (Maybe HTMLValues)
+npHTMLValues
+  = lens _npHTMLValues (\ s a -> s{_npHTMLValues = a})
+
+npEnumValues :: Lens' NamedProperty (Maybe EnumValues)
+npEnumValues
+  = lens _npEnumValues (\ s a -> s{_npEnumValues = a})
+
+npTimestampValues :: Lens' NamedProperty (Maybe TimestampValues)
+npTimestampValues
+  = lens _npTimestampValues
+      (\ s a -> s{_npTimestampValues = a})
+
+npIntegerValues :: Lens' NamedProperty (Maybe IntegerValues)
+npIntegerValues
+  = lens _npIntegerValues
+      (\ s a -> s{_npIntegerValues = a})
+
+instance FromJSON NamedProperty where
+        parseJSON
+          = withObject "NamedProperty"
+              (\ o ->
+                 NamedProperty' <$>
+                   (o .:? "doubleValues") <*> (o .:? "textValues") <*>
+                     (o .:? "dateValues")
+                     <*> (o .:? "name")
+                     <*> (o .:? "booleanValue")
+                     <*> (o .:? "objectValues")
+                     <*> (o .:? "htmlValues")
+                     <*> (o .:? "enumValues")
+                     <*> (o .:? "timestampValues")
+                     <*> (o .:? "integerValues"))
+
+instance ToJSON NamedProperty where
+        toJSON NamedProperty'{..}
+          = object
+              (catMaybes
+                 [("doubleValues" .=) <$> _npDoubleValues,
+                  ("textValues" .=) <$> _npTextValues,
+                  ("dateValues" .=) <$> _npDateValues,
+                  ("name" .=) <$> _npName,
+                  ("booleanValue" .=) <$> _npBooleanValue,
+                  ("objectValues" .=) <$> _npObjectValues,
+                  ("htmlValues" .=) <$> _npHTMLValues,
+                  ("enumValues" .=) <$> _npEnumValues,
+                  ("timestampValues" .=) <$> _npTimestampValues,
+                  ("integerValues" .=) <$> _npIntegerValues])
+
+-- | Matched range of a snippet [start, end).
+--
+-- /See:/ 'matchRange' smart constructor.
+data MatchRange = MatchRange'
+    { _mrStart :: !(Maybe (Textual Int32))
+    , _mrEnd   :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MatchRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrStart'
+--
+-- * 'mrEnd'
+matchRange
+    :: MatchRange
+matchRange =
+    MatchRange'
+    { _mrStart = Nothing
+    , _mrEnd = Nothing
+    }
+
+-- | Starting position of the match in the snippet.
+mrStart :: Lens' MatchRange (Maybe Int32)
+mrStart
+  = lens _mrStart (\ s a -> s{_mrStart = a}) .
+      mapping _Coerce
+
+-- | End of the match in the snippet.
+mrEnd :: Lens' MatchRange (Maybe Int32)
+mrEnd
+  = lens _mrEnd (\ s a -> s{_mrEnd = a}) .
+      mapping _Coerce
+
+instance FromJSON MatchRange where
+        parseJSON
+          = withObject "MatchRange"
+              (\ o ->
+                 MatchRange' <$> (o .:? "start") <*> (o .:? "end"))
+
+instance ToJSON MatchRange where
+        toJSON MatchRange'{..}
+          = object
+              (catMaybes
+                 [("start" .=) <$> _mrStart, ("end" .=) <$> _mrEnd])
+
+-- | Debugging information about the response.
+--
+-- /See:/ 'responseDebugInfo' smart constructor.
+newtype ResponseDebugInfo = ResponseDebugInfo'
+    { _rFormattedDebugInfo :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResponseDebugInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rFormattedDebugInfo'
+responseDebugInfo
+    :: ResponseDebugInfo
+responseDebugInfo =
+    ResponseDebugInfo'
+    { _rFormattedDebugInfo = Nothing
+    }
+
+-- | General debug info formatted for display.
+rFormattedDebugInfo :: Lens' ResponseDebugInfo (Maybe Text)
+rFormattedDebugInfo
+  = lens _rFormattedDebugInfo
+      (\ s a -> s{_rFormattedDebugInfo = a})
+
+instance FromJSON ResponseDebugInfo where
+        parseJSON
+          = withObject "ResponseDebugInfo"
+              (\ o ->
+                 ResponseDebugInfo' <$> (o .:? "formattedDebugInfo"))
+
+instance ToJSON ResponseDebugInfo where
+        toJSON ResponseDebugInfo'{..}
+          = object
+              (catMaybes
+                 [("formattedDebugInfo" .=) <$> _rFormattedDebugInfo])
+
+--
+-- /See:/ 'listDataSourceResponse' smart constructor.
+data ListDataSourceResponse = ListDataSourceResponse'
+    { _ldsrNextPageToken :: !(Maybe Text)
+    , _ldsrSources       :: !(Maybe [DataSource])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListDataSourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldsrNextPageToken'
+--
+-- * 'ldsrSources'
+listDataSourceResponse
+    :: ListDataSourceResponse
+listDataSourceResponse =
+    ListDataSourceResponse'
+    { _ldsrNextPageToken = Nothing
+    , _ldsrSources = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+ldsrNextPageToken :: Lens' ListDataSourceResponse (Maybe Text)
+ldsrNextPageToken
+  = lens _ldsrNextPageToken
+      (\ s a -> s{_ldsrNextPageToken = a})
+
+ldsrSources :: Lens' ListDataSourceResponse [DataSource]
+ldsrSources
+  = lens _ldsrSources (\ s a -> s{_ldsrSources = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListDataSourceResponse where
+        parseJSON
+          = withObject "ListDataSourceResponse"
+              (\ o ->
+                 ListDataSourceResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "sources" .!= mempty))
+
+instance ToJSON ListDataSourceResponse where
+        toJSON ListDataSourceResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ldsrNextPageToken,
+                  ("sources" .=) <$> _ldsrSources])
+
+-- | The search API request.
+--
+-- /See:/ 'searchRequest' smart constructor.
+data SearchRequest = SearchRequest'
+    { _srSortOptions                :: !(Maybe SortOptions)
+    , _srDataSourceRestrictions     :: !(Maybe [DataSourceRestriction])
+    , _srQueryInterpretationOptions :: !(Maybe QueryInterpretationOptions)
+    , _srStart                      :: !(Maybe (Textual Int32))
+    , _srQuery                      :: !(Maybe Text)
+    , _srFacetOptions               :: !(Maybe [FacetOptions])
+    , _srPageSize                   :: !(Maybe (Textual Int32))
+    , _srRequestOptions             :: !(Maybe RequestOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srSortOptions'
+--
+-- * 'srDataSourceRestrictions'
+--
+-- * 'srQueryInterpretationOptions'
+--
+-- * 'srStart'
+--
+-- * 'srQuery'
+--
+-- * 'srFacetOptions'
+--
+-- * 'srPageSize'
+--
+-- * 'srRequestOptions'
+searchRequest
+    :: SearchRequest
+searchRequest =
+    SearchRequest'
+    { _srSortOptions = Nothing
+    , _srDataSourceRestrictions = Nothing
+    , _srQueryInterpretationOptions = Nothing
+    , _srStart = Nothing
+    , _srQuery = Nothing
+    , _srFacetOptions = Nothing
+    , _srPageSize = Nothing
+    , _srRequestOptions = Nothing
+    }
+
+-- | The options for sorting the search results
+srSortOptions :: Lens' SearchRequest (Maybe SortOptions)
+srSortOptions
+  = lens _srSortOptions
+      (\ s a -> s{_srSortOptions = a})
+
+-- | The sources to use for querying. If not specified, all data sources from
+-- the current search application are used.
+srDataSourceRestrictions :: Lens' SearchRequest [DataSourceRestriction]
+srDataSourceRestrictions
+  = lens _srDataSourceRestrictions
+      (\ s a -> s{_srDataSourceRestrictions = a})
+      . _Default
+      . _Coerce
+
+-- | Options to interpret the user query.
+srQueryInterpretationOptions :: Lens' SearchRequest (Maybe QueryInterpretationOptions)
+srQueryInterpretationOptions
+  = lens _srQueryInterpretationOptions
+      (\ s a -> s{_srQueryInterpretationOptions = a})
+
+-- | Starting index of the results.
+srStart :: Lens' SearchRequest (Maybe Int32)
+srStart
+  = lens _srStart (\ s a -> s{_srStart = a}) .
+      mapping _Coerce
+
+-- | The raw query string. See supported search operators in the [Cloud
+-- search Cheat
+-- Sheet](https:\/\/gsuite.google.com\/learning-center\/products\/cloudsearch\/cheat-sheet\/)
+srQuery :: Lens' SearchRequest (Maybe Text)
+srQuery = lens _srQuery (\ s a -> s{_srQuery = a})
+
+srFacetOptions :: Lens' SearchRequest [FacetOptions]
+srFacetOptions
+  = lens _srFacetOptions
+      (\ s a -> s{_srFacetOptions = a})
+      . _Default
+      . _Coerce
+
+-- | Maximum number of search results to return in one page. Valid values are
+-- between 1 and 100, inclusive. Default value is 10.
+srPageSize :: Lens' SearchRequest (Maybe Int32)
+srPageSize
+  = lens _srPageSize (\ s a -> s{_srPageSize = a}) .
+      mapping _Coerce
+
+-- | Request options, such as the search application and user timezone.
+srRequestOptions :: Lens' SearchRequest (Maybe RequestOptions)
+srRequestOptions
+  = lens _srRequestOptions
+      (\ s a -> s{_srRequestOptions = a})
+
+instance FromJSON SearchRequest where
+        parseJSON
+          = withObject "SearchRequest"
+              (\ o ->
+                 SearchRequest' <$>
+                   (o .:? "sortOptions") <*>
+                     (o .:? "dataSourceRestrictions" .!= mempty)
+                     <*> (o .:? "queryInterpretationOptions")
+                     <*> (o .:? "start")
+                     <*> (o .:? "query")
+                     <*> (o .:? "facetOptions" .!= mempty)
+                     <*> (o .:? "pageSize")
+                     <*> (o .:? "requestOptions"))
+
+instance ToJSON SearchRequest where
+        toJSON SearchRequest'{..}
+          = object
+              (catMaybes
+                 [("sortOptions" .=) <$> _srSortOptions,
+                  ("dataSourceRestrictions" .=) <$>
+                    _srDataSourceRestrictions,
+                  ("queryInterpretationOptions" .=) <$>
+                    _srQueryInterpretationOptions,
+                  ("start" .=) <$> _srStart, ("query" .=) <$> _srQuery,
+                  ("facetOptions" .=) <$> _srFacetOptions,
+                  ("pageSize" .=) <$> _srPageSize,
+                  ("requestOptions" .=) <$> _srRequestOptions])
+
+-- | A person\'s name.
+--
+-- /See:/ 'name' smart constructor.
+newtype Name = Name'
+    { _nDisplayName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Name' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nDisplayName'
+name
+    :: Name
+name =
+    Name'
+    { _nDisplayName = Nothing
+    }
+
+-- | The read-only display name formatted according to the locale specified
+-- by the viewer\'s account or the 'Accept-Language' HTTP header.
+nDisplayName :: Lens' Name (Maybe Text)
+nDisplayName
+  = lens _nDisplayName (\ s a -> s{_nDisplayName = a})
+
+instance FromJSON Name where
+        parseJSON
+          = withObject "Name"
+              (\ o -> Name' <$> (o .:? "displayName"))
+
+instance ToJSON Name where
+        toJSON Name'{..}
+          = object
+              (catMaybes [("displayName" .=) <$> _nDisplayName])
+
+-- | Per source result count information.
+--
+-- /See:/ 'sourceResultCount' smart constructor.
+data SourceResultCount = SourceResultCount'
+    { _srcHasMoreResults      :: !(Maybe Bool)
+    , _srcResultCountExact    :: !(Maybe (Textual Int64))
+    , _srcResultCountEstimate :: !(Maybe (Textual Int64))
+    , _srcSource              :: !(Maybe Source)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceResultCount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srcHasMoreResults'
+--
+-- * 'srcResultCountExact'
+--
+-- * 'srcResultCountEstimate'
+--
+-- * 'srcSource'
+sourceResultCount
+    :: SourceResultCount
+sourceResultCount =
+    SourceResultCount'
+    { _srcHasMoreResults = Nothing
+    , _srcResultCountExact = Nothing
+    , _srcResultCountEstimate = Nothing
+    , _srcSource = Nothing
+    }
+
+-- | Whether there are more search results for this source.
+srcHasMoreResults :: Lens' SourceResultCount (Maybe Bool)
+srcHasMoreResults
+  = lens _srcHasMoreResults
+      (\ s a -> s{_srcHasMoreResults = a})
+
+-- | The exact result count for this source.
+srcResultCountExact :: Lens' SourceResultCount (Maybe Int64)
+srcResultCountExact
+  = lens _srcResultCountExact
+      (\ s a -> s{_srcResultCountExact = a})
+      . mapping _Coerce
+
+-- | The estimated result count for this source.
+srcResultCountEstimate :: Lens' SourceResultCount (Maybe Int64)
+srcResultCountEstimate
+  = lens _srcResultCountEstimate
+      (\ s a -> s{_srcResultCountEstimate = a})
+      . mapping _Coerce
+
+-- | The source the result count information is associated with.
+srcSource :: Lens' SourceResultCount (Maybe Source)
+srcSource
+  = lens _srcSource (\ s a -> s{_srcSource = a})
+
+instance FromJSON SourceResultCount where
+        parseJSON
+          = withObject "SourceResultCount"
+              (\ o ->
+                 SourceResultCount' <$>
+                   (o .:? "hasMoreResults") <*>
+                     (o .:? "resultCountExact")
+                     <*> (o .:? "resultCountEstimate")
+                     <*> (o .:? "source"))
+
+instance ToJSON SourceResultCount where
+        toJSON SourceResultCount'{..}
+          = object
+              (catMaybes
+                 [("hasMoreResults" .=) <$> _srcHasMoreResults,
+                  ("resultCountExact" .=) <$> _srcResultCountExact,
+                  ("resultCountEstimate" .=) <$>
+                    _srcResultCountEstimate,
+                  ("source" .=) <$> _srcSource])
+
+-- | Configurations for a source while processing a Search or Suggest
+-- request.
+--
+-- /See:/ 'sourceConfig' smart constructor.
+data SourceConfig = SourceConfig'
+    { _scCrowdingConfig :: !(Maybe SourceCrowdingConfig)
+    , _scScoringConfig  :: !(Maybe SourceScoringConfig)
+    , _scSource         :: !(Maybe Source)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scCrowdingConfig'
+--
+-- * 'scScoringConfig'
+--
+-- * 'scSource'
+sourceConfig
+    :: SourceConfig
+sourceConfig =
+    SourceConfig'
+    { _scCrowdingConfig = Nothing
+    , _scScoringConfig = Nothing
+    , _scSource = Nothing
+    }
+
+-- | The crowding configuration for the source.
+scCrowdingConfig :: Lens' SourceConfig (Maybe SourceCrowdingConfig)
+scCrowdingConfig
+  = lens _scCrowdingConfig
+      (\ s a -> s{_scCrowdingConfig = a})
+
+-- | The scoring configuration for the source.
+scScoringConfig :: Lens' SourceConfig (Maybe SourceScoringConfig)
+scScoringConfig
+  = lens _scScoringConfig
+      (\ s a -> s{_scScoringConfig = a})
+
+-- | The source for which this configuration is to be used.
+scSource :: Lens' SourceConfig (Maybe Source)
+scSource = lens _scSource (\ s a -> s{_scSource = a})
+
+instance FromJSON SourceConfig where
+        parseJSON
+          = withObject "SourceConfig"
+              (\ o ->
+                 SourceConfig' <$>
+                   (o .:? "crowdingConfig") <*> (o .:? "scoringConfig")
+                     <*> (o .:? "source"))
+
+instance ToJSON SourceConfig where
+        toJSON SourceConfig'{..}
+          = object
+              (catMaybes
+                 [("crowdingConfig" .=) <$> _scCrowdingConfig,
+                  ("scoringConfig" .=) <$> _scScoringConfig,
+                  ("source" .=) <$> _scSource])
+
+--
+-- /See:/ 'listItemsResponse' smart constructor.
+data ListItemsResponse = ListItemsResponse'
+    { _lirNextPageToken :: !(Maybe Text)
+    , _lirItems         :: !(Maybe [Item])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListItemsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lirNextPageToken'
+--
+-- * 'lirItems'
+listItemsResponse
+    :: ListItemsResponse
+listItemsResponse =
+    ListItemsResponse'
+    { _lirNextPageToken = Nothing
+    , _lirItems = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+lirNextPageToken :: Lens' ListItemsResponse (Maybe Text)
+lirNextPageToken
+  = lens _lirNextPageToken
+      (\ s a -> s{_lirNextPageToken = a})
+
+lirItems :: Lens' ListItemsResponse [Item]
+lirItems
+  = lens _lirItems (\ s a -> s{_lirItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListItemsResponse where
+        parseJSON
+          = withObject "ListItemsResponse"
+              (\ o ->
+                 ListItemsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON ListItemsResponse where
+        toJSON ListItemsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lirNextPageToken,
+                  ("items" .=) <$> _lirItems])
+
+-- | Scoring configurations for a source while processing a Search or Suggest
+-- request.
+--
+-- /See:/ 'scoringConfig' smart constructor.
+data ScoringConfig = ScoringConfig'
+    { _scDisablePersonalization :: !(Maybe Bool)
+    , _scDisableFreshness       :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScoringConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scDisablePersonalization'
+--
+-- * 'scDisableFreshness'
+scoringConfig
+    :: ScoringConfig
+scoringConfig =
+    ScoringConfig'
+    { _scDisablePersonalization = Nothing
+    , _scDisableFreshness = Nothing
+    }
+
+-- | Whether to personalize the results. By default, personal signals will be
+-- used to boost results.
+scDisablePersonalization :: Lens' ScoringConfig (Maybe Bool)
+scDisablePersonalization
+  = lens _scDisablePersonalization
+      (\ s a -> s{_scDisablePersonalization = a})
+
+-- | Whether to use freshness as a ranking signal. By default, freshness is
+-- used as a ranking signal.
+scDisableFreshness :: Lens' ScoringConfig (Maybe Bool)
+scDisableFreshness
+  = lens _scDisableFreshness
+      (\ s a -> s{_scDisableFreshness = a})
+
+instance FromJSON ScoringConfig where
+        parseJSON
+          = withObject "ScoringConfig"
+              (\ o ->
+                 ScoringConfig' <$>
+                   (o .:? "disablePersonalization") <*>
+                     (o .:? "disableFreshness"))
+
+instance ToJSON ScoringConfig where
+        toJSON ScoringConfig'{..}
+          = object
+              (catMaybes
+                 [("disablePersonalization" .=) <$>
+                    _scDisablePersonalization,
+                  ("disableFreshness" .=) <$> _scDisableFreshness])
+
+-- | Start upload file request.
+--
+-- /See:/ 'startUploadItemRequest' smart constructor.
+data StartUploadItemRequest = StartUploadItemRequest'
+    { _suirDebugOptions  :: !(Maybe DebugOptions)
+    , _suirConnectorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartUploadItemRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'suirDebugOptions'
+--
+-- * 'suirConnectorName'
+startUploadItemRequest
+    :: StartUploadItemRequest
+startUploadItemRequest =
+    StartUploadItemRequest'
+    { _suirDebugOptions = Nothing
+    , _suirConnectorName = Nothing
+    }
+
+-- | Common debug options.
+suirDebugOptions :: Lens' StartUploadItemRequest (Maybe DebugOptions)
+suirDebugOptions
+  = lens _suirDebugOptions
+      (\ s a -> s{_suirDebugOptions = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+suirConnectorName :: Lens' StartUploadItemRequest (Maybe Text)
+suirConnectorName
+  = lens _suirConnectorName
+      (\ s a -> s{_suirConnectorName = a})
+
+instance FromJSON StartUploadItemRequest where
+        parseJSON
+          = withObject "StartUploadItemRequest"
+              (\ o ->
+                 StartUploadItemRequest' <$>
+                   (o .:? "debugOptions") <*> (o .:? "connectorName"))
+
+instance ToJSON StartUploadItemRequest where
+        toJSON StartUploadItemRequest'{..}
+          = object
+              (catMaybes
+                 [("debugOptions" .=) <$> _suirDebugOptions,
+                  ("connectorName" .=) <$> _suirConnectorName])
+
+-- | Represents an upload session reference. This reference is created via
+-- upload method. Updating of item content may refer to this uploaded
+-- content via contentDataRef.
+--
+-- /See:/ 'uploadItemRef' smart constructor.
+newtype UploadItemRef = UploadItemRef'
+    { _uirName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UploadItemRef' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uirName'
+uploadItemRef
+    :: UploadItemRef
+uploadItemRef =
+    UploadItemRef'
+    { _uirName = Nothing
+    }
+
+-- | Name of the content reference. The maximum length is 2048 characters.
+uirName :: Lens' UploadItemRef (Maybe Text)
+uirName = lens _uirName (\ s a -> s{_uirName = a})
+
+instance FromJSON UploadItemRef where
+        parseJSON
+          = withObject "UploadItemRef"
+              (\ o -> UploadItemRef' <$> (o .:? "name"))
+
+instance ToJSON UploadItemRef where
+        toJSON UploadItemRef'{..}
+          = object (catMaybes [("name" .=) <$> _uirName])
+
+--
+-- /See:/ 'pushItemRequest' smart constructor.
+data PushItemRequest = PushItemRequest'
+    { _pirDebugOptions  :: !(Maybe DebugOptions)
+    , _pirConnectorName :: !(Maybe Text)
+    , _pirItem          :: !(Maybe PushItem)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PushItemRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pirDebugOptions'
+--
+-- * 'pirConnectorName'
+--
+-- * 'pirItem'
+pushItemRequest
+    :: PushItemRequest
+pushItemRequest =
+    PushItemRequest'
+    { _pirDebugOptions = Nothing
+    , _pirConnectorName = Nothing
+    , _pirItem = Nothing
+    }
+
+-- | Common debug options.
+pirDebugOptions :: Lens' PushItemRequest (Maybe DebugOptions)
+pirDebugOptions
+  = lens _pirDebugOptions
+      (\ s a -> s{_pirDebugOptions = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+pirConnectorName :: Lens' PushItemRequest (Maybe Text)
+pirConnectorName
+  = lens _pirConnectorName
+      (\ s a -> s{_pirConnectorName = a})
+
+-- | Item to push onto the queue.
+pirItem :: Lens' PushItemRequest (Maybe PushItem)
+pirItem = lens _pirItem (\ s a -> s{_pirItem = a})
+
+instance FromJSON PushItemRequest where
+        parseJSON
+          = withObject "PushItemRequest"
+              (\ o ->
+                 PushItemRequest' <$>
+                   (o .:? "debugOptions") <*> (o .:? "connectorName")
+                     <*> (o .:? "item"))
+
+instance ToJSON PushItemRequest where
+        toJSON PushItemRequest'{..}
+          = object
+              (catMaybes
+                 [("debugOptions" .=) <$> _pirDebugOptions,
+                  ("connectorName" .=) <$> _pirConnectorName,
+                  ("item" .=) <$> _pirItem])
+
+-- | Options for double properties.
+--
+-- /See:/ 'doublePropertyOptions' smart constructor.
+newtype DoublePropertyOptions = DoublePropertyOptions'
+    { _dpoOperatorOptions :: Maybe DoubleOperatorOptions
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DoublePropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpoOperatorOptions'
+doublePropertyOptions
+    :: DoublePropertyOptions
+doublePropertyOptions =
+    DoublePropertyOptions'
+    { _dpoOperatorOptions = Nothing
+    }
+
+-- | If set, describes how the double should be used as a search operator.
+dpoOperatorOptions :: Lens' DoublePropertyOptions (Maybe DoubleOperatorOptions)
+dpoOperatorOptions
+  = lens _dpoOperatorOptions
+      (\ s a -> s{_dpoOperatorOptions = a})
+
+instance FromJSON DoublePropertyOptions where
+        parseJSON
+          = withObject "DoublePropertyOptions"
+              (\ o ->
+                 DoublePropertyOptions' <$> (o .:? "operatorOptions"))
+
+instance ToJSON DoublePropertyOptions where
+        toJSON DoublePropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorOptions" .=) <$> _dpoOperatorOptions])
+
+-- | The definition of a operator that can be used in a Search\/Suggest
+-- request.
+--
+-- /See:/ 'queryOperator' smart constructor.
+data QueryOperator = QueryOperator'
+    { _qoIsSuggestable           :: !(Maybe Bool)
+    , _qoIsReturnable            :: !(Maybe Bool)
+    , _qoIsRepeatable            :: !(Maybe Bool)
+    , _qoOperatorName            :: !(Maybe Text)
+    , _qoIsSortable              :: !(Maybe Bool)
+    , _qoIsFacetable             :: !(Maybe Bool)
+    , _qoDisplayName             :: !(Maybe Text)
+    , _qoLessThanOperatorName    :: !(Maybe Text)
+    , _qoType                    :: !(Maybe QueryOperatorType)
+    , _qoEnumValues              :: !(Maybe [Text])
+    , _qoGreaterThanOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qoIsSuggestable'
+--
+-- * 'qoIsReturnable'
+--
+-- * 'qoIsRepeatable'
+--
+-- * 'qoOperatorName'
+--
+-- * 'qoIsSortable'
+--
+-- * 'qoIsFacetable'
+--
+-- * 'qoDisplayName'
+--
+-- * 'qoLessThanOperatorName'
+--
+-- * 'qoType'
+--
+-- * 'qoEnumValues'
+--
+-- * 'qoGreaterThanOperatorName'
+queryOperator
+    :: QueryOperator
+queryOperator =
+    QueryOperator'
+    { _qoIsSuggestable = Nothing
+    , _qoIsReturnable = Nothing
+    , _qoIsRepeatable = Nothing
+    , _qoOperatorName = Nothing
+    , _qoIsSortable = Nothing
+    , _qoIsFacetable = Nothing
+    , _qoDisplayName = Nothing
+    , _qoLessThanOperatorName = Nothing
+    , _qoType = Nothing
+    , _qoEnumValues = Nothing
+    , _qoGreaterThanOperatorName = Nothing
+    }
+
+-- | Can get suggestions for this field.
+qoIsSuggestable :: Lens' QueryOperator (Maybe Bool)
+qoIsSuggestable
+  = lens _qoIsSuggestable
+      (\ s a -> s{_qoIsSuggestable = a})
+
+-- | Will the property associated with this facet be returned as part of
+-- search results.
+qoIsReturnable :: Lens' QueryOperator (Maybe Bool)
+qoIsReturnable
+  = lens _qoIsReturnable
+      (\ s a -> s{_qoIsReturnable = a})
+
+-- | Indicates if multiple values can be set for this property.
+qoIsRepeatable :: Lens' QueryOperator (Maybe Bool)
+qoIsRepeatable
+  = lens _qoIsRepeatable
+      (\ s a -> s{_qoIsRepeatable = a})
+
+-- | The name of the operator.
+qoOperatorName :: Lens' QueryOperator (Maybe Text)
+qoOperatorName
+  = lens _qoOperatorName
+      (\ s a -> s{_qoOperatorName = a})
+
+-- | Can this operator be used to sort results.
+qoIsSortable :: Lens' QueryOperator (Maybe Bool)
+qoIsSortable
+  = lens _qoIsSortable (\ s a -> s{_qoIsSortable = a})
+
+-- | Can this operator be used to get facets.
+qoIsFacetable :: Lens' QueryOperator (Maybe Bool)
+qoIsFacetable
+  = lens _qoIsFacetable
+      (\ s a -> s{_qoIsFacetable = a})
+
+-- | Display name of the operator
+qoDisplayName :: Lens' QueryOperator (Maybe Text)
+qoDisplayName
+  = lens _qoDisplayName
+      (\ s a -> s{_qoDisplayName = a})
+
+-- | Indicates the operator name that can be used to isolate the property
+-- using the less-than operator.
+qoLessThanOperatorName :: Lens' QueryOperator (Maybe Text)
+qoLessThanOperatorName
+  = lens _qoLessThanOperatorName
+      (\ s a -> s{_qoLessThanOperatorName = a})
+
+-- | Type of the operator.
+qoType :: Lens' QueryOperator (Maybe QueryOperatorType)
+qoType = lens _qoType (\ s a -> s{_qoType = a})
+
+-- | Potential list of values for the opeatror field. This field is only
+-- filled when we can safely enumerate all the possible values of this
+-- operator.
+qoEnumValues :: Lens' QueryOperator [Text]
+qoEnumValues
+  = lens _qoEnumValues (\ s a -> s{_qoEnumValues = a})
+      . _Default
+      . _Coerce
+
+-- | Indicates the operator name that can be used to isolate the property
+-- using the greater-than operator.
+qoGreaterThanOperatorName :: Lens' QueryOperator (Maybe Text)
+qoGreaterThanOperatorName
+  = lens _qoGreaterThanOperatorName
+      (\ s a -> s{_qoGreaterThanOperatorName = a})
+
+instance FromJSON QueryOperator where
+        parseJSON
+          = withObject "QueryOperator"
+              (\ o ->
+                 QueryOperator' <$>
+                   (o .:? "isSuggestable") <*> (o .:? "isReturnable")
+                     <*> (o .:? "isRepeatable")
+                     <*> (o .:? "operatorName")
+                     <*> (o .:? "isSortable")
+                     <*> (o .:? "isFacetable")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "lessThanOperatorName")
+                     <*> (o .:? "type")
+                     <*> (o .:? "enumValues" .!= mempty)
+                     <*> (o .:? "greaterThanOperatorName"))
+
+instance ToJSON QueryOperator where
+        toJSON QueryOperator'{..}
+          = object
+              (catMaybes
+                 [("isSuggestable" .=) <$> _qoIsSuggestable,
+                  ("isReturnable" .=) <$> _qoIsReturnable,
+                  ("isRepeatable" .=) <$> _qoIsRepeatable,
+                  ("operatorName" .=) <$> _qoOperatorName,
+                  ("isSortable" .=) <$> _qoIsSortable,
+                  ("isFacetable" .=) <$> _qoIsFacetable,
+                  ("displayName" .=) <$> _qoDisplayName,
+                  ("lessThanOperatorName" .=) <$>
+                    _qoLessThanOperatorName,
+                  ("type" .=) <$> _qoType,
+                  ("enumValues" .=) <$> _qoEnumValues,
+                  ("greaterThanOperatorName" .=) <$>
+                    _qoGreaterThanOperatorName])
+
+--
+-- /See:/ 'pollItemsResponse' smart constructor.
+newtype PollItemsResponse = PollItemsResponse'
+    { _pirItems :: Maybe [Item]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PollItemsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pirItems'
+pollItemsResponse
+    :: PollItemsResponse
+pollItemsResponse =
+    PollItemsResponse'
+    { _pirItems = Nothing
+    }
+
+-- | Set of items from the queue available for connector to process.
+-- These items have the following subset of fields populated:
+-- version
+-- metadata.hash
+-- structured_data.hash
+-- content.hash
+-- payload
+-- status
+-- queue
+pirItems :: Lens' PollItemsResponse [Item]
+pirItems
+  = lens _pirItems (\ s a -> s{_pirItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON PollItemsResponse where
+        parseJSON
+          = withObject "PollItemsResponse"
+              (\ o ->
+                 PollItemsResponse' <$> (o .:? "items" .!= mempty))
+
+instance ToJSON PollItemsResponse where
+        toJSON PollItemsResponse'{..}
+          = object (catMaybes [("items" .=) <$> _pirItems])
+
+-- | Set the scoring configuration. This allows modifying the ranking of
+-- results for a source.
+--
+-- /See:/ 'sourceScoringConfig' smart constructor.
+newtype SourceScoringConfig = SourceScoringConfig'
+    { _sscSourceImportance :: Maybe SourceScoringConfigSourceImportance
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceScoringConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sscSourceImportance'
+sourceScoringConfig
+    :: SourceScoringConfig
+sourceScoringConfig =
+    SourceScoringConfig'
+    { _sscSourceImportance = Nothing
+    }
+
+-- | Importance of the source.
+sscSourceImportance :: Lens' SourceScoringConfig (Maybe SourceScoringConfigSourceImportance)
+sscSourceImportance
+  = lens _sscSourceImportance
+      (\ s a -> s{_sscSourceImportance = a})
+
+instance FromJSON SourceScoringConfig where
+        parseJSON
+          = withObject "SourceScoringConfig"
+              (\ o ->
+                 SourceScoringConfig' <$> (o .:? "sourceImportance"))
+
+instance ToJSON SourceScoringConfig where
+        toJSON SourceScoringConfig'{..}
+          = object
+              (catMaybes
+                 [("sourceImportance" .=) <$> _sscSourceImportance])
+
+-- | A person\'s email address.
+--
+-- /See:/ 'emailAddress' smart constructor.
+newtype EmailAddress = EmailAddress'
+    { _eaEmailAddress :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EmailAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eaEmailAddress'
+emailAddress
+    :: EmailAddress
+emailAddress =
+    EmailAddress'
+    { _eaEmailAddress = Nothing
+    }
+
+-- | The email address.
+eaEmailAddress :: Lens' EmailAddress (Maybe Text)
+eaEmailAddress
+  = lens _eaEmailAddress
+      (\ s a -> s{_eaEmailAddress = a})
+
+instance FromJSON EmailAddress where
+        parseJSON
+          = withObject "EmailAddress"
+              (\ o -> EmailAddress' <$> (o .:? "emailAddress"))
+
+instance ToJSON EmailAddress where
+        toJSON EmailAddress'{..}
+          = object
+              (catMaybes [("emailAddress" .=) <$> _eaEmailAddress])
+
+--
+-- /See:/ 'retrievalImportance' smart constructor.
+newtype RetrievalImportance = RetrievalImportance'
+    { _riImportance :: Maybe RetrievalImportanceImportance
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RetrievalImportance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riImportance'
+retrievalImportance
+    :: RetrievalImportance
+retrievalImportance =
+    RetrievalImportance'
+    { _riImportance = Nothing
+    }
+
+-- | Indicates the ranking importance given to property when it is matched
+-- during retrieval. Once set, the token importance of a property cannot be
+-- changed.
+riImportance :: Lens' RetrievalImportance (Maybe RetrievalImportanceImportance)
+riImportance
+  = lens _riImportance (\ s a -> s{_riImportance = a})
+
+instance FromJSON RetrievalImportance where
+        parseJSON
+          = withObject "RetrievalImportance"
+              (\ o ->
+                 RetrievalImportance' <$> (o .:? "importance"))
+
+instance ToJSON RetrievalImportance where
+        toJSON RetrievalImportance'{..}
+          = object
+              (catMaybes [("importance" .=) <$> _riImportance])
+
+-- | Aggregation of items by status code as of the specified date.
+--
+-- /See:/ 'dataSourceIndexStats' smart constructor.
+data DataSourceIndexStats = DataSourceIndexStats'
+    { _dsisItemCountByStatus :: !(Maybe [ItemCountByStatus])
+    , _dsisDate              :: !(Maybe Date)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSourceIndexStats' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsisItemCountByStatus'
+--
+-- * 'dsisDate'
+dataSourceIndexStats
+    :: DataSourceIndexStats
+dataSourceIndexStats =
+    DataSourceIndexStats'
+    { _dsisItemCountByStatus = Nothing
+    , _dsisDate = Nothing
+    }
+
+-- | Number of items aggregrated by status code.
+dsisItemCountByStatus :: Lens' DataSourceIndexStats [ItemCountByStatus]
+dsisItemCountByStatus
+  = lens _dsisItemCountByStatus
+      (\ s a -> s{_dsisItemCountByStatus = a})
+      . _Default
+      . _Coerce
+
+-- | Date for which index stats were calculated. If the date of request is
+-- not the current date then stats calculated on the next day are returned.
+-- Stats are calculated close to mid night in this case. If date of request
+-- is current date, then real time stats are returned.
+dsisDate :: Lens' DataSourceIndexStats (Maybe Date)
+dsisDate = lens _dsisDate (\ s a -> s{_dsisDate = a})
+
+instance FromJSON DataSourceIndexStats where
+        parseJSON
+          = withObject "DataSourceIndexStats"
+              (\ o ->
+                 DataSourceIndexStats' <$>
+                   (o .:? "itemCountByStatus" .!= mempty) <*>
+                     (o .:? "date"))
+
+instance ToJSON DataSourceIndexStats where
+        toJSON DataSourceIndexStats'{..}
+          = object
+              (catMaybes
+                 [("itemCountByStatus" .=) <$> _dsisItemCountByStatus,
+                  ("date" .=) <$> _dsisDate])
+
+-- | Set search results crowding limits. Crowding is a situation in which
+-- multiple results from the same source or host \"crowd out\" other
+-- results, diminishing the quality of search for users. To foster better
+-- search quality and source diversity in search results, you can set a
+-- condition to reduce repetitive results by source.
+--
+-- /See:/ 'sourceCrowdingConfig' smart constructor.
+data SourceCrowdingConfig = SourceCrowdingConfig'
+    { _sccField          :: !(Maybe Text)
+    , _sccNumSuggestions :: !(Maybe (Textual Int32))
+    , _sccNumResults     :: !(Maybe (Textual Int32))
+    , _sccSource         :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceCrowdingConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sccField'
+--
+-- * 'sccNumSuggestions'
+--
+-- * 'sccNumResults'
+--
+-- * 'sccSource'
+sourceCrowdingConfig
+    :: SourceCrowdingConfig
+sourceCrowdingConfig =
+    SourceCrowdingConfig'
+    { _sccField = Nothing
+    , _sccNumSuggestions = Nothing
+    , _sccNumResults = Nothing
+    , _sccSource = Nothing
+    }
+
+-- | Use a field to control results crowding. For example, if you want to
+-- control overly similar results from Gmail topics, use \`thread_id\`. For
+-- similar pages from Google Sites, you can use \`webspace_id\`. When
+-- matching query results contain the same field value in
+-- \`GenericMetadata\`, crowding limits are set on those records.
+sccField :: Lens' SourceCrowdingConfig (Maybe Text)
+sccField = lens _sccField (\ s a -> s{_sccField = a})
+
+-- | Maximum number of suggestions allowed from a source. No limits will be
+-- set on results if this value is less than or equal to 0.
+sccNumSuggestions :: Lens' SourceCrowdingConfig (Maybe Int32)
+sccNumSuggestions
+  = lens _sccNumSuggestions
+      (\ s a -> s{_sccNumSuggestions = a})
+      . mapping _Coerce
+
+-- | Maximum number of results allowed from a source. No limits will be set
+-- on results if this value is less than or equal to 0.
+sccNumResults :: Lens' SourceCrowdingConfig (Maybe Int32)
+sccNumResults
+  = lens _sccNumResults
+      (\ s a -> s{_sccNumResults = a})
+      . mapping _Coerce
+
+-- | Control results by content source. This option limits the total number
+-- of results from a given source and ignores field-based crowding control.
+sccSource :: Lens' SourceCrowdingConfig (Maybe Bool)
+sccSource
+  = lens _sccSource (\ s a -> s{_sccSource = a})
+
+instance FromJSON SourceCrowdingConfig where
+        parseJSON
+          = withObject "SourceCrowdingConfig"
+              (\ o ->
+                 SourceCrowdingConfig' <$>
+                   (o .:? "field") <*> (o .:? "numSuggestions") <*>
+                     (o .:? "numResults")
+                     <*> (o .:? "source"))
+
+instance ToJSON SourceCrowdingConfig where
+        toJSON SourceCrowdingConfig'{..}
+          = object
+              (catMaybes
+                 [("field" .=) <$> _sccField,
+                  ("numSuggestions" .=) <$> _sccNumSuggestions,
+                  ("numResults" .=) <$> _sccNumResults,
+                  ("source" .=) <$> _sccSource])
+
+-- | Represents an interaction between a user and an item.
+--
+-- /See:/ 'interaction' smart constructor.
+data Interaction = Interaction'
+    { _iInteractionTime :: !(Maybe DateTime')
+    , _iPrincipal       :: !(Maybe Principal)
+    , _iType            :: !(Maybe InteractionType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Interaction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iInteractionTime'
+--
+-- * 'iPrincipal'
+--
+-- * 'iType'
+interaction
+    :: Interaction
+interaction =
+    Interaction'
+    { _iInteractionTime = Nothing
+    , _iPrincipal = Nothing
+    , _iType = Nothing
+    }
+
+-- | The time when the user acted on the item. If multiple actions of the
+-- same type exist for a single user, only the most recent action is
+-- recorded.
+iInteractionTime :: Lens' Interaction (Maybe UTCTime)
+iInteractionTime
+  = lens _iInteractionTime
+      (\ s a -> s{_iInteractionTime = a})
+      . mapping _DateTime
+
+-- | The user that acted on the item.
+iPrincipal :: Lens' Interaction (Maybe Principal)
+iPrincipal
+  = lens _iPrincipal (\ s a -> s{_iPrincipal = a})
+
+iType :: Lens' Interaction (Maybe InteractionType)
+iType = lens _iType (\ s a -> s{_iType = a})
+
+instance FromJSON Interaction where
+        parseJSON
+          = withObject "Interaction"
+              (\ o ->
+                 Interaction' <$>
+                   (o .:? "interactionTime") <*> (o .:? "principal") <*>
+                     (o .:? "type"))
+
+instance ToJSON Interaction where
+        toJSON Interaction'{..}
+          = object
+              (catMaybes
+                 [("interactionTime" .=) <$> _iInteractionTime,
+                  ("principal" .=) <$> _iPrincipal,
+                  ("type" .=) <$> _iType])
+
+-- | Reference to a user, group, or domain.
+--
+-- /See:/ 'principal' smart constructor.
+data Principal = Principal'
+    { _pUserResourceName  :: !(Maybe Text)
+    , _pGroupResourceName :: !(Maybe Text)
+    , _pGsuitePrincipal   :: !(Maybe GSuitePrincipal)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Principal' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pUserResourceName'
+--
+-- * 'pGroupResourceName'
+--
+-- * 'pGsuitePrincipal'
+principal
+    :: Principal
+principal =
+    Principal'
+    { _pUserResourceName = Nothing
+    , _pGroupResourceName = Nothing
+    , _pGsuitePrincipal = Nothing
+    }
+
+-- | This principal is a user identified using an external identity. The name
+-- field must specify the user resource name with this format:
+-- identitysources\/{source_id}\/users\/{ID}
+pUserResourceName :: Lens' Principal (Maybe Text)
+pUserResourceName
+  = lens _pUserResourceName
+      (\ s a -> s{_pUserResourceName = a})
+
+-- | This principal is a group identified using an external identity. The
+-- name field must specify the group resource name with this format:
+-- identitysources\/{source_id}\/groups\/{ID}
+pGroupResourceName :: Lens' Principal (Maybe Text)
+pGroupResourceName
+  = lens _pGroupResourceName
+      (\ s a -> s{_pGroupResourceName = a})
+
+-- | This principal is a GSuite user, group or domain.
+pGsuitePrincipal :: Lens' Principal (Maybe GSuitePrincipal)
+pGsuitePrincipal
+  = lens _pGsuitePrincipal
+      (\ s a -> s{_pGsuitePrincipal = a})
+
+instance FromJSON Principal where
+        parseJSON
+          = withObject "Principal"
+              (\ o ->
+                 Principal' <$>
+                   (o .:? "userResourceName") <*>
+                     (o .:? "groupResourceName")
+                     <*> (o .:? "gsuitePrincipal"))
+
+instance ToJSON Principal where
+        toJSON Principal'{..}
+          = object
+              (catMaybes
+                 [("userResourceName" .=) <$> _pUserResourceName,
+                  ("groupResourceName" .=) <$> _pGroupResourceName,
+                  ("gsuitePrincipal" .=) <$> _pGsuitePrincipal])
+
+--
+-- /See:/ 'indexItemRequest' smart constructor.
+data IndexItemRequest = IndexItemRequest'
+    { _iirMode          :: !(Maybe IndexItemRequestMode)
+    , _iirDebugOptions  :: !(Maybe DebugOptions)
+    , _iirConnectorName :: !(Maybe Text)
+    , _iirItem          :: !(Maybe Item)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexItemRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iirMode'
+--
+-- * 'iirDebugOptions'
+--
+-- * 'iirConnectorName'
+--
+-- * 'iirItem'
+indexItemRequest
+    :: IndexItemRequest
+indexItemRequest =
+    IndexItemRequest'
+    { _iirMode = Nothing
+    , _iirDebugOptions = Nothing
+    , _iirConnectorName = Nothing
+    , _iirItem = Nothing
+    }
+
+-- | Required. The RequestMode for this request.
+iirMode :: Lens' IndexItemRequest (Maybe IndexItemRequestMode)
+iirMode = lens _iirMode (\ s a -> s{_iirMode = a})
+
+-- | Common debug options.
+iirDebugOptions :: Lens' IndexItemRequest (Maybe DebugOptions)
+iirDebugOptions
+  = lens _iirDebugOptions
+      (\ s a -> s{_iirDebugOptions = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+iirConnectorName :: Lens' IndexItemRequest (Maybe Text)
+iirConnectorName
+  = lens _iirConnectorName
+      (\ s a -> s{_iirConnectorName = a})
+
+-- | Name of the item. Format: datasources\/{source_id}\/items\/{item_id}
+iirItem :: Lens' IndexItemRequest (Maybe Item)
+iirItem = lens _iirItem (\ s a -> s{_iirItem = a})
+
+instance FromJSON IndexItemRequest where
+        parseJSON
+          = withObject "IndexItemRequest"
+              (\ o ->
+                 IndexItemRequest' <$>
+                   (o .:? "mode") <*> (o .:? "debugOptions") <*>
+                     (o .:? "connectorName")
+                     <*> (o .:? "item"))
+
+instance ToJSON IndexItemRequest where
+        toJSON IndexItemRequest'{..}
+          = object
+              (catMaybes
+                 [("mode" .=) <$> _iirMode,
+                  ("debugOptions" .=) <$> _iirDebugOptions,
+                  ("connectorName" .=) <$> _iirConnectorName,
+                  ("item" .=) <$> _iirItem])
+
+-- | Options for text properties.
+--
+-- /See:/ 'textPropertyOptions' smart constructor.
+data TextPropertyOptions = TextPropertyOptions'
+    { _tRetrievalImportance :: !(Maybe RetrievalImportance)
+    , _tOperatorOptions     :: !(Maybe TextOperatorOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TextPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tRetrievalImportance'
+--
+-- * 'tOperatorOptions'
+textPropertyOptions
+    :: TextPropertyOptions
+textPropertyOptions =
+    TextPropertyOptions'
+    { _tRetrievalImportance = Nothing
+    , _tOperatorOptions = Nothing
+    }
+
+-- | Indicates the search quality importance of the tokens within the field
+-- when used for retrieval.
+tRetrievalImportance :: Lens' TextPropertyOptions (Maybe RetrievalImportance)
+tRetrievalImportance
+  = lens _tRetrievalImportance
+      (\ s a -> s{_tRetrievalImportance = a})
+
+-- | If set, describes how the property should be used as a search operator.
+tOperatorOptions :: Lens' TextPropertyOptions (Maybe TextOperatorOptions)
+tOperatorOptions
+  = lens _tOperatorOptions
+      (\ s a -> s{_tOperatorOptions = a})
+
+instance FromJSON TextPropertyOptions where
+        parseJSON
+          = withObject "TextPropertyOptions"
+              (\ o ->
+                 TextPropertyOptions' <$>
+                   (o .:? "retrievalImportance") <*>
+                     (o .:? "operatorOptions"))
+
+instance ToJSON TextPropertyOptions where
+        toJSON TextPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("retrievalImportance" .=) <$>
+                    _tRetrievalImportance,
+                  ("operatorOptions" .=) <$> _tOperatorOptions])
+
+-- | The enumeration value pair defines two things: a required string value
+-- and an optional integer value. The string value defines the necessary
+-- query term required to retrieve that item, such as *p0* for a priority
+-- item. The integer value determines the ranking of that string value
+-- relative to other enumerated values for the same property. For example,
+-- you might associate *p0* with *0* and define another enum pair such as
+-- *p1* and *1*. You must use the integer value in combination with ordered
+-- ranking to set the ranking of a given value relative to other enumerated
+-- values for the same property name. Here, a ranking order of DESCENDING
+-- for *priority* properties results in a ranking boost for items indexed
+-- with a value of *p0* compared to items indexed with a value of *p1*.
+-- Without a specified ranking order, the integer value has no effect on
+-- item ranking.
+--
+-- /See:/ 'enumValuePair' smart constructor.
+data EnumValuePair = EnumValuePair'
+    { _evpIntegerValue :: !(Maybe (Textual Int32))
+    , _evpStringValue  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnumValuePair' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evpIntegerValue'
+--
+-- * 'evpStringValue'
+enumValuePair
+    :: EnumValuePair
+enumValuePair =
+    EnumValuePair'
+    { _evpIntegerValue = Nothing
+    , _evpStringValue = Nothing
+    }
+
+-- | The integer value of the EnumValuePair which must be non-negative.
+-- Optional.
+evpIntegerValue :: Lens' EnumValuePair (Maybe Int32)
+evpIntegerValue
+  = lens _evpIntegerValue
+      (\ s a -> s{_evpIntegerValue = a})
+      . mapping _Coerce
+
+-- | The string value of the EnumValuePair. The maximum length is 32
+-- characters.
+evpStringValue :: Lens' EnumValuePair (Maybe Text)
+evpStringValue
+  = lens _evpStringValue
+      (\ s a -> s{_evpStringValue = a})
+
+instance FromJSON EnumValuePair where
+        parseJSON
+          = withObject "EnumValuePair"
+              (\ o ->
+                 EnumValuePair' <$>
+                   (o .:? "integerValue") <*> (o .:? "stringValue"))
+
+instance ToJSON EnumValuePair where
+        toJSON EnumValuePair'{..}
+          = object
+              (catMaybes
+                 [("integerValue" .=) <$> _evpIntegerValue,
+                  ("stringValue" .=) <$> _evpStringValue])
+
+-- | Metadata of a matched search result.
+--
+-- /See:/ 'metadata' smart constructor.
+data Metadata = Metadata'
+    { _mObjectType     :: !(Maybe Text)
+    , _mOwner          :: !(Maybe Person)
+    , _mMimeType       :: !(Maybe Text)
+    , _mUpdateTime     :: !(Maybe DateTime')
+    , _mDisplayOptions :: !(Maybe ResultDisplayMetadata)
+    , _mSource         :: !(Maybe Source)
+    , _mCreateTime     :: !(Maybe DateTime')
+    , _mFields         :: !(Maybe [NamedProperty])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Metadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mObjectType'
+--
+-- * 'mOwner'
+--
+-- * 'mMimeType'
+--
+-- * 'mUpdateTime'
+--
+-- * 'mDisplayOptions'
+--
+-- * 'mSource'
+--
+-- * 'mCreateTime'
+--
+-- * 'mFields'
+metadata
+    :: Metadata
+metadata =
+    Metadata'
+    { _mObjectType = Nothing
+    , _mOwner = Nothing
+    , _mMimeType = Nothing
+    , _mUpdateTime = Nothing
+    , _mDisplayOptions = Nothing
+    , _mSource = Nothing
+    , _mCreateTime = Nothing
+    , _mFields = Nothing
+    }
+
+-- | Object type of the search result.
+mObjectType :: Lens' Metadata (Maybe Text)
+mObjectType
+  = lens _mObjectType (\ s a -> s{_mObjectType = a})
+
+-- | Owner (usually creator) of the document or object of the search result.
+mOwner :: Lens' Metadata (Maybe Person)
+mOwner = lens _mOwner (\ s a -> s{_mOwner = a})
+
+-- | Mime type of the search result.
+mMimeType :: Lens' Metadata (Maybe Text)
+mMimeType
+  = lens _mMimeType (\ s a -> s{_mMimeType = a})
+
+-- | The last modified date for the object in the search result.
+mUpdateTime :: Lens' Metadata (Maybe UTCTime)
+mUpdateTime
+  = lens _mUpdateTime (\ s a -> s{_mUpdateTime = a}) .
+      mapping _DateTime
+
+-- | Options that specify how to display a structured data search result.
+mDisplayOptions :: Lens' Metadata (Maybe ResultDisplayMetadata)
+mDisplayOptions
+  = lens _mDisplayOptions
+      (\ s a -> s{_mDisplayOptions = a})
+
+-- | The named source for the result, such as Gmail.
+mSource :: Lens' Metadata (Maybe Source)
+mSource = lens _mSource (\ s a -> s{_mSource = a})
+
+-- | The creation time for this document or object in the search result.
+mCreateTime :: Lens' Metadata (Maybe UTCTime)
+mCreateTime
+  = lens _mCreateTime (\ s a -> s{_mCreateTime = a}) .
+      mapping _DateTime
+
+-- | Indexed fields in structured data, returned as a generic named property.
+mFields :: Lens' Metadata [NamedProperty]
+mFields
+  = lens _mFields (\ s a -> s{_mFields = a}) . _Default
+      . _Coerce
+
+instance FromJSON Metadata where
+        parseJSON
+          = withObject "Metadata"
+              (\ o ->
+                 Metadata' <$>
+                   (o .:? "objectType") <*> (o .:? "owner") <*>
+                     (o .:? "mimeType")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "displayOptions")
+                     <*> (o .:? "source")
+                     <*> (o .:? "createTime")
+                     <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON Metadata where
+        toJSON Metadata'{..}
+          = object
+              (catMaybes
+                 [("objectType" .=) <$> _mObjectType,
+                  ("owner" .=) <$> _mOwner,
+                  ("mimeType" .=) <$> _mMimeType,
+                  ("updateTime" .=) <$> _mUpdateTime,
+                  ("displayOptions" .=) <$> _mDisplayOptions,
+                  ("source" .=) <$> _mSource,
+                  ("createTime" .=) <$> _mCreateTime,
+                  ("fields" .=) <$> _mFields])
+
+--
+-- /See:/ 'updateDataSourceRequest' smart constructor.
+data UpdateDataSourceRequest = UpdateDataSourceRequest'
+    { _udsrDebugOptions :: !(Maybe DebugOptions)
+    , _udsrSource       :: !(Maybe DataSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDataSourceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udsrDebugOptions'
+--
+-- * 'udsrSource'
+updateDataSourceRequest
+    :: UpdateDataSourceRequest
+updateDataSourceRequest =
+    UpdateDataSourceRequest'
+    { _udsrDebugOptions = Nothing
+    , _udsrSource = Nothing
+    }
+
+-- | Common debug options.
+udsrDebugOptions :: Lens' UpdateDataSourceRequest (Maybe DebugOptions)
+udsrDebugOptions
+  = lens _udsrDebugOptions
+      (\ s a -> s{_udsrDebugOptions = a})
+
+udsrSource :: Lens' UpdateDataSourceRequest (Maybe DataSource)
+udsrSource
+  = lens _udsrSource (\ s a -> s{_udsrSource = a})
+
+instance FromJSON UpdateDataSourceRequest where
+        parseJSON
+          = withObject "UpdateDataSourceRequest"
+              (\ o ->
+                 UpdateDataSourceRequest' <$>
+                   (o .:? "debugOptions") <*> (o .:? "source"))
+
+instance ToJSON UpdateDataSourceRequest where
+        toJSON UpdateDataSourceRequest'{..}
+          = object
+              (catMaybes
+                 [("debugOptions" .=) <$> _udsrDebugOptions,
+                  ("source" .=) <$> _udsrSource])
+
+-- | Data source is a logical namespace for items to be indexed. All items
+-- must belong to a data source. This is the prerequisite before items can
+-- be indexed into Cloud Search.
+--
+-- /See:/ 'dataSource' smart constructor.
+data DataSource = DataSource'
+    { _dsShortName               :: !(Maybe Text)
+    , _dsItemsVisibility         :: !(Maybe [GSuitePrincipal])
+    , _dsOperationIds            :: !(Maybe [Text])
+    , _dsDisableServing          :: !(Maybe Bool)
+    , _dsIndexingServiceAccounts :: !(Maybe [Text])
+    , _dsDisableModifications    :: !(Maybe Bool)
+    , _dsName                    :: !(Maybe Text)
+    , _dsDisplayName             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DataSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsShortName'
+--
+-- * 'dsItemsVisibility'
+--
+-- * 'dsOperationIds'
+--
+-- * 'dsDisableServing'
+--
+-- * 'dsIndexingServiceAccounts'
+--
+-- * 'dsDisableModifications'
+--
+-- * 'dsName'
+--
+-- * 'dsDisplayName'
+dataSource
+    :: DataSource
+dataSource =
+    DataSource'
+    { _dsShortName = Nothing
+    , _dsItemsVisibility = Nothing
+    , _dsOperationIds = Nothing
+    , _dsDisableServing = Nothing
+    , _dsIndexingServiceAccounts = Nothing
+    , _dsDisableModifications = Nothing
+    , _dsName = Nothing
+    , _dsDisplayName = Nothing
+    }
+
+-- | A short name or alias for the source. This value will be used to match
+-- the \'source\' operator. For example, if the short name is *\<value>*
+-- then queries like *source:\<value>* will only return results for this
+-- source. The value must be unique across all data sources. The value must
+-- only contain alphanumeric characters (a-zA-Z0-9). The value cannot start
+-- with \'google\' and cannot be one of the following: mail, gmail, docs,
+-- drive, groups, sites, calendar, hangouts, gplus, keep. Its maximum
+-- length is 32 characters.
+dsShortName :: Lens' DataSource (Maybe Text)
+dsShortName
+  = lens _dsShortName (\ s a -> s{_dsShortName = a})
+
+-- | This restricts visibility to items at a data source level to the
+-- disjunction of users\/groups mentioned with the field. Note that, this
+-- does not ensure access to a specific item, as users need to have ACL
+-- permissions on the contained items. This ensures a high level access on
+-- the entire data source, and that the individual items are not shared
+-- outside this visibility.
+dsItemsVisibility :: Lens' DataSource [GSuitePrincipal]
+dsItemsVisibility
+  = lens _dsItemsVisibility
+      (\ s a -> s{_dsItemsVisibility = a})
+      . _Default
+      . _Coerce
+
+-- | IDs of the Long Running Operations (LROs) currently running for this
+-- schema.
+dsOperationIds :: Lens' DataSource [Text]
+dsOperationIds
+  = lens _dsOperationIds
+      (\ s a -> s{_dsOperationIds = a})
+      . _Default
+      . _Coerce
+
+-- | Disable serving any search or assist results.
+dsDisableServing :: Lens' DataSource (Maybe Bool)
+dsDisableServing
+  = lens _dsDisableServing
+      (\ s a -> s{_dsDisableServing = a})
+
+-- | List of service accounts that have indexing access.
+dsIndexingServiceAccounts :: Lens' DataSource [Text]
+dsIndexingServiceAccounts
+  = lens _dsIndexingServiceAccounts
+      (\ s a -> s{_dsIndexingServiceAccounts = a})
+      . _Default
+      . _Coerce
+
+-- | If true, Indexing API rejects any modification calls to this data source
+-- such as create, update, and delete. Disabling this does not imply
+-- halting process of previously accepted data.
+dsDisableModifications :: Lens' DataSource (Maybe Bool)
+dsDisableModifications
+  = lens _dsDisableModifications
+      (\ s a -> s{_dsDisableModifications = a})
+
+-- | Name of the data source resource. Format: datasources\/{source_id}.
+-- The name is ignored when creating a data source.
+dsName :: Lens' DataSource (Maybe Text)
+dsName = lens _dsName (\ s a -> s{_dsName = a})
+
+-- | Required. Display name of the data source The maximum length is 300
+-- characters.
+dsDisplayName :: Lens' DataSource (Maybe Text)
+dsDisplayName
+  = lens _dsDisplayName
+      (\ s a -> s{_dsDisplayName = a})
+
+instance FromJSON DataSource where
+        parseJSON
+          = withObject "DataSource"
+              (\ o ->
+                 DataSource' <$>
+                   (o .:? "shortName") <*>
+                     (o .:? "itemsVisibility" .!= mempty)
+                     <*> (o .:? "operationIds" .!= mempty)
+                     <*> (o .:? "disableServing")
+                     <*> (o .:? "indexingServiceAccounts" .!= mempty)
+                     <*> (o .:? "disableModifications")
+                     <*> (o .:? "name")
+                     <*> (o .:? "displayName"))
+
+instance ToJSON DataSource where
+        toJSON DataSource'{..}
+          = object
+              (catMaybes
+                 [("shortName" .=) <$> _dsShortName,
+                  ("itemsVisibility" .=) <$> _dsItemsVisibility,
+                  ("operationIds" .=) <$> _dsOperationIds,
+                  ("disableServing" .=) <$> _dsDisableServing,
+                  ("indexingServiceAccounts" .=) <$>
+                    _dsIndexingServiceAccounts,
+                  ("disableModifications" .=) <$>
+                    _dsDisableModifications,
+                  ("name" .=) <$> _dsName,
+                  ("displayName" .=) <$> _dsDisplayName])
+
+-- | List of html values.
+--
+-- /See:/ 'htmlValues' smart constructor.
+newtype HTMLValues = HTMLValues'
+    { _hvValues :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTMLValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hvValues'
+htmlValues
+    :: HTMLValues
+htmlValues =
+    HTMLValues'
+    { _hvValues = Nothing
+    }
+
+-- | The maximum allowable length for html values is 2048 characters. The
+-- maximum number of string elements is 100.
+hvValues :: Lens' HTMLValues [Text]
+hvValues
+  = lens _hvValues (\ s a -> s{_hvValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON HTMLValues where
+        parseJSON
+          = withObject "HTMLValues"
+              (\ o -> HTMLValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON HTMLValues where
+        toJSON HTMLValues'{..}
+          = object (catMaybes [("values" .=) <$> _hvValues])
+
+-- | Used to provide a search operator for html properties. This is optional.
+-- Search operators let users restrict the query to specific fields
+-- relevant to the type of item being searched.
+--
+-- /See:/ 'htmlOperatorOptions' smart constructor.
+newtype HTMLOperatorOptions = HTMLOperatorOptions'
+    { _hooOperatorName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTMLOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hooOperatorName'
+htmlOperatorOptions
+    :: HTMLOperatorOptions
+htmlOperatorOptions =
+    HTMLOperatorOptions'
+    { _hooOperatorName = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the html property. For example, if operatorName is *subject* and the
+-- property\'s name is *subjectLine*, then queries like *subject:\<value>*
+-- will show results only where the value of the property named
+-- *subjectLine* matches *\<value>*. By contrast, a search that uses the
+-- same *\<value>* without an operator will return all items where
+-- *\<value>* matches the value of any html properties or text within the
+-- content field for the item. The operator name can only contain lowercase
+-- letters (a-z). The maximum length is 32 characters.
+hooOperatorName :: Lens' HTMLOperatorOptions (Maybe Text)
+hooOperatorName
+  = lens _hooOperatorName
+      (\ s a -> s{_hooOperatorName = a})
+
+instance FromJSON HTMLOperatorOptions where
+        parseJSON
+          = withObject "HTMLOperatorOptions"
+              (\ o ->
+                 HTMLOperatorOptions' <$> (o .:? "operatorName"))
+
+instance ToJSON HTMLOperatorOptions where
+        toJSON HTMLOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _hooOperatorName])
+
+-- | Represents a single object that is an item in the search index, such as
+-- a file, folder, or a database record.
+--
+-- /See:/ 'item' smart constructor.
+data Item = Item'
+    { _iStatus         :: !(Maybe ItemStatus)
+    , _iItemType       :: !(Maybe ItemItemType)
+    , _iPayload        :: !(Maybe Bytes)
+    , _iStructuredData :: !(Maybe ItemStructuredData)
+    , _iQueue          :: !(Maybe Text)
+    , _iContent        :: !(Maybe ItemContent)
+    , _iName           :: !(Maybe Text)
+    , _iVersion        :: !(Maybe Bytes)
+    , _iMetadata       :: !(Maybe ItemMetadata)
+    , _iACL            :: !(Maybe ItemACL)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Item' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iStatus'
+--
+-- * 'iItemType'
+--
+-- * 'iPayload'
+--
+-- * 'iStructuredData'
+--
+-- * 'iQueue'
+--
+-- * 'iContent'
+--
+-- * 'iName'
+--
+-- * 'iVersion'
+--
+-- * 'iMetadata'
+--
+-- * 'iACL'
+item
+    :: Item
+item =
+    Item'
+    { _iStatus = Nothing
+    , _iItemType = Nothing
+    , _iPayload = Nothing
+    , _iStructuredData = Nothing
+    , _iQueue = Nothing
+    , _iContent = Nothing
+    , _iName = Nothing
+    , _iVersion = Nothing
+    , _iMetadata = Nothing
+    , _iACL = Nothing
+    }
+
+-- | Status of the item. Output only field.
+iStatus :: Lens' Item (Maybe ItemStatus)
+iStatus = lens _iStatus (\ s a -> s{_iStatus = a})
+
+-- | Type for this item.
+iItemType :: Lens' Item (Maybe ItemItemType)
+iItemType
+  = lens _iItemType (\ s a -> s{_iItemType = a})
+
+-- | Additional state connector can store for this item. The maximum length
+-- is 10000 bytes.
+iPayload :: Lens' Item (Maybe ByteString)
+iPayload
+  = lens _iPayload (\ s a -> s{_iPayload = a}) .
+      mapping _Bytes
+
+-- | The structured data for the item that should conform to a registered
+-- object definition in the schema for the data source.
+iStructuredData :: Lens' Item (Maybe ItemStructuredData)
+iStructuredData
+  = lens _iStructuredData
+      (\ s a -> s{_iStructuredData = a})
+
+-- | Queue this item belongs to. The maximum length is 100 characters.
+iQueue :: Lens' Item (Maybe Text)
+iQueue = lens _iQueue (\ s a -> s{_iQueue = a})
+
+-- | Item content to be indexed and made text searchable.
+iContent :: Lens' Item (Maybe ItemContent)
+iContent = lens _iContent (\ s a -> s{_iContent = a})
+
+-- | Name of the Item. Format: datasources\/{source_id}\/items\/{item_id}
+-- This is a required field. The maximum length is 1536 characters.
+iName :: Lens' Item (Maybe Text)
+iName = lens _iName (\ s a -> s{_iName = a})
+
+-- | Required. The indexing system stores the version from the datasource as
+-- a byte string and compares the Item version in the index to the version
+-- of the queued Item using lexical ordering.
+-- Cloud Search Indexing won\'t index or delete any queued item with a
+-- version value that is less than or equal to the version of the currently
+-- indexed item. The maximum length for this field is 1024 bytes.
+iVersion :: Lens' Item (Maybe ByteString)
+iVersion
+  = lens _iVersion (\ s a -> s{_iVersion = a}) .
+      mapping _Bytes
+
+-- | Metadata information.
+iMetadata :: Lens' Item (Maybe ItemMetadata)
+iMetadata
+  = lens _iMetadata (\ s a -> s{_iMetadata = a})
+
+-- | Access control list for this item.
+iACL :: Lens' Item (Maybe ItemACL)
+iACL = lens _iACL (\ s a -> s{_iACL = a})
+
+instance FromJSON Item where
+        parseJSON
+          = withObject "Item"
+              (\ o ->
+                 Item' <$>
+                   (o .:? "status") <*> (o .:? "itemType") <*>
+                     (o .:? "payload")
+                     <*> (o .:? "structuredData")
+                     <*> (o .:? "queue")
+                     <*> (o .:? "content")
+                     <*> (o .:? "name")
+                     <*> (o .:? "version")
+                     <*> (o .:? "metadata")
+                     <*> (o .:? "acl"))
+
+instance ToJSON Item where
+        toJSON Item'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _iStatus,
+                  ("itemType" .=) <$> _iItemType,
+                  ("payload" .=) <$> _iPayload,
+                  ("structuredData" .=) <$> _iStructuredData,
+                  ("queue" .=) <$> _iQueue,
+                  ("content" .=) <$> _iContent, ("name" .=) <$> _iName,
+                  ("version" .=) <$> _iVersion,
+                  ("metadata" .=) <$> _iMetadata,
+                  ("acl" .=) <$> _iACL])
+
+-- | Defines sources for the suggest\/search APIs.
+--
+-- /See:/ 'source' smart constructor.
+data Source = Source'
+    { _sName             :: !(Maybe Text)
+    , _sPredefinedSource :: !(Maybe SourcePredefinedSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Source' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sName'
+--
+-- * 'sPredefinedSource'
+source
+    :: Source
+source =
+    Source'
+    { _sName = Nothing
+    , _sPredefinedSource = Nothing
+    }
+
+-- | Source name for content indexed by the Indexing API.
+sName :: Lens' Source (Maybe Text)
+sName = lens _sName (\ s a -> s{_sName = a})
+
+-- | Predefined content source for Google Apps.
+sPredefinedSource :: Lens' Source (Maybe SourcePredefinedSource)
+sPredefinedSource
+  = lens _sPredefinedSource
+      (\ s a -> s{_sPredefinedSource = a})
+
+instance FromJSON Source where
+        parseJSON
+          = withObject "Source"
+              (\ o ->
+                 Source' <$>
+                   (o .:? "name") <*> (o .:? "predefinedSource"))
+
+instance ToJSON Source where
+        toJSON Source'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _sName,
+                  ("predefinedSource" .=) <$> _sPredefinedSource])
+
+-- | The display options for a property.
+--
+-- /See:/ 'propertyDisplayOptions' smart constructor.
+newtype PropertyDisplayOptions = PropertyDisplayOptions'
+    { _pdoDisplayLabel :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertyDisplayOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdoDisplayLabel'
+propertyDisplayOptions
+    :: PropertyDisplayOptions
+propertyDisplayOptions =
+    PropertyDisplayOptions'
+    { _pdoDisplayLabel = Nothing
+    }
+
+-- | The user friendly label for the property that will be used if the
+-- property is specified to be displayed in ObjectDisplayOptions. If given,
+-- the display label will be shown in front of the property values when the
+-- property is part of the object display options. For example, if the
+-- property value is \'1\', the value by itself may not be useful context
+-- for the user. If the display name given was \'priority\', then the user
+-- will see \'priority : 1\' in the search results which provides clear
+-- conext to search users. This is OPTIONAL; if not given, only the
+-- property values will be displayed. The maximum length is 32 characters.
+pdoDisplayLabel :: Lens' PropertyDisplayOptions (Maybe Text)
+pdoDisplayLabel
+  = lens _pdoDisplayLabel
+      (\ s a -> s{_pdoDisplayLabel = a})
+
+instance FromJSON PropertyDisplayOptions where
+        parseJSON
+          = withObject "PropertyDisplayOptions"
+              (\ o ->
+                 PropertyDisplayOptions' <$> (o .:? "displayLabel"))
+
+instance ToJSON PropertyDisplayOptions where
+        toJSON PropertyDisplayOptions'{..}
+          = object
+              (catMaybes
+                 [("displayLabel" .=) <$> _pdoDisplayLabel])
+
+-- | List of object values.
+--
+-- /See:/ 'objectValues' smart constructor.
+newtype ObjectValues = ObjectValues'
+    { _ovValues :: Maybe [StructuredDataObject]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ovValues'
+objectValues
+    :: ObjectValues
+objectValues =
+    ObjectValues'
+    { _ovValues = Nothing
+    }
+
+-- | The maximum number of elements is 100.
+ovValues :: Lens' ObjectValues [StructuredDataObject]
+ovValues
+  = lens _ovValues (\ s a -> s{_ovValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ObjectValues where
+        parseJSON
+          = withObject "ObjectValues"
+              (\ o ->
+                 ObjectValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON ObjectValues where
+        toJSON ObjectValues'{..}
+          = object (catMaybes [("values" .=) <$> _ovValues])
+
+-- | The options for an object.
+--
+-- /See:/ 'objectOptions' smart constructor.
+data ObjectOptions = ObjectOptions'
+    { _ooFreshnessOptions :: !(Maybe FreshnessOptions)
+    , _ooDisplayOptions   :: !(Maybe ObjectDisplayOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ooFreshnessOptions'
+--
+-- * 'ooDisplayOptions'
+objectOptions
+    :: ObjectOptions
+objectOptions =
+    ObjectOptions'
+    { _ooFreshnessOptions = Nothing
+    , _ooDisplayOptions = Nothing
+    }
+
+-- | The freshness options for an object.
+ooFreshnessOptions :: Lens' ObjectOptions (Maybe FreshnessOptions)
+ooFreshnessOptions
+  = lens _ooFreshnessOptions
+      (\ s a -> s{_ooFreshnessOptions = a})
+
+-- | Options that determine how the object is displayed in the Cloud Search
+-- results page.
+ooDisplayOptions :: Lens' ObjectOptions (Maybe ObjectDisplayOptions)
+ooDisplayOptions
+  = lens _ooDisplayOptions
+      (\ s a -> s{_ooDisplayOptions = a})
+
+instance FromJSON ObjectOptions where
+        parseJSON
+          = withObject "ObjectOptions"
+              (\ o ->
+                 ObjectOptions' <$>
+                   (o .:? "freshnessOptions") <*>
+                     (o .:? "displayOptions"))
+
+instance ToJSON ObjectOptions where
+        toJSON ObjectOptions'{..}
+          = object
+              (catMaybes
+                 [("freshnessOptions" .=) <$> _ooFreshnessOptions,
+                  ("displayOptions" .=) <$> _ooDisplayOptions])
+
+-- | Specifies operators to return facet results for. There will be one
+-- FacetResult for every source_name\/object_type\/operator_name
+-- combination.
+--
+-- /See:/ 'facetOptions' smart constructor.
+data FacetOptions = FacetOptions'
+    { _fSourceName   :: !(Maybe Text)
+    , _fObjectType   :: !(Maybe Text)
+    , _fOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FacetOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fSourceName'
+--
+-- * 'fObjectType'
+--
+-- * 'fOperatorName'
+facetOptions
+    :: FacetOptions
+facetOptions =
+    FacetOptions'
+    { _fSourceName = Nothing
+    , _fObjectType = Nothing
+    , _fOperatorName = Nothing
+    }
+
+-- | Source name to facet on. Format: datasources\/{source_id} If empty, all
+-- data sources will be used.
+fSourceName :: Lens' FacetOptions (Maybe Text)
+fSourceName
+  = lens _fSourceName (\ s a -> s{_fSourceName = a})
+
+-- | If object_type is set, only those objects of that type will be used to
+-- compute facets. If empty, then all objects will be used to compute
+-- facets.
+fObjectType :: Lens' FacetOptions (Maybe Text)
+fObjectType
+  = lens _fObjectType (\ s a -> s{_fObjectType = a})
+
+-- | Name of the operator chosen for faceting. \'see
+-- cloudsearch.SchemaPropertyOptions
+fOperatorName :: Lens' FacetOptions (Maybe Text)
+fOperatorName
+  = lens _fOperatorName
+      (\ s a -> s{_fOperatorName = a})
+
+instance FromJSON FacetOptions where
+        parseJSON
+          = withObject "FacetOptions"
+              (\ o ->
+                 FacetOptions' <$>
+                   (o .:? "sourceName") <*> (o .:? "objectType") <*>
+                     (o .:? "operatorName"))
+
+instance ToJSON FacetOptions where
+        toJSON FacetOptions'{..}
+          = object
+              (catMaybes
+                 [("sourceName" .=) <$> _fSourceName,
+                  ("objectType" .=) <$> _fObjectType,
+                  ("operatorName" .=) <$> _fOperatorName])
+
+-- | Request of suggest API.
+--
+-- /See:/ 'suggestRequest' smart constructor.
+data SuggestRequest = SuggestRequest'
+    { _sDataSourceRestrictions :: !(Maybe [DataSourceRestriction])
+    , _sQuery                  :: !(Maybe Text)
+    , _sRequestOptions         :: !(Maybe RequestOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SuggestRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDataSourceRestrictions'
+--
+-- * 'sQuery'
+--
+-- * 'sRequestOptions'
+suggestRequest
+    :: SuggestRequest
+suggestRequest =
+    SuggestRequest'
+    { _sDataSourceRestrictions = Nothing
+    , _sQuery = Nothing
+    , _sRequestOptions = Nothing
+    }
+
+-- | The sources to use for suggestions. If not specified, all data sources
+-- from the current search application are used.
+sDataSourceRestrictions :: Lens' SuggestRequest [DataSourceRestriction]
+sDataSourceRestrictions
+  = lens _sDataSourceRestrictions
+      (\ s a -> s{_sDataSourceRestrictions = a})
+      . _Default
+      . _Coerce
+
+-- | Partial query for the completion suggestion.
+sQuery :: Lens' SuggestRequest (Maybe Text)
+sQuery = lens _sQuery (\ s a -> s{_sQuery = a})
+
+-- | Request options, such as the search application and user timezone.
+sRequestOptions :: Lens' SuggestRequest (Maybe RequestOptions)
+sRequestOptions
+  = lens _sRequestOptions
+      (\ s a -> s{_sRequestOptions = a})
+
+instance FromJSON SuggestRequest where
+        parseJSON
+          = withObject "SuggestRequest"
+              (\ o ->
+                 SuggestRequest' <$>
+                   (o .:? "dataSourceRestrictions" .!= mempty) <*>
+                     (o .:? "query")
+                     <*> (o .:? "requestOptions"))
+
+instance ToJSON SuggestRequest where
+        toJSON SuggestRequest'{..}
+          = object
+              (catMaybes
+                 [("dataSourceRestrictions" .=) <$>
+                    _sDataSourceRestrictions,
+                  ("query" .=) <$> _sQuery,
+                  ("requestOptions" .=) <$> _sRequestOptions])
+
+-- | A generic way of expressing filters in a query, which supports two
+-- approaches:
+-- **1. Setting a ValueFilter.** The name must match an operator_name
+-- defined in the schema for your data source.
+-- **2. Setting a CompositeFilter.** The filters are evaluated using the
+-- logical operator. The top-level operators can only be either an AND or a
+-- NOT. AND can appear only at the top-most level. OR can appear only under
+-- a top-level AND.
+--
+-- /See:/ 'filter'' smart constructor.
+data Filter = Filter'
+    { _fCompositeFilter :: !(Maybe CompositeFilter)
+    , _fValueFilter     :: !(Maybe ValueFilter)
+    } 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'
+--
+-- * 'fValueFilter'
+filter'
+    :: Filter
+filter' =
+    Filter'
+    { _fCompositeFilter = Nothing
+    , _fValueFilter = Nothing
+    }
+
+fCompositeFilter :: Lens' Filter (Maybe CompositeFilter)
+fCompositeFilter
+  = lens _fCompositeFilter
+      (\ s a -> s{_fCompositeFilter = a})
+
+fValueFilter :: Lens' Filter (Maybe ValueFilter)
+fValueFilter
+  = lens _fValueFilter (\ s a -> s{_fValueFilter = a})
+
+instance FromJSON Filter where
+        parseJSON
+          = withObject "Filter"
+              (\ o ->
+                 Filter' <$>
+                   (o .:? "compositeFilter") <*> (o .:? "valueFilter"))
+
+instance ToJSON Filter where
+        toJSON Filter'{..}
+          = object
+              (catMaybes
+                 [("compositeFilter" .=) <$> _fCompositeFilter,
+                  ("valueFilter" .=) <$> _fValueFilter])
+
+-- | The definition for an object within a data source.
+--
+-- /See:/ 'objectDefinition' smart constructor.
+data ObjectDefinition = ObjectDefinition'
+    { _odName                :: !(Maybe Text)
+    , _odOptions             :: !(Maybe ObjectOptions)
+    , _odPropertyDefinitions :: !(Maybe [PropertyDefinition])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ObjectDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'odName'
+--
+-- * 'odOptions'
+--
+-- * 'odPropertyDefinitions'
+objectDefinition
+    :: ObjectDefinition
+objectDefinition =
+    ObjectDefinition'
+    { _odName = Nothing
+    , _odOptions = Nothing
+    , _odPropertyDefinitions = Nothing
+    }
+
+-- | Name for the object, which then defines its type. Item indexing requests
+-- should set the objectType field equal to this value. For example, if
+-- *name* is *Document*, then indexing requests for items of type Document
+-- should set objectType equal to *Document*. Each object definition must
+-- be uniquely named within a schema. The name must start with a letter and
+-- can only contain letters (A-Z, a-z) or numbers (0-9). The maximum length
+-- is 256 characters.
+odName :: Lens' ObjectDefinition (Maybe Text)
+odName = lens _odName (\ s a -> s{_odName = a})
+
+-- | The optional object-specific options.
+odOptions :: Lens' ObjectDefinition (Maybe ObjectOptions)
+odOptions
+  = lens _odOptions (\ s a -> s{_odOptions = a})
+
+-- | The property definitions for the object. The maximum number of elements
+-- is 1000.
+odPropertyDefinitions :: Lens' ObjectDefinition [PropertyDefinition]
+odPropertyDefinitions
+  = lens _odPropertyDefinitions
+      (\ s a -> s{_odPropertyDefinitions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ObjectDefinition where
+        parseJSON
+          = withObject "ObjectDefinition"
+              (\ o ->
+                 ObjectDefinition' <$>
+                   (o .:? "name") <*> (o .:? "options") <*>
+                     (o .:? "propertyDefinitions" .!= mempty))
+
+instance ToJSON ObjectDefinition where
+        toJSON ObjectDefinition'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _odName,
+                  ("options" .=) <$> _odOptions,
+                  ("propertyDefinitions" .=) <$>
+                    _odPropertyDefinitions])
+
+--
+-- /See:/ 'pollItemsRequest' smart constructor.
+data PollItemsRequest = PollItemsRequest'
+    { _pQueue         :: !(Maybe Text)
+    , _pDebugOptions  :: !(Maybe DebugOptions)
+    , _pConnectorName :: !(Maybe Text)
+    , _pStatusCodes   :: !(Maybe [Text])
+    , _pLimit         :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PollItemsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pQueue'
+--
+-- * 'pDebugOptions'
+--
+-- * 'pConnectorName'
+--
+-- * 'pStatusCodes'
+--
+-- * 'pLimit'
+pollItemsRequest
+    :: PollItemsRequest
+pollItemsRequest =
+    PollItemsRequest'
+    { _pQueue = Nothing
+    , _pDebugOptions = Nothing
+    , _pConnectorName = Nothing
+    , _pStatusCodes = Nothing
+    , _pLimit = Nothing
+    }
+
+-- | Queue name to fetch items from. If unspecified, PollItems will fetch
+-- from \'default\' queue. The maximum length is 100 characters.
+pQueue :: Lens' PollItemsRequest (Maybe Text)
+pQueue = lens _pQueue (\ s a -> s{_pQueue = a})
+
+-- | Common debug options.
+pDebugOptions :: Lens' PollItemsRequest (Maybe DebugOptions)
+pDebugOptions
+  = lens _pDebugOptions
+      (\ s a -> s{_pDebugOptions = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+pConnectorName :: Lens' PollItemsRequest (Maybe Text)
+pConnectorName
+  = lens _pConnectorName
+      (\ s a -> s{_pConnectorName = a})
+
+-- | Limit the items polled to the ones with these statuses.
+pStatusCodes :: Lens' PollItemsRequest [Text]
+pStatusCodes
+  = lens _pStatusCodes (\ s a -> s{_pStatusCodes = a})
+      . _Default
+      . _Coerce
+
+-- | Maximum number of items to return.
+-- The maximum and the default value is 1000
+pLimit :: Lens' PollItemsRequest (Maybe Int32)
+pLimit
+  = lens _pLimit (\ s a -> s{_pLimit = a}) .
+      mapping _Coerce
+
+instance FromJSON PollItemsRequest where
+        parseJSON
+          = withObject "PollItemsRequest"
+              (\ o ->
+                 PollItemsRequest' <$>
+                   (o .:? "queue") <*> (o .:? "debugOptions") <*>
+                     (o .:? "connectorName")
+                     <*> (o .:? "statusCodes" .!= mempty)
+                     <*> (o .:? "limit"))
+
+instance ToJSON PollItemsRequest where
+        toJSON PollItemsRequest'{..}
+          = object
+              (catMaybes
+                 [("queue" .=) <$> _pQueue,
+                  ("debugOptions" .=) <$> _pDebugOptions,
+                  ("connectorName" .=) <$> _pConnectorName,
+                  ("statusCodes" .=) <$> _pStatusCodes,
+                  ("limit" .=) <$> _pLimit])
+
+--
+-- /See:/ 'queryInterpretation' smart constructor.
+data QueryInterpretation = QueryInterpretation'
+    { _qiInterpretedQuery   :: !(Maybe Text)
+    , _qiInterpretationType :: !(Maybe QueryInterpretationInterpretationType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryInterpretation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qiInterpretedQuery'
+--
+-- * 'qiInterpretationType'
+queryInterpretation
+    :: QueryInterpretation
+queryInterpretation =
+    QueryInterpretation'
+    { _qiInterpretedQuery = Nothing
+    , _qiInterpretationType = Nothing
+    }
+
+-- | The interpretation of the query used in search. For example, query
+-- \"email from john\" will be interpreted as \"from:john source:mail\"
+qiInterpretedQuery :: Lens' QueryInterpretation (Maybe Text)
+qiInterpretedQuery
+  = lens _qiInterpretedQuery
+      (\ s a -> s{_qiInterpretedQuery = a})
+
+qiInterpretationType :: Lens' QueryInterpretation (Maybe QueryInterpretationInterpretationType)
+qiInterpretationType
+  = lens _qiInterpretationType
+      (\ s a -> s{_qiInterpretationType = a})
+
+instance FromJSON QueryInterpretation where
+        parseJSON
+          = withObject "QueryInterpretation"
+              (\ o ->
+                 QueryInterpretation' <$>
+                   (o .:? "interpretedQuery") <*>
+                     (o .:? "interpretationType"))
+
+instance ToJSON QueryInterpretation where
+        toJSON QueryInterpretation'{..}
+          = object
+              (catMaybes
+                 [("interpretedQuery" .=) <$> _qiInterpretedQuery,
+                  ("interpretationType" .=) <$> _qiInterpretationType])
+
+--
+-- /See:/ 'unmAppedIdentity' smart constructor.
+data UnmAppedIdentity = UnmAppedIdentity'
+    { _uaiResolutionStatusCode :: !(Maybe UnmAppedIdentityResolutionStatusCode)
+    , _uaiExternalIdentity     :: !(Maybe Principal)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnmAppedIdentity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaiResolutionStatusCode'
+--
+-- * 'uaiExternalIdentity'
+unmAppedIdentity
+    :: UnmAppedIdentity
+unmAppedIdentity =
+    UnmAppedIdentity'
+    { _uaiResolutionStatusCode = Nothing
+    , _uaiExternalIdentity = Nothing
+    }
+
+-- | The resolution status for the external identity.
+uaiResolutionStatusCode :: Lens' UnmAppedIdentity (Maybe UnmAppedIdentityResolutionStatusCode)
+uaiResolutionStatusCode
+  = lens _uaiResolutionStatusCode
+      (\ s a -> s{_uaiResolutionStatusCode = a})
+
+-- | The resource name for an external user.
+uaiExternalIdentity :: Lens' UnmAppedIdentity (Maybe Principal)
+uaiExternalIdentity
+  = lens _uaiExternalIdentity
+      (\ s a -> s{_uaiExternalIdentity = a})
+
+instance FromJSON UnmAppedIdentity where
+        parseJSON
+          = withObject "UnmAppedIdentity"
+              (\ o ->
+                 UnmAppedIdentity' <$>
+                   (o .:? "resolutionStatusCode") <*>
+                     (o .:? "externalIdentity"))
+
+instance ToJSON UnmAppedIdentity where
+        toJSON UnmAppedIdentity'{..}
+          = object
+              (catMaybes
+                 [("resolutionStatusCode" .=) <$>
+                    _uaiResolutionStatusCode,
+                  ("externalIdentity" .=) <$> _uaiExternalIdentity])
+
+-- | 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:/ 'operationMetadata' smart constructor.
+newtype OperationMetadata = OperationMetadata'
+    { _omAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omAddtional'
+operationMetadata
+    :: HashMap Text JSONValue -- ^ 'omAddtional'
+    -> OperationMetadata
+operationMetadata pOmAddtional_ =
+    OperationMetadata'
+    { _omAddtional = _Coerce # pOmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+omAddtional :: Lens' OperationMetadata (HashMap Text JSONValue)
+omAddtional
+  = lens _omAddtional (\ s a -> s{_omAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationMetadata where
+        parseJSON
+          = withObject "OperationMetadata"
+              (\ o -> OperationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON OperationMetadata where
+        toJSON = toJSON . _omAddtional
+
+-- | Aggregation of items by status code as of the specified date.
+--
+-- /See:/ 'customerIndexStats' smart constructor.
+data CustomerIndexStats = CustomerIndexStats'
+    { _cisItemCountByStatus :: !(Maybe [ItemCountByStatus])
+    , _cisDate              :: !(Maybe Date)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerIndexStats' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cisItemCountByStatus'
+--
+-- * 'cisDate'
+customerIndexStats
+    :: CustomerIndexStats
+customerIndexStats =
+    CustomerIndexStats'
+    { _cisItemCountByStatus = Nothing
+    , _cisDate = Nothing
+    }
+
+-- | Number of items aggregrated by status code.
+cisItemCountByStatus :: Lens' CustomerIndexStats [ItemCountByStatus]
+cisItemCountByStatus
+  = lens _cisItemCountByStatus
+      (\ s a -> s{_cisItemCountByStatus = a})
+      . _Default
+      . _Coerce
+
+-- | Date for which statistics were calculated.
+cisDate :: Lens' CustomerIndexStats (Maybe Date)
+cisDate = lens _cisDate (\ s a -> s{_cisDate = a})
+
+instance FromJSON CustomerIndexStats where
+        parseJSON
+          = withObject "CustomerIndexStats"
+              (\ o ->
+                 CustomerIndexStats' <$>
+                   (o .:? "itemCountByStatus" .!= mempty) <*>
+                     (o .:? "date"))
+
+instance ToJSON CustomerIndexStats where
+        toJSON CustomerIndexStats'{..}
+          = object
+              (catMaybes
+                 [("itemCountByStatus" .=) <$> _cisItemCountByStatus,
+                  ("date" .=) <$> _cisDate])
+
+-- | Represents an item to be pushed to the indexing queue.
+--
+-- /See:/ 'pushItem' smart constructor.
+data PushItem = PushItem'
+    { _piRepositoryError    :: !(Maybe RepositoryError)
+    , _piContentHash        :: !(Maybe Text)
+    , _piStructuredDataHash :: !(Maybe Text)
+    , _piPayload            :: !(Maybe Bytes)
+    , _piQueue              :: !(Maybe Text)
+    , _piMetadataHash       :: !(Maybe Text)
+    , _piType               :: !(Maybe PushItemType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PushItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piRepositoryError'
+--
+-- * 'piContentHash'
+--
+-- * 'piStructuredDataHash'
+--
+-- * 'piPayload'
+--
+-- * 'piQueue'
+--
+-- * 'piMetadataHash'
+--
+-- * 'piType'
+pushItem
+    :: PushItem
+pushItem =
+    PushItem'
+    { _piRepositoryError = Nothing
+    , _piContentHash = Nothing
+    , _piStructuredDataHash = Nothing
+    , _piPayload = Nothing
+    , _piQueue = Nothing
+    , _piMetadataHash = Nothing
+    , _piType = Nothing
+    }
+
+-- | Populate this field to store Connector or repository error details. This
+-- information is displayed in the Admin Console. This field may only be
+-- populated when the Type is REPOSITORY_ERROR.
+piRepositoryError :: Lens' PushItem (Maybe RepositoryError)
+piRepositoryError
+  = lens _piRepositoryError
+      (\ s a -> s{_piRepositoryError = a})
+
+-- | Content hash of the item according to the repository. If specified, this
+-- is used to determine how to modify this item\'s status. Setting this
+-- field and the type field results in argument error. The maximum length
+-- is 2048 characters.
+piContentHash :: Lens' PushItem (Maybe Text)
+piContentHash
+  = lens _piContentHash
+      (\ s a -> s{_piContentHash = a})
+
+-- | Structured data hash of the item according to the repository. If
+-- specified, this is used to determine how to modify this item\'s status.
+-- Setting this field and the type field results in argument error. The
+-- maximum length is 2048 characters.
+piStructuredDataHash :: Lens' PushItem (Maybe Text)
+piStructuredDataHash
+  = lens _piStructuredDataHash
+      (\ s a -> s{_piStructuredDataHash = a})
+
+-- | Provides additional document state information for the connector, such
+-- as an alternate repository ID and other metadata. The maximum length is
+-- 8192 bytes.
+piPayload :: Lens' PushItem (Maybe ByteString)
+piPayload
+  = lens _piPayload (\ s a -> s{_piPayload = a}) .
+      mapping _Bytes
+
+-- | Queue to which this item belongs to. The 'default' queue is chosen if
+-- this field is not specified. The maximum length is 512 characters.
+piQueue :: Lens' PushItem (Maybe Text)
+piQueue = lens _piQueue (\ s a -> s{_piQueue = a})
+
+-- | Metadata hash of the item according to the repository. If specified,
+-- this is used to determine how to modify this item\'s status. Setting
+-- this field and the type field results in argument error. The maximum
+-- length is 2048 characters.
+piMetadataHash :: Lens' PushItem (Maybe Text)
+piMetadataHash
+  = lens _piMetadataHash
+      (\ s a -> s{_piMetadataHash = a})
+
+-- | The type of the push operation that defines the push behavior.
+piType :: Lens' PushItem (Maybe PushItemType)
+piType = lens _piType (\ s a -> s{_piType = a})
+
+instance FromJSON PushItem where
+        parseJSON
+          = withObject "PushItem"
+              (\ o ->
+                 PushItem' <$>
+                   (o .:? "repositoryError") <*> (o .:? "contentHash")
+                     <*> (o .:? "structuredDataHash")
+                     <*> (o .:? "payload")
+                     <*> (o .:? "queue")
+                     <*> (o .:? "metadataHash")
+                     <*> (o .:? "type"))
+
+instance ToJSON PushItem where
+        toJSON PushItem'{..}
+          = object
+              (catMaybes
+                 [("repositoryError" .=) <$> _piRepositoryError,
+                  ("contentHash" .=) <$> _piContentHash,
+                  ("structuredDataHash" .=) <$> _piStructuredDataHash,
+                  ("payload" .=) <$> _piPayload,
+                  ("queue" .=) <$> _piQueue,
+                  ("metadataHash" .=) <$> _piMetadataHash,
+                  ("type" .=) <$> _piType])
+
+-- | Error message per source response.
+--
+-- /See:/ 'errorMessage' smart constructor.
+data ErrorMessage = ErrorMessage'
+    { _emSource       :: !(Maybe Source)
+    , _emErrorMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorMessage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'emSource'
+--
+-- * 'emErrorMessage'
+errorMessage
+    :: ErrorMessage
+errorMessage =
+    ErrorMessage'
+    { _emSource = Nothing
+    , _emErrorMessage = Nothing
+    }
+
+emSource :: Lens' ErrorMessage (Maybe Source)
+emSource = lens _emSource (\ s a -> s{_emSource = a})
+
+emErrorMessage :: Lens' ErrorMessage (Maybe Text)
+emErrorMessage
+  = lens _emErrorMessage
+      (\ s a -> s{_emErrorMessage = a})
+
+instance FromJSON ErrorMessage where
+        parseJSON
+          = withObject "ErrorMessage"
+              (\ o ->
+                 ErrorMessage' <$>
+                   (o .:? "source") <*> (o .:? "errorMessage"))
+
+instance ToJSON ErrorMessage where
+        toJSON ErrorMessage'{..}
+          = object
+              (catMaybes
+                 [("source" .=) <$> _emSource,
+                  ("errorMessage" .=) <$> _emErrorMessage])
+
+-- | Options for boolean properties.
+--
+-- /See:/ 'booleanPropertyOptions' smart constructor.
+newtype BooleanPropertyOptions = BooleanPropertyOptions'
+    { _bpoOperatorOptions :: Maybe BooleanOperatorOptions
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooleanPropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bpoOperatorOptions'
+booleanPropertyOptions
+    :: BooleanPropertyOptions
+booleanPropertyOptions =
+    BooleanPropertyOptions'
+    { _bpoOperatorOptions = Nothing
+    }
+
+-- | If set, describes how the boolean should be used as a search operator.
+bpoOperatorOptions :: Lens' BooleanPropertyOptions (Maybe BooleanOperatorOptions)
+bpoOperatorOptions
+  = lens _bpoOperatorOptions
+      (\ s a -> s{_bpoOperatorOptions = a})
+
+instance FromJSON BooleanPropertyOptions where
+        parseJSON
+          = withObject "BooleanPropertyOptions"
+              (\ o ->
+                 BooleanPropertyOptions' <$>
+                   (o .:? "operatorOptions"))
+
+instance ToJSON BooleanPropertyOptions where
+        toJSON BooleanPropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorOptions" .=) <$> _bpoOperatorOptions])
+
+--
+-- /See:/ 'valueFilter' smart constructor.
+data ValueFilter = ValueFilter'
+    { _vfValue        :: !(Maybe Value)
+    , _vfOperatorName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ValueFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vfValue'
+--
+-- * 'vfOperatorName'
+valueFilter
+    :: ValueFilter
+valueFilter =
+    ValueFilter'
+    { _vfValue = Nothing
+    , _vfOperatorName = Nothing
+    }
+
+-- | The value to be compared with.
+vfValue :: Lens' ValueFilter (Maybe Value)
+vfValue = lens _vfValue (\ s a -> s{_vfValue = a})
+
+-- | The \`operator_name\` applied to the query, such as
+-- *price_greater_than*. The filter can work against both types of filters
+-- defined in the schema for your data source:
+-- 1. \`operator_name\`, where the query filters results by the property
+-- that matches the value.
+-- 2. \`greater_than_operator_name\` or \`less_than_operator_name\` in your
+-- schema. The query filters the results for the property values that are
+-- greater than or less than the supplied value in the query.
+vfOperatorName :: Lens' ValueFilter (Maybe Text)
+vfOperatorName
+  = lens _vfOperatorName
+      (\ s a -> s{_vfOperatorName = a})
+
+instance FromJSON ValueFilter where
+        parseJSON
+          = withObject "ValueFilter"
+              (\ o ->
+                 ValueFilter' <$>
+                   (o .:? "value") <*> (o .:? "operatorName"))
+
+instance ToJSON ValueFilter where
+        toJSON ValueFilter'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _vfValue,
+                  ("operatorName" .=) <$> _vfOperatorName])
+
+-- | Used to provide a search operator for enum properties. This is optional.
+-- Search operators let users restrict the query to specific fields
+-- relevant to the type of item being searched. For example, if you provide
+-- no operator for a *priority* enum property with possible values *p0* and
+-- *p1*, a query that contains the term *p0* will return items that have
+-- *p0* as the value of the *priority* property, as well as any items that
+-- contain the string *p0* in other fields. If you provide an operator name
+-- for the enum, such as *priority*, then search users can use that
+-- operator to refine results to only items that have *p0* as this
+-- property\'s value, with the query *priority:p0*.
+--
+-- /See:/ 'enumOperatorOptions' smart constructor.
+newtype EnumOperatorOptions = EnumOperatorOptions'
+    { _eooOperatorName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnumOperatorOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eooOperatorName'
+enumOperatorOptions
+    :: EnumOperatorOptions
+enumOperatorOptions =
+    EnumOperatorOptions'
+    { _eooOperatorName = Nothing
+    }
+
+-- | Indicates the operator name required in the query in order to isolate
+-- the enum property. For example, if operatorName is *priority* and the
+-- property\'s name is *priorityVal*, then queries like *priority:\<value>*
+-- will show results only where the value of the property named
+-- *priorityVal* matches *\<value>*. By contrast, a search that uses the
+-- same *\<value>* without an operator will return all items where
+-- *\<value>* matches the value of any String properties or text within the
+-- content field for the item. The operator name can only contain lowercase
+-- letters (a-z). The maximum length is 32 characters.
+eooOperatorName :: Lens' EnumOperatorOptions (Maybe Text)
+eooOperatorName
+  = lens _eooOperatorName
+      (\ s a -> s{_eooOperatorName = a})
+
+instance FromJSON EnumOperatorOptions where
+        parseJSON
+          = withObject "EnumOperatorOptions"
+              (\ o ->
+                 EnumOperatorOptions' <$> (o .:? "operatorName"))
+
+instance ToJSON EnumOperatorOptions where
+        toJSON EnumOperatorOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorName" .=) <$> _eooOperatorName])
+
+-- | Options for date properties.
+--
+-- /See:/ 'datePropertyOptions' smart constructor.
+newtype DatePropertyOptions = DatePropertyOptions'
+    { _dOperatorOptions :: Maybe DateOperatorOptions
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DatePropertyOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dOperatorOptions'
+datePropertyOptions
+    :: DatePropertyOptions
+datePropertyOptions =
+    DatePropertyOptions'
+    { _dOperatorOptions = Nothing
+    }
+
+-- | If set, describes how the date should be used as a search operator.
+dOperatorOptions :: Lens' DatePropertyOptions (Maybe DateOperatorOptions)
+dOperatorOptions
+  = lens _dOperatorOptions
+      (\ s a -> s{_dOperatorOptions = a})
+
+instance FromJSON DatePropertyOptions where
+        parseJSON
+          = withObject "DatePropertyOptions"
+              (\ o ->
+                 DatePropertyOptions' <$> (o .:? "operatorOptions"))
+
+instance ToJSON DatePropertyOptions where
+        toJSON DatePropertyOptions'{..}
+          = object
+              (catMaybes
+                 [("operatorOptions" .=) <$> _dOperatorOptions])
+
+-- | List of enum values.
+--
+-- /See:/ 'enumValues' smart constructor.
+newtype EnumValues = EnumValues'
+    { _evValues :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnumValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evValues'
+enumValues
+    :: EnumValues
+enumValues =
+    EnumValues'
+    { _evValues = Nothing
+    }
+
+-- | The maximum allowable length for string values is 32 characters. The
+-- maximum number of elements is 100.
+evValues :: Lens' EnumValues [Text]
+evValues
+  = lens _evValues (\ s a -> s{_evValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON EnumValues where
+        parseJSON
+          = withObject "EnumValues"
+              (\ o -> EnumValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON EnumValues where
+        toJSON EnumValues'{..}
+          = object (catMaybes [("values" .=) <$> _evValues])
+
+--
+-- /See:/ 'gSuitePrincipal' smart constructor.
+data GSuitePrincipal = GSuitePrincipal'
+    { _gspGsuiteGroupEmail :: !(Maybe Text)
+    , _gspGsuiteUserEmail  :: !(Maybe Text)
+    , _gspGsuiteDomain     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GSuitePrincipal' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gspGsuiteGroupEmail'
+--
+-- * 'gspGsuiteUserEmail'
+--
+-- * 'gspGsuiteDomain'
+gSuitePrincipal
+    :: GSuitePrincipal
+gSuitePrincipal =
+    GSuitePrincipal'
+    { _gspGsuiteGroupEmail = Nothing
+    , _gspGsuiteUserEmail = Nothing
+    , _gspGsuiteDomain = Nothing
+    }
+
+-- | This principal references a G Suite group account
+gspGsuiteGroupEmail :: Lens' GSuitePrincipal (Maybe Text)
+gspGsuiteGroupEmail
+  = lens _gspGsuiteGroupEmail
+      (\ s a -> s{_gspGsuiteGroupEmail = a})
+
+-- | This principal references a G Suite user account
+gspGsuiteUserEmail :: Lens' GSuitePrincipal (Maybe Text)
+gspGsuiteUserEmail
+  = lens _gspGsuiteUserEmail
+      (\ s a -> s{_gspGsuiteUserEmail = a})
+
+-- | This principal represents all users of the G Suite domain of the
+-- customer.
+gspGsuiteDomain :: Lens' GSuitePrincipal (Maybe Bool)
+gspGsuiteDomain
+  = lens _gspGsuiteDomain
+      (\ s a -> s{_gspGsuiteDomain = a})
+
+instance FromJSON GSuitePrincipal where
+        parseJSON
+          = withObject "GSuitePrincipal"
+              (\ o ->
+                 GSuitePrincipal' <$>
+                   (o .:? "gsuiteGroupEmail") <*>
+                     (o .:? "gsuiteUserEmail")
+                     <*> (o .:? "gsuiteDomain"))
+
+instance ToJSON GSuitePrincipal where
+        toJSON GSuitePrincipal'{..}
+          = object
+              (catMaybes
+                 [("gsuiteGroupEmail" .=) <$> _gspGsuiteGroupEmail,
+                  ("gsuiteUserEmail" .=) <$> _gspGsuiteUserEmail,
+                  ("gsuiteDomain" .=) <$> _gspGsuiteDomain])
+
+-- | Additional search quality metadata of the item.
+--
+-- /See:/ 'searchQualityMetadata' smart constructor.
+newtype SearchQualityMetadata = SearchQualityMetadata'
+    { _sqmQuality :: Maybe (Textual Double)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchQualityMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sqmQuality'
+searchQualityMetadata
+    :: SearchQualityMetadata
+searchQualityMetadata =
+    SearchQualityMetadata'
+    { _sqmQuality = Nothing
+    }
+
+-- | An indication of the quality of the item, used to influence search
+-- quality. Value should be between 0.0 (lowest quality) and 1.0 (highest
+-- quality).
+sqmQuality :: Lens' SearchQualityMetadata (Maybe Double)
+sqmQuality
+  = lens _sqmQuality (\ s a -> s{_sqmQuality = a}) .
+      mapping _Coerce
+
+instance FromJSON SearchQualityMetadata where
+        parseJSON
+          = withObject "SearchQualityMetadata"
+              (\ o -> SearchQualityMetadata' <$> (o .:? "quality"))
+
+instance ToJSON SearchQualityMetadata where
+        toJSON SearchQualityMetadata'{..}
+          = object (catMaybes [("quality" .=) <$> _sqmQuality])
+
+-- | List of timestamp values.
+--
+-- /See:/ 'timestampValues' smart constructor.
+newtype TimestampValues = TimestampValues'
+    { _tValues :: Maybe [DateTime']
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimestampValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tValues'
+timestampValues
+    :: TimestampValues
+timestampValues =
+    TimestampValues'
+    { _tValues = Nothing
+    }
+
+-- | The maximum number of elements is 100.
+tValues :: Lens' TimestampValues [UTCTime]
+tValues
+  = lens _tValues (\ s a -> s{_tValues = a}) . _Default
+      . _Coerce
+
+instance FromJSON TimestampValues where
+        parseJSON
+          = withObject "TimestampValues"
+              (\ o ->
+                 TimestampValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON TimestampValues where
+        toJSON TimestampValues'{..}
+          = object (catMaybes [("values" .=) <$> _tValues])
+
+-- | Error information about the response.
+--
+-- /See:/ 'errorInfo' smart constructor.
+newtype ErrorInfo = ErrorInfo'
+    { _eiErrorMessages :: Maybe [ErrorMessage]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eiErrorMessages'
+errorInfo
+    :: ErrorInfo
+errorInfo =
+    ErrorInfo'
+    { _eiErrorMessages = Nothing
+    }
+
+eiErrorMessages :: Lens' ErrorInfo [ErrorMessage]
+eiErrorMessages
+  = lens _eiErrorMessages
+      (\ s a -> s{_eiErrorMessages = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ErrorInfo where
+        parseJSON
+          = withObject "ErrorInfo"
+              (\ o ->
+                 ErrorInfo' <$> (o .:? "errorMessages" .!= mempty))
+
+instance ToJSON ErrorInfo where
+        toJSON ErrorInfo'{..}
+          = object
+              (catMaybes
+                 [("errorMessages" .=) <$> _eiErrorMessages])
+
+--
+-- /See:/ 'resultDisplayMetadata' smart constructor.
+data ResultDisplayMetadata = ResultDisplayMetadata'
+    { _rdmMetalines       :: !(Maybe [ResultDisplayLine])
+    , _rdmObjectTypeLabel :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultDisplayMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdmMetalines'
+--
+-- * 'rdmObjectTypeLabel'
+resultDisplayMetadata
+    :: ResultDisplayMetadata
+resultDisplayMetadata =
+    ResultDisplayMetadata'
+    { _rdmMetalines = Nothing
+    , _rdmObjectTypeLabel = Nothing
+    }
+
+-- | The metalines content to be displayed with the result.
+rdmMetalines :: Lens' ResultDisplayMetadata [ResultDisplayLine]
+rdmMetalines
+  = lens _rdmMetalines (\ s a -> s{_rdmMetalines = a})
+      . _Default
+      . _Coerce
+
+-- | The display label for the object.
+rdmObjectTypeLabel :: Lens' ResultDisplayMetadata (Maybe Text)
+rdmObjectTypeLabel
+  = lens _rdmObjectTypeLabel
+      (\ s a -> s{_rdmObjectTypeLabel = a})
+
+instance FromJSON ResultDisplayMetadata where
+        parseJSON
+          = withObject "ResultDisplayMetadata"
+              (\ o ->
+                 ResultDisplayMetadata' <$>
+                   (o .:? "metalines" .!= mempty) <*>
+                     (o .:? "objectTypeLabel"))
+
+instance ToJSON ResultDisplayMetadata where
+        toJSON ResultDisplayMetadata'{..}
+          = object
+              (catMaybes
+                 [("metalines" .=) <$> _rdmMetalines,
+                  ("objectTypeLabel" .=) <$> _rdmObjectTypeLabel])
+
+-- | 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:/ 'operationResponse' smart constructor.
+newtype OperationResponse = OperationResponse'
+    { _orAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'orAddtional'
+operationResponse
+    :: HashMap Text JSONValue -- ^ 'orAddtional'
+    -> OperationResponse
+operationResponse pOrAddtional_ =
+    OperationResponse'
+    { _orAddtional = _Coerce # pOrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+orAddtional :: Lens' OperationResponse (HashMap Text JSONValue)
+orAddtional
+  = lens _orAddtional (\ s a -> s{_orAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationResponse where
+        parseJSON
+          = withObject "OperationResponse"
+              (\ o -> OperationResponse' <$> (parseJSONObject o))
+
+instance ToJSON OperationResponse where
+        toJSON = toJSON . _orAddtional
+
+-- | List of integer values.
+--
+-- /See:/ 'integerValues' smart constructor.
+newtype IntegerValues = IntegerValues'
+    { _ivValues :: Maybe [Textual Int64]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IntegerValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ivValues'
+integerValues
+    :: IntegerValues
+integerValues =
+    IntegerValues'
+    { _ivValues = Nothing
+    }
+
+-- | The maximum number of elements is 100.
+ivValues :: Lens' IntegerValues [Int64]
+ivValues
+  = lens _ivValues (\ s a -> s{_ivValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON IntegerValues where
+        parseJSON
+          = withObject "IntegerValues"
+              (\ o ->
+                 IntegerValues' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON IntegerValues where
+        toJSON IntegerValues'{..}
+          = object (catMaybes [("values" .=) <$> _ivValues])
+
+--
+-- /See:/ 'searchItemsByViewURLResponse' smart constructor.
+data SearchItemsByViewURLResponse = SearchItemsByViewURLResponse'
+    { _sibvurNextPageToken :: !(Maybe Text)
+    , _sibvurItems         :: !(Maybe [Item])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchItemsByViewURLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sibvurNextPageToken'
+--
+-- * 'sibvurItems'
+searchItemsByViewURLResponse
+    :: SearchItemsByViewURLResponse
+searchItemsByViewURLResponse =
+    SearchItemsByViewURLResponse'
+    { _sibvurNextPageToken = Nothing
+    , _sibvurItems = Nothing
+    }
+
+-- | Token to retrieve the next page of results, or empty if there are no
+-- more results in the list.
+sibvurNextPageToken :: Lens' SearchItemsByViewURLResponse (Maybe Text)
+sibvurNextPageToken
+  = lens _sibvurNextPageToken
+      (\ s a -> s{_sibvurNextPageToken = a})
+
+sibvurItems :: Lens' SearchItemsByViewURLResponse [Item]
+sibvurItems
+  = lens _sibvurItems (\ s a -> s{_sibvurItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON SearchItemsByViewURLResponse where
+        parseJSON
+          = withObject "SearchItemsByViewURLResponse"
+              (\ o ->
+                 SearchItemsByViewURLResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON SearchItemsByViewURLResponse where
+        toJSON SearchItemsByViewURLResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _sibvurNextPageToken,
+                  ("items" .=) <$> _sibvurItems])
+
+--
+-- /See:/ 'getCustomerIndexStatsResponse' smart constructor.
+newtype GetCustomerIndexStatsResponse = GetCustomerIndexStatsResponse'
+    { _gcisrStats :: Maybe [CustomerIndexStats]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetCustomerIndexStatsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcisrStats'
+getCustomerIndexStatsResponse
+    :: GetCustomerIndexStatsResponse
+getCustomerIndexStatsResponse =
+    GetCustomerIndexStatsResponse'
+    { _gcisrStats = Nothing
+    }
+
+-- | Summary of indexed item counts, one for each day in the requested range.
+gcisrStats :: Lens' GetCustomerIndexStatsResponse [CustomerIndexStats]
+gcisrStats
+  = lens _gcisrStats (\ s a -> s{_gcisrStats = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON GetCustomerIndexStatsResponse where
+        parseJSON
+          = withObject "GetCustomerIndexStatsResponse"
+              (\ o ->
+                 GetCustomerIndexStatsResponse' <$>
+                   (o .:? "stats" .!= mempty))
+
+instance ToJSON GetCustomerIndexStatsResponse where
+        toJSON GetCustomerIndexStatsResponse'{..}
+          = object (catMaybes [("stats" .=) <$> _gcisrStats])
+
+-- | Information relevant only to a restrict entry. NextId: 7
+--
+-- /See:/ 'restrictItem' smart constructor.
+data RestrictItem = RestrictItem'
+    { _riDriveLocationRestrict :: !(Maybe DriveLocationRestrict)
+    , _riDriveTimeSpanRestrict :: !(Maybe DriveTimeSpanRestrict)
+    , _riDriveMimeTypeRestrict :: !(Maybe DriveMimeTypeRestrict)
+    , _riDriveFollowUpRestrict :: !(Maybe DriveFollowUpRestrict)
+    , _riSearchOperator        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RestrictItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riDriveLocationRestrict'
+--
+-- * 'riDriveTimeSpanRestrict'
+--
+-- * 'riDriveMimeTypeRestrict'
+--
+-- * 'riDriveFollowUpRestrict'
+--
+-- * 'riSearchOperator'
+restrictItem
+    :: RestrictItem
+restrictItem =
+    RestrictItem'
+    { _riDriveLocationRestrict = Nothing
+    , _riDriveTimeSpanRestrict = Nothing
+    , _riDriveMimeTypeRestrict = Nothing
+    , _riDriveFollowUpRestrict = Nothing
+    , _riSearchOperator = Nothing
+    }
+
+riDriveLocationRestrict :: Lens' RestrictItem (Maybe DriveLocationRestrict)
+riDriveLocationRestrict
+  = lens _riDriveLocationRestrict
+      (\ s a -> s{_riDriveLocationRestrict = a})
+
+riDriveTimeSpanRestrict :: Lens' RestrictItem (Maybe DriveTimeSpanRestrict)
+riDriveTimeSpanRestrict
+  = lens _riDriveTimeSpanRestrict
+      (\ s a -> s{_riDriveTimeSpanRestrict = a})
+
+riDriveMimeTypeRestrict :: Lens' RestrictItem (Maybe DriveMimeTypeRestrict)
+riDriveMimeTypeRestrict
+  = lens _riDriveMimeTypeRestrict
+      (\ s a -> s{_riDriveMimeTypeRestrict = a})
+
+riDriveFollowUpRestrict :: Lens' RestrictItem (Maybe DriveFollowUpRestrict)
+riDriveFollowUpRestrict
+  = lens _riDriveFollowUpRestrict
+      (\ s a -> s{_riDriveFollowUpRestrict = a})
+
+-- | The search restrict (e.g. \"after:2017-09-11 before:2017-09-12\").
+riSearchOperator :: Lens' RestrictItem (Maybe Text)
+riSearchOperator
+  = lens _riSearchOperator
+      (\ s a -> s{_riSearchOperator = a})
+
+instance FromJSON RestrictItem where
+        parseJSON
+          = withObject "RestrictItem"
+              (\ o ->
+                 RestrictItem' <$>
+                   (o .:? "driveLocationRestrict") <*>
+                     (o .:? "driveTimeSpanRestrict")
+                     <*> (o .:? "driveMimeTypeRestrict")
+                     <*> (o .:? "driveFollowUpRestrict")
+                     <*> (o .:? "searchOperator"))
+
+instance ToJSON RestrictItem where
+        toJSON RestrictItem'{..}
+          = object
+              (catMaybes
+                 [("driveLocationRestrict" .=) <$>
+                    _riDriveLocationRestrict,
+                  ("driveTimeSpanRestrict" .=) <$>
+                    _riDriveTimeSpanRestrict,
+                  ("driveMimeTypeRestrict" .=) <$>
+                    _riDriveMimeTypeRestrict,
+                  ("driveFollowUpRestrict" .=) <$>
+                    _riDriveFollowUpRestrict,
+                  ("searchOperator" .=) <$> _riSearchOperator])
+
+--
+-- /See:/ 'checkAccessResponse' smart constructor.
+newtype CheckAccessResponse = CheckAccessResponse'
+    { _carHasAccess :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CheckAccessResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'carHasAccess'
+checkAccessResponse
+    :: CheckAccessResponse
+checkAccessResponse =
+    CheckAccessResponse'
+    { _carHasAccess = Nothing
+    }
+
+-- | Returns true if principal has access. Returns false otherwise.
+carHasAccess :: Lens' CheckAccessResponse (Maybe Bool)
+carHasAccess
+  = lens _carHasAccess (\ s a -> s{_carHasAccess = a})
+
+instance FromJSON CheckAccessResponse where
+        parseJSON
+          = withObject "CheckAccessResponse"
+              (\ o -> CheckAccessResponse' <$> (o .:? "hasAccess"))
+
+instance ToJSON CheckAccessResponse where
+        toJSON CheckAccessResponse'{..}
+          = object
+              (catMaybes [("hasAccess" .=) <$> _carHasAccess])
+
+-- | Shared request options for all RPC methods.
+--
+-- /See:/ 'requestOptions' smart constructor.
+data RequestOptions = RequestOptions'
+    { _roLanguageCode        :: !(Maybe Text)
+    , _roDebugOptions        :: !(Maybe DebugOptions)
+    , _roTimeZone            :: !(Maybe Text)
+    , _roSearchApplicationId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'roLanguageCode'
+--
+-- * 'roDebugOptions'
+--
+-- * 'roTimeZone'
+--
+-- * 'roSearchApplicationId'
+requestOptions
+    :: RequestOptions
+requestOptions =
+    RequestOptions'
+    { _roLanguageCode = Nothing
+    , _roDebugOptions = Nothing
+    , _roTimeZone = Nothing
+    , _roSearchApplicationId = Nothing
+    }
+
+-- | The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more
+-- information, see
+-- http:\/\/www.unicode.org\/reports\/tr35\/#Unicode_locale_identifier. For
+-- translations.
+roLanguageCode :: Lens' RequestOptions (Maybe Text)
+roLanguageCode
+  = lens _roLanguageCode
+      (\ s a -> s{_roLanguageCode = a})
+
+-- | Debug options of the request
+roDebugOptions :: Lens' RequestOptions (Maybe DebugOptions)
+roDebugOptions
+  = lens _roDebugOptions
+      (\ s a -> s{_roDebugOptions = a})
+
+-- | Current user\'s time zone id, such as \"America\/Los_Angeles\" or
+-- \"Australia\/Sydney\". These IDs are defined by [Unicode Common Locale
+-- Data Repository (CLDR)](http:\/\/cldr.unicode.org\/) project, and
+-- currently available in the file
+-- [timezone.xml](http:\/\/unicode.org\/repos\/cldr\/trunk\/common\/bcp47\/timezone.xml)
+roTimeZone :: Lens' RequestOptions (Maybe Text)
+roTimeZone
+  = lens _roTimeZone (\ s a -> s{_roTimeZone = a})
+
+-- | Id of the application created using SearchApplicationsService.
+roSearchApplicationId :: Lens' RequestOptions (Maybe Text)
+roSearchApplicationId
+  = lens _roSearchApplicationId
+      (\ s a -> s{_roSearchApplicationId = a})
+
+instance FromJSON RequestOptions where
+        parseJSON
+          = withObject "RequestOptions"
+              (\ o ->
+                 RequestOptions' <$>
+                   (o .:? "languageCode") <*> (o .:? "debugOptions") <*>
+                     (o .:? "timeZone")
+                     <*> (o .:? "searchApplicationId"))
+
+instance ToJSON RequestOptions where
+        toJSON RequestOptions'{..}
+          = object
+              (catMaybes
+                 [("languageCode" .=) <$> _roLanguageCode,
+                  ("debugOptions" .=) <$> _roDebugOptions,
+                  ("timeZone" .=) <$> _roTimeZone,
+                  ("searchApplicationId" .=) <$>
+                    _roSearchApplicationId])
+
+-- | This contains item\'s status and any errors.
+--
+-- /See:/ 'itemStatus' smart constructor.
+data ItemStatus = ItemStatus'
+    { _isProcessingErrors :: !(Maybe [ProcessingError])
+    , _isCode             :: !(Maybe ItemStatusCode)
+    , _isRepositoryErrors :: !(Maybe [RepositoryError])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ItemStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isProcessingErrors'
+--
+-- * 'isCode'
+--
+-- * 'isRepositoryErrors'
+itemStatus
+    :: ItemStatus
+itemStatus =
+    ItemStatus'
+    { _isProcessingErrors = Nothing
+    , _isCode = Nothing
+    , _isRepositoryErrors = Nothing
+    }
+
+-- | Error details in case the item is in ERROR state.
+isProcessingErrors :: Lens' ItemStatus [ProcessingError]
+isProcessingErrors
+  = lens _isProcessingErrors
+      (\ s a -> s{_isProcessingErrors = a})
+      . _Default
+      . _Coerce
+
+-- | Status code.
+isCode :: Lens' ItemStatus (Maybe ItemStatusCode)
+isCode = lens _isCode (\ s a -> s{_isCode = a})
+
+-- | Repository error reported by connector.
+isRepositoryErrors :: Lens' ItemStatus [RepositoryError]
+isRepositoryErrors
+  = lens _isRepositoryErrors
+      (\ s a -> s{_isRepositoryErrors = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ItemStatus where
+        parseJSON
+          = withObject "ItemStatus"
+              (\ o ->
+                 ItemStatus' <$>
+                   (o .:? "processingErrors" .!= mempty) <*>
+                     (o .:? "code")
+                     <*> (o .:? "repositoryErrors" .!= mempty))
+
+instance ToJSON ItemStatus where
+        toJSON ItemStatus'{..}
+          = object
+              (catMaybes
+                 [("processingErrors" .=) <$> _isProcessingErrors,
+                  ("code" .=) <$> _isCode,
+                  ("repositoryErrors" .=) <$> _isRepositoryErrors])
diff --git a/gen/Network/Google/CloudSearch/Types/Sum.hs b/gen/Network/Google/CloudSearch/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudSearch/Types/Sum.hs
@@ -0,0 +1,1113 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudSearch.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.CloudSearch.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+data DriveMimeTypeRestrictType
+    = Unspecified
+      -- ^ @UNSPECIFIED@
+    | Pdf
+      -- ^ @PDF@
+    | Document
+      -- ^ @DOCUMENT@
+    | Presentation
+      -- ^ @PRESENTATION@
+    | Spreadsheet
+      -- ^ @SPREADSHEET@
+    | Form
+      -- ^ @FORM@
+    | Drawing
+      -- ^ @DRAWING@
+    | Script
+      -- ^ @SCRIPT@
+    | Map
+      -- ^ @MAP@
+    | Image
+      -- ^ @IMAGE@
+    | Audio
+      -- ^ @AUDIO@
+    | Video
+      -- ^ @VIDEO@
+    | Folder
+      -- ^ @FOLDER@
+    | Archive
+      -- ^ @ARCHIVE@
+    | Site
+      -- ^ @SITE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DriveMimeTypeRestrictType
+
+instance FromHttpApiData DriveMimeTypeRestrictType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right Unspecified
+        "PDF" -> Right Pdf
+        "DOCUMENT" -> Right Document
+        "PRESENTATION" -> Right Presentation
+        "SPREADSHEET" -> Right Spreadsheet
+        "FORM" -> Right Form
+        "DRAWING" -> Right Drawing
+        "SCRIPT" -> Right Script
+        "MAP" -> Right Map
+        "IMAGE" -> Right Image
+        "AUDIO" -> Right Audio
+        "VIDEO" -> Right Video
+        "FOLDER" -> Right Folder
+        "ARCHIVE" -> Right Archive
+        "SITE" -> Right Site
+        x -> Left ("Unable to parse DriveMimeTypeRestrictType from: " <> x)
+
+instance ToHttpApiData DriveMimeTypeRestrictType where
+    toQueryParam = \case
+        Unspecified -> "UNSPECIFIED"
+        Pdf -> "PDF"
+        Document -> "DOCUMENT"
+        Presentation -> "PRESENTATION"
+        Spreadsheet -> "SPREADSHEET"
+        Form -> "FORM"
+        Drawing -> "DRAWING"
+        Script -> "SCRIPT"
+        Map -> "MAP"
+        Image -> "IMAGE"
+        Audio -> "AUDIO"
+        Video -> "VIDEO"
+        Folder -> "FOLDER"
+        Archive -> "ARCHIVE"
+        Site -> "SITE"
+
+instance FromJSON DriveMimeTypeRestrictType where
+    parseJSON = parseJSONText "DriveMimeTypeRestrictType"
+
+instance ToJSON DriveMimeTypeRestrictType where
+    toJSON = toJSONText
+
+data DriveFollowUpRestrictType
+    = DFURTUnspecified
+      -- ^ @UNSPECIFIED@
+    | DFURTFollowupSuggestions
+      -- ^ @FOLLOWUP_SUGGESTIONS@
+    | DFURTFollowupActionItems
+      -- ^ @FOLLOWUP_ACTION_ITEMS@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DriveFollowUpRestrictType
+
+instance FromHttpApiData DriveFollowUpRestrictType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right DFURTUnspecified
+        "FOLLOWUP_SUGGESTIONS" -> Right DFURTFollowupSuggestions
+        "FOLLOWUP_ACTION_ITEMS" -> Right DFURTFollowupActionItems
+        x -> Left ("Unable to parse DriveFollowUpRestrictType from: " <> x)
+
+instance ToHttpApiData DriveFollowUpRestrictType where
+    toQueryParam = \case
+        DFURTUnspecified -> "UNSPECIFIED"
+        DFURTFollowupSuggestions -> "FOLLOWUP_SUGGESTIONS"
+        DFURTFollowupActionItems -> "FOLLOWUP_ACTION_ITEMS"
+
+instance FromJSON DriveFollowUpRestrictType where
+    parseJSON = parseJSONText "DriveFollowUpRestrictType"
+
+instance ToJSON DriveFollowUpRestrictType where
+    toJSON = toJSONText
+
+-- | Status code.
+data ItemStatusCode
+    = CodeUnspecified
+      -- ^ @CODE_UNSPECIFIED@
+      -- Input-only value. Used with Items.list to list all items in the queue,
+      -- regardless of status.
+    | Error'
+      -- ^ @ERROR@
+      -- Error encountered by Cloud Search while processing this item. Details of
+      -- the error are in repositoryError.
+    | Modified
+      -- ^ @MODIFIED@
+      -- Item has been modified in the repository, and is out of date with the
+      -- version previously accepted into Cloud Search.
+    | NewItem
+      -- ^ @NEW_ITEM@
+      -- Item is known to exist in the repository, but is not yet accepted by
+      -- Cloud Search. An item can be in this state when Items.push has been
+      -- called for an item of this name that did not exist previously.
+    | Accepted
+      -- ^ @ACCEPTED@
+      -- API has accepted the up-to-date data of this item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ItemStatusCode
+
+instance FromHttpApiData ItemStatusCode where
+    parseQueryParam = \case
+        "CODE_UNSPECIFIED" -> Right CodeUnspecified
+        "ERROR" -> Right Error'
+        "MODIFIED" -> Right Modified
+        "NEW_ITEM" -> Right NewItem
+        "ACCEPTED" -> Right Accepted
+        x -> Left ("Unable to parse ItemStatusCode from: " <> x)
+
+instance ToHttpApiData ItemStatusCode where
+    toQueryParam = \case
+        CodeUnspecified -> "CODE_UNSPECIFIED"
+        Error' -> "ERROR"
+        Modified -> "MODIFIED"
+        NewItem -> "NEW_ITEM"
+        Accepted -> "ACCEPTED"
+
+instance FromJSON ItemStatusCode where
+    parseJSON = parseJSONText "ItemStatusCode"
+
+instance ToJSON ItemStatusCode where
+    toJSON = toJSONText
+
+data QueryInterpretationInterpretationType
+    = None
+      -- ^ @NONE@
+      -- No natural language interpretation or the natural language
+      -- interpretation is not used to fetch the search results.
+    | Blend
+      -- ^ @BLEND@
+      -- The natural language results is mixed with results from original query.
+    | Replace
+      -- ^ @REPLACE@
+      -- The results only contain natural language results.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable QueryInterpretationInterpretationType
+
+instance FromHttpApiData QueryInterpretationInterpretationType where
+    parseQueryParam = \case
+        "NONE" -> Right None
+        "BLEND" -> Right Blend
+        "REPLACE" -> Right Replace
+        x -> Left ("Unable to parse QueryInterpretationInterpretationType from: " <> x)
+
+instance ToHttpApiData QueryInterpretationInterpretationType where
+    toQueryParam = \case
+        None -> "NONE"
+        Blend -> "BLEND"
+        Replace -> "REPLACE"
+
+instance FromJSON QueryInterpretationInterpretationType where
+    parseJSON = parseJSONText "QueryInterpretationInterpretationType"
+
+instance ToJSON QueryInterpretationInterpretationType where
+    toJSON = toJSONText
+
+data InteractionType
+    = ITUnspecified
+      -- ^ @UNSPECIFIED@
+      -- Invalid value.
+    | ITView
+      -- ^ @VIEW@
+      -- This interaction indicates the user viewed the item.
+    | ITEdit
+      -- ^ @EDIT@
+      -- This interaction indicates the user edited the item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InteractionType
+
+instance FromHttpApiData InteractionType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right ITUnspecified
+        "VIEW" -> Right ITView
+        "EDIT" -> Right ITEdit
+        x -> Left ("Unable to parse InteractionType from: " <> x)
+
+instance ToHttpApiData InteractionType where
+    toQueryParam = \case
+        ITUnspecified -> "UNSPECIFIED"
+        ITView -> "VIEW"
+        ITEdit -> "EDIT"
+
+instance FromJSON InteractionType where
+    parseJSON = parseJSONText "InteractionType"
+
+instance ToJSON InteractionType where
+    toJSON = toJSONText
+
+-- | Type of the operator.
+data QueryOperatorType
+    = QOTUnknown
+      -- ^ @UNKNOWN@
+      -- Invalid value.
+    | QOTInteger
+      -- ^ @INTEGER@
+    | QOTDouble
+      -- ^ @DOUBLE@
+    | QOTTimestamp
+      -- ^ @TIMESTAMP@
+    | QOTBoolean
+      -- ^ @BOOLEAN@
+    | QOTEnum'
+      -- ^ @ENUM@
+    | QOTDate
+      -- ^ @DATE@
+    | QOTText
+      -- ^ @TEXT@
+    | QOTHTML
+      -- ^ @HTML@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable QueryOperatorType
+
+instance FromHttpApiData QueryOperatorType where
+    parseQueryParam = \case
+        "UNKNOWN" -> Right QOTUnknown
+        "INTEGER" -> Right QOTInteger
+        "DOUBLE" -> Right QOTDouble
+        "TIMESTAMP" -> Right QOTTimestamp
+        "BOOLEAN" -> Right QOTBoolean
+        "ENUM" -> Right QOTEnum'
+        "DATE" -> Right QOTDate
+        "TEXT" -> Right QOTText
+        "HTML" -> Right QOTHTML
+        x -> Left ("Unable to parse QueryOperatorType from: " <> x)
+
+instance ToHttpApiData QueryOperatorType where
+    toQueryParam = \case
+        QOTUnknown -> "UNKNOWN"
+        QOTInteger -> "INTEGER"
+        QOTDouble -> "DOUBLE"
+        QOTTimestamp -> "TIMESTAMP"
+        QOTBoolean -> "BOOLEAN"
+        QOTEnum' -> "ENUM"
+        QOTDate -> "DATE"
+        QOTText -> "TEXT"
+        QOTHTML -> "HTML"
+
+instance FromJSON QueryOperatorType where
+    parseJSON = parseJSONText "QueryOperatorType"
+
+instance ToJSON QueryOperatorType where
+    toJSON = toJSONText
+
+-- | Used to specify the ordered ranking for the enumeration that determines
+-- how the integer values provided in the possible EnumValuePairs are used
+-- to rank results. If specified, integer values must be provided for all
+-- possible EnumValuePair values given for this property. Can only be used
+-- if isRepeatable is false.
+data EnumPropertyOptionsOrderedRanking
+    = NoOrder
+      -- ^ @NO_ORDER@
+      -- There is no ranking order for the property. Results will not be adjusted
+      -- by this property\'s value.
+    | Ascending
+      -- ^ @ASCENDING@
+      -- This property is ranked in ascending order. Lower values indicate lower
+      -- ranking.
+    | Descending
+      -- ^ @DESCENDING@
+      -- This property is ranked in descending order. Lower values indicate
+      -- higher ranking.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable EnumPropertyOptionsOrderedRanking
+
+instance FromHttpApiData EnumPropertyOptionsOrderedRanking where
+    parseQueryParam = \case
+        "NO_ORDER" -> Right NoOrder
+        "ASCENDING" -> Right Ascending
+        "DESCENDING" -> Right Descending
+        x -> Left ("Unable to parse EnumPropertyOptionsOrderedRanking from: " <> x)
+
+instance ToHttpApiData EnumPropertyOptionsOrderedRanking where
+    toQueryParam = \case
+        NoOrder -> "NO_ORDER"
+        Ascending -> "ASCENDING"
+        Descending -> "DESCENDING"
+
+instance FromJSON EnumPropertyOptionsOrderedRanking where
+    parseJSON = parseJSONText "EnumPropertyOptionsOrderedRanking"
+
+instance ToJSON EnumPropertyOptionsOrderedRanking where
+    toJSON = toJSONText
+
+-- | Used to specify the ordered ranking for the integer. Can only be used if
+-- isRepeatable is false.
+data IntegerPropertyOptionsOrderedRanking
+    = IPOORNoOrder
+      -- ^ @NO_ORDER@
+      -- There is no ranking order for the property. Results will not be adjusted
+      -- by this property\'s value.
+    | IPOORAscending
+      -- ^ @ASCENDING@
+      -- This property is ranked in ascending order. Lower values indicate lower
+      -- ranking.
+    | IPOORDescending
+      -- ^ @DESCENDING@
+      -- This property is ranked in descending order. Lower values indicate
+      -- higher ranking.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable IntegerPropertyOptionsOrderedRanking
+
+instance FromHttpApiData IntegerPropertyOptionsOrderedRanking where
+    parseQueryParam = \case
+        "NO_ORDER" -> Right IPOORNoOrder
+        "ASCENDING" -> Right IPOORAscending
+        "DESCENDING" -> Right IPOORDescending
+        x -> Left ("Unable to parse IntegerPropertyOptionsOrderedRanking from: " <> x)
+
+instance ToHttpApiData IntegerPropertyOptionsOrderedRanking where
+    toQueryParam = \case
+        IPOORNoOrder -> "NO_ORDER"
+        IPOORAscending -> "ASCENDING"
+        IPOORDescending -> "DESCENDING"
+
+instance FromJSON IntegerPropertyOptionsOrderedRanking where
+    parseJSON = parseJSONText "IntegerPropertyOptionsOrderedRanking"
+
+instance ToJSON IntegerPropertyOptionsOrderedRanking where
+    toJSON = toJSONText
+
+-- | The type of the push operation that defines the push behavior.
+data PushItemType
+    = PITUnspecified
+      -- ^ @UNSPECIFIED@
+      -- Default UNSPECIFIED. Specifies that the push operation should not modify
+      -- ItemStatus
+    | PITModified
+      -- ^ @MODIFIED@
+      -- Indicates that the repository document has been modified or updated
+      -- since the previous update call. This changes status to MODIFIED state
+      -- for an existing item. If this is called on a non existing item, the
+      -- status is changed to NEW_ITEM.
+    | PITNotModified
+      -- ^ @NOT_MODIFIED@
+      -- Item in the repository has not been modified since the last update call.
+      -- This push operation will set status to ACCEPTED state.
+    | PITRepositoryError
+      -- ^ @REPOSITORY_ERROR@
+      -- Connector is facing a repository error regarding this item. Change
+      -- status to REPOSITORY_ERROR state. Item is unreserved and rescheduled at
+      -- a future time determined by exponential backoff.
+    | PITReQueue
+      -- ^ @REQUEUE@
+      -- Call push with REQUEUE only for items that have been reserved. This
+      -- action unreserves the item and resets its available time to the wall
+      -- clock time.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PushItemType
+
+instance FromHttpApiData PushItemType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right PITUnspecified
+        "MODIFIED" -> Right PITModified
+        "NOT_MODIFIED" -> Right PITNotModified
+        "REPOSITORY_ERROR" -> Right PITRepositoryError
+        "REQUEUE" -> Right PITReQueue
+        x -> Left ("Unable to parse PushItemType from: " <> x)
+
+instance ToHttpApiData PushItemType where
+    toQueryParam = \case
+        PITUnspecified -> "UNSPECIFIED"
+        PITModified -> "MODIFIED"
+        PITNotModified -> "NOT_MODIFIED"
+        PITRepositoryError -> "REPOSITORY_ERROR"
+        PITReQueue -> "REQUEUE"
+
+instance FromJSON PushItemType where
+    parseJSON = parseJSONText "PushItemType"
+
+instance ToJSON PushItemType where
+    toJSON = toJSONText
+
+-- | The logic operator of the sub filter.
+data CompositeFilterLogicOperator
+    = And
+      -- ^ @AND@
+      -- Logical operators, which can only be applied to sub filters.
+    | OR
+      -- ^ @OR@
+    | Not
+      -- ^ @NOT@
+      -- NOT can only be applied on a single sub filter.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CompositeFilterLogicOperator
+
+instance FromHttpApiData CompositeFilterLogicOperator where
+    parseQueryParam = \case
+        "AND" -> Right And
+        "OR" -> Right OR
+        "NOT" -> Right Not
+        x -> Left ("Unable to parse CompositeFilterLogicOperator from: " <> x)
+
+instance ToHttpApiData CompositeFilterLogicOperator where
+    toQueryParam = \case
+        And -> "AND"
+        OR -> "OR"
+        Not -> "NOT"
+
+instance FromJSON CompositeFilterLogicOperator where
+    parseJSON = parseJSONText "CompositeFilterLogicOperator"
+
+instance ToJSON CompositeFilterLogicOperator where
+    toJSON = toJSONText
+
+-- | Importance of the source.
+data SourceScoringConfigSourceImportance
+    = Default
+      -- ^ @DEFAULT@
+    | Low
+      -- ^ @LOW@
+    | High
+      -- ^ @HIGH@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SourceScoringConfigSourceImportance
+
+instance FromHttpApiData SourceScoringConfigSourceImportance where
+    parseQueryParam = \case
+        "DEFAULT" -> Right Default
+        "LOW" -> Right Low
+        "HIGH" -> Right High
+        x -> Left ("Unable to parse SourceScoringConfigSourceImportance from: " <> x)
+
+instance ToHttpApiData SourceScoringConfigSourceImportance where
+    toQueryParam = \case
+        Default -> "DEFAULT"
+        Low -> "LOW"
+        High -> "HIGH"
+
+instance FromJSON SourceScoringConfigSourceImportance where
+    parseJSON = parseJSONText "SourceScoringConfigSourceImportance"
+
+instance ToJSON SourceScoringConfigSourceImportance where
+    toJSON = toJSONText
+
+-- | Indicates the ranking importance given to property when it is matched
+-- during retrieval. Once set, the token importance of a property cannot be
+-- changed.
+data RetrievalImportanceImportance
+    = RIIDefault
+      -- ^ @DEFAULT@
+      -- Treat the match like a body text match.
+    | RIIHighest
+      -- ^ @HIGHEST@
+      -- Treat the match like a match against title of the item.
+    | RIIHigh
+      -- ^ @HIGH@
+      -- Treat the match with higher importance than body text.
+    | RIILow
+      -- ^ @LOW@
+      -- Treat the match with lower importance than body text.
+    | RIINone
+      -- ^ @NONE@
+      -- Do not match against this field during retrieval. The property can still
+      -- be used for operator matching, faceting, and suggest if desired.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RetrievalImportanceImportance
+
+instance FromHttpApiData RetrievalImportanceImportance where
+    parseQueryParam = \case
+        "DEFAULT" -> Right RIIDefault
+        "HIGHEST" -> Right RIIHighest
+        "HIGH" -> Right RIIHigh
+        "LOW" -> Right RIILow
+        "NONE" -> Right RIINone
+        x -> Left ("Unable to parse RetrievalImportanceImportance from: " <> x)
+
+instance ToHttpApiData RetrievalImportanceImportance where
+    toQueryParam = \case
+        RIIDefault -> "DEFAULT"
+        RIIHighest -> "HIGHEST"
+        RIIHigh -> "HIGH"
+        RIILow -> "LOW"
+        RIINone -> "NONE"
+
+instance FromJSON RetrievalImportanceImportance where
+    parseJSON = parseJSONText "RetrievalImportanceImportance"
+
+instance ToJSON RetrievalImportanceImportance where
+    toJSON = toJSONText
+
+-- | Error code indicating the nature of the error.
+data ProcessingErrorCode
+    = ProcessingErrorCodeUnspecified
+      -- ^ @PROCESSING_ERROR_CODE_UNSPECIFIED@
+      -- Input only value. Use this value in Items.
+    | MalformedRequest
+      -- ^ @MALFORMED_REQUEST@
+      -- Item\'s ACL, metadata, or content is malformed or in invalid state.
+      -- FieldViolations contains more details on where the problem is.
+    | UnsupportedContentFormat
+      -- ^ @UNSUPPORTED_CONTENT_FORMAT@
+      -- Countent format is unsupported.
+    | IndirectBrokenACL
+      -- ^ @INDIRECT_BROKEN_ACL@
+      -- Items with incomplete ACL information due to inheriting other items with
+      -- broken ACL or having groups with unmapped descendants.
+    | ACLCycle
+      -- ^ @ACL_CYCLE@
+      -- ACL inheritance graph formed a cycle.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ProcessingErrorCode
+
+instance FromHttpApiData ProcessingErrorCode where
+    parseQueryParam = \case
+        "PROCESSING_ERROR_CODE_UNSPECIFIED" -> Right ProcessingErrorCodeUnspecified
+        "MALFORMED_REQUEST" -> Right MalformedRequest
+        "UNSUPPORTED_CONTENT_FORMAT" -> Right UnsupportedContentFormat
+        "INDIRECT_BROKEN_ACL" -> Right IndirectBrokenACL
+        "ACL_CYCLE" -> Right ACLCycle
+        x -> Left ("Unable to parse ProcessingErrorCode from: " <> x)
+
+instance ToHttpApiData ProcessingErrorCode where
+    toQueryParam = \case
+        ProcessingErrorCodeUnspecified -> "PROCESSING_ERROR_CODE_UNSPECIFIED"
+        MalformedRequest -> "MALFORMED_REQUEST"
+        UnsupportedContentFormat -> "UNSUPPORTED_CONTENT_FORMAT"
+        IndirectBrokenACL -> "INDIRECT_BROKEN_ACL"
+        ACLCycle -> "ACL_CYCLE"
+
+instance FromJSON ProcessingErrorCode where
+    parseJSON = parseJSONText "ProcessingErrorCode"
+
+instance ToJSON ProcessingErrorCode where
+    toJSON = toJSONText
+
+-- | Ascending is the default sort order
+data SortOptionsSortOrder
+    = SOSOAscending
+      -- ^ @ASCENDING@
+    | SOSODescending
+      -- ^ @DESCENDING@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SortOptionsSortOrder
+
+instance FromHttpApiData SortOptionsSortOrder where
+    parseQueryParam = \case
+        "ASCENDING" -> Right SOSOAscending
+        "DESCENDING" -> Right SOSODescending
+        x -> Left ("Unable to parse SortOptionsSortOrder from: " <> x)
+
+instance ToHttpApiData SortOptionsSortOrder where
+    toQueryParam = \case
+        SOSOAscending -> "ASCENDING"
+        SOSODescending -> "DESCENDING"
+
+instance FromJSON SortOptionsSortOrder where
+    parseJSON = parseJSONText "SortOptionsSortOrder"
+
+instance ToJSON SortOptionsSortOrder where
+    toJSON = toJSONText
+
+-- | The resolution status for the external identity.
+data UnmAppedIdentityResolutionStatusCode
+    = UAIRSCCodeUnspecified
+      -- ^ @CODE_UNSPECIFIED@
+      -- Input-only value. Used to list all unmapped identities regardless of
+      -- status.
+    | UAIRSCNotFound
+      -- ^ @NOT_FOUND@
+      -- The unmapped identity was not found in IDaaS, and needs to be provided
+      -- by the user.
+    | UAIRSCIdentitySourceNotFound
+      -- ^ @IDENTITY_SOURCE_NOT_FOUND@
+      -- The identity source associated with the identity was either not found or
+      -- deleted.
+    | UAIRSCIdentitySourceMisConfigured
+      -- ^ @IDENTITY_SOURCE_MISCONFIGURED@
+      -- IDaaS does not understand the identity source, probably because the
+      -- schema was modified in a non compatible way.
+    | UAIRSCTooManyMAppingsFound
+      -- ^ @TOO_MANY_MAPPINGS_FOUND@
+      -- The number of users associated with the external identity is too large.
+    | UAIRSCInternalError
+      -- ^ @INTERNAL_ERROR@
+      -- Internal error.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable UnmAppedIdentityResolutionStatusCode
+
+instance FromHttpApiData UnmAppedIdentityResolutionStatusCode where
+    parseQueryParam = \case
+        "CODE_UNSPECIFIED" -> Right UAIRSCCodeUnspecified
+        "NOT_FOUND" -> Right UAIRSCNotFound
+        "IDENTITY_SOURCE_NOT_FOUND" -> Right UAIRSCIdentitySourceNotFound
+        "IDENTITY_SOURCE_MISCONFIGURED" -> Right UAIRSCIdentitySourceMisConfigured
+        "TOO_MANY_MAPPINGS_FOUND" -> Right UAIRSCTooManyMAppingsFound
+        "INTERNAL_ERROR" -> Right UAIRSCInternalError
+        x -> Left ("Unable to parse UnmAppedIdentityResolutionStatusCode from: " <> x)
+
+instance ToHttpApiData UnmAppedIdentityResolutionStatusCode where
+    toQueryParam = \case
+        UAIRSCCodeUnspecified -> "CODE_UNSPECIFIED"
+        UAIRSCNotFound -> "NOT_FOUND"
+        UAIRSCIdentitySourceNotFound -> "IDENTITY_SOURCE_NOT_FOUND"
+        UAIRSCIdentitySourceMisConfigured -> "IDENTITY_SOURCE_MISCONFIGURED"
+        UAIRSCTooManyMAppingsFound -> "TOO_MANY_MAPPINGS_FOUND"
+        UAIRSCInternalError -> "INTERNAL_ERROR"
+
+instance FromJSON UnmAppedIdentityResolutionStatusCode where
+    parseJSON = parseJSONText "UnmAppedIdentityResolutionStatusCode"
+
+instance ToJSON UnmAppedIdentityResolutionStatusCode 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
+
+-- | Type of error.
+data RepositoryErrorType
+    = Unknown
+      -- ^ @UNKNOWN@
+      -- Unknown error.
+    | NetworkError
+      -- ^ @NETWORK_ERROR@
+      -- Unknown or unreachable host.
+    | DNSError
+      -- ^ @DNS_ERROR@
+      -- DNS problem, such as the DNS server is not responding.
+    | ConnectionError
+      -- ^ @CONNECTION_ERROR@
+      -- Cannot connect to the repository server.
+    | AuthenticationError
+      -- ^ @AUTHENTICATION_ERROR@
+      -- Failed authentication due to incorrect credentials.
+    | AuthorizationError
+      -- ^ @AUTHORIZATION_ERROR@
+      -- Service account is not authorized for the repository.
+    | ServerError
+      -- ^ @SERVER_ERROR@
+      -- Repository server error.
+    | QuotaExceeded
+      -- ^ @QUOTA_EXCEEDED@
+      -- Quota exceeded.
+    | ServiceUnavailable
+      -- ^ @SERVICE_UNAVAILABLE@
+      -- Server temporarily unavailable.
+    | ClientError
+      -- ^ @CLIENT_ERROR@
+      -- Client-related error, such as an invalid request from the connector to
+      -- the repository server.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RepositoryErrorType
+
+instance FromHttpApiData RepositoryErrorType where
+    parseQueryParam = \case
+        "UNKNOWN" -> Right Unknown
+        "NETWORK_ERROR" -> Right NetworkError
+        "DNS_ERROR" -> Right DNSError
+        "CONNECTION_ERROR" -> Right ConnectionError
+        "AUTHENTICATION_ERROR" -> Right AuthenticationError
+        "AUTHORIZATION_ERROR" -> Right AuthorizationError
+        "SERVER_ERROR" -> Right ServerError
+        "QUOTA_EXCEEDED" -> Right QuotaExceeded
+        "SERVICE_UNAVAILABLE" -> Right ServiceUnavailable
+        "CLIENT_ERROR" -> Right ClientError
+        x -> Left ("Unable to parse RepositoryErrorType from: " <> x)
+
+instance ToHttpApiData RepositoryErrorType where
+    toQueryParam = \case
+        Unknown -> "UNKNOWN"
+        NetworkError -> "NETWORK_ERROR"
+        DNSError -> "DNS_ERROR"
+        ConnectionError -> "CONNECTION_ERROR"
+        AuthenticationError -> "AUTHENTICATION_ERROR"
+        AuthorizationError -> "AUTHORIZATION_ERROR"
+        ServerError -> "SERVER_ERROR"
+        QuotaExceeded -> "QUOTA_EXCEEDED"
+        ServiceUnavailable -> "SERVICE_UNAVAILABLE"
+        ClientError -> "CLIENT_ERROR"
+
+instance FromJSON RepositoryErrorType where
+    parseJSON = parseJSONText "RepositoryErrorType"
+
+instance ToJSON RepositoryErrorType where
+    toJSON = toJSONText
+
+data DriveLocationRestrictType
+    = DLRTUnspecified
+      -- ^ @UNSPECIFIED@
+    | DLRTTrashed
+      -- ^ @TRASHED@
+    | DLRTStarred
+      -- ^ @STARRED@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DriveLocationRestrictType
+
+instance FromHttpApiData DriveLocationRestrictType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right DLRTUnspecified
+        "TRASHED" -> Right DLRTTrashed
+        "STARRED" -> Right DLRTStarred
+        x -> Left ("Unable to parse DriveLocationRestrictType from: " <> x)
+
+instance ToHttpApiData DriveLocationRestrictType where
+    toQueryParam = \case
+        DLRTUnspecified -> "UNSPECIFIED"
+        DLRTTrashed -> "TRASHED"
+        DLRTStarred -> "STARRED"
+
+instance FromJSON DriveLocationRestrictType where
+    parseJSON = parseJSONText "DriveLocationRestrictType"
+
+instance ToJSON DriveLocationRestrictType where
+    toJSON = toJSONText
+
+-- | Type for this item.
+data ItemItemType
+    = IITUnspecified
+      -- ^ @UNSPECIFIED@
+    | IITContentItem
+      -- ^ @CONTENT_ITEM@
+      -- An item that is indexed for the only purpose of serving information.
+      -- These items cannot be referred in containerName or inheritAclFrom
+      -- fields.
+    | IITContainerItem
+      -- ^ @CONTAINER_ITEM@
+      -- An item that gets indexed and whose purpose is to supply other items
+      -- with ACLs and\/or contain other items.
+    | IITVirtualContainerItem
+      -- ^ @VIRTUAL_CONTAINER_ITEM@
+      -- An item that does not get indexed, but otherwise has the same purpose as
+      -- CONTAINER_ITEM.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ItemItemType
+
+instance FromHttpApiData ItemItemType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right IITUnspecified
+        "CONTENT_ITEM" -> Right IITContentItem
+        "CONTAINER_ITEM" -> Right IITContainerItem
+        "VIRTUAL_CONTAINER_ITEM" -> Right IITVirtualContainerItem
+        x -> Left ("Unable to parse ItemItemType from: " <> x)
+
+instance ToHttpApiData ItemItemType where
+    toQueryParam = \case
+        IITUnspecified -> "UNSPECIFIED"
+        IITContentItem -> "CONTENT_ITEM"
+        IITContainerItem -> "CONTAINER_ITEM"
+        IITVirtualContainerItem -> "VIRTUAL_CONTAINER_ITEM"
+
+instance FromJSON ItemItemType where
+    parseJSON = parseJSONText "ItemItemType"
+
+instance ToJSON ItemItemType where
+    toJSON = toJSONText
+
+-- | Status of the items.
+data ItemCountByStatusStatusCode
+    = ICBSSCCodeUnspecified
+      -- ^ @CODE_UNSPECIFIED@
+      -- Input-only value. Used with Items.list to list all items in the queue,
+      -- regardless of status.
+    | ICBSSCError'
+      -- ^ @ERROR@
+      -- Error encountered by Cloud Search while processing this item. Details of
+      -- the error are in repositoryError.
+    | ICBSSCModified
+      -- ^ @MODIFIED@
+      -- Item has been modified in the repository, and is out of date with the
+      -- version previously accepted into Cloud Search.
+    | ICBSSCNewItem
+      -- ^ @NEW_ITEM@
+      -- Item is known to exist in the repository, but is not yet accepted by
+      -- Cloud Search. An item can be in this state when Items.push has been
+      -- called for an item of this name that did not exist previously.
+    | ICBSSCAccepted
+      -- ^ @ACCEPTED@
+      -- API has accepted the up-to-date data of this item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ItemCountByStatusStatusCode
+
+instance FromHttpApiData ItemCountByStatusStatusCode where
+    parseQueryParam = \case
+        "CODE_UNSPECIFIED" -> Right ICBSSCCodeUnspecified
+        "ERROR" -> Right ICBSSCError'
+        "MODIFIED" -> Right ICBSSCModified
+        "NEW_ITEM" -> Right ICBSSCNewItem
+        "ACCEPTED" -> Right ICBSSCAccepted
+        x -> Left ("Unable to parse ItemCountByStatusStatusCode from: " <> x)
+
+instance ToHttpApiData ItemCountByStatusStatusCode where
+    toQueryParam = \case
+        ICBSSCCodeUnspecified -> "CODE_UNSPECIFIED"
+        ICBSSCError' -> "ERROR"
+        ICBSSCModified -> "MODIFIED"
+        ICBSSCNewItem -> "NEW_ITEM"
+        ICBSSCAccepted -> "ACCEPTED"
+
+instance FromJSON ItemCountByStatusStatusCode where
+    parseJSON = parseJSONText "ItemCountByStatusStatusCode"
+
+instance ToJSON ItemCountByStatusStatusCode where
+    toJSON = toJSONText
+
+data ItemContentContentFormat
+    = ICCFUnspecified
+      -- ^ @UNSPECIFIED@
+      -- Invalid value.
+    | ICCFHTML
+      -- ^ @HTML@
+      -- contentFormat is HTML.
+    | ICCFText
+      -- ^ @TEXT@
+      -- contentFormat is free text.
+    | ICCFRaw
+      -- ^ @RAW@
+      -- contentFormat is raw bytes.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ItemContentContentFormat
+
+instance FromHttpApiData ItemContentContentFormat where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right ICCFUnspecified
+        "HTML" -> Right ICCFHTML
+        "TEXT" -> Right ICCFText
+        "RAW" -> Right ICCFRaw
+        x -> Left ("Unable to parse ItemContentContentFormat from: " <> x)
+
+instance ToHttpApiData ItemContentContentFormat where
+    toQueryParam = \case
+        ICCFUnspecified -> "UNSPECIFIED"
+        ICCFHTML -> "HTML"
+        ICCFText -> "TEXT"
+        ICCFRaw -> "RAW"
+
+instance FromJSON ItemContentContentFormat where
+    parseJSON = parseJSONText "ItemContentContentFormat"
+
+instance ToJSON ItemContentContentFormat where
+    toJSON = toJSONText
+
+-- | Predefined content source for Google Apps.
+data SourcePredefinedSource
+    = SPSNone
+      -- ^ @NONE@
+    | SPSQueryHistory
+      -- ^ @QUERY_HISTORY@
+      -- Suggests queries issued by the user in the past. Only valid when used
+      -- with the suggest API. Ignored when used in the query API.
+    | SPSPerson
+      -- ^ @PERSON@
+      -- Suggests people in the organization. Only valid when used with the
+      -- suggest API. Results in an error when used in the query API.
+    | SPSGoogleDrive
+      -- ^ @GOOGLE_DRIVE@
+    | SPSGoogleGmail
+      -- ^ @GOOGLE_GMAIL@
+    | SPSGoogleSites
+      -- ^ @GOOGLE_SITES@
+    | SPSGoogleGroups
+      -- ^ @GOOGLE_GROUPS@
+    | SPSGoogleCalendar
+      -- ^ @GOOGLE_CALENDAR@
+    | SPSGoogleKeep
+      -- ^ @GOOGLE_KEEP@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SourcePredefinedSource
+
+instance FromHttpApiData SourcePredefinedSource where
+    parseQueryParam = \case
+        "NONE" -> Right SPSNone
+        "QUERY_HISTORY" -> Right SPSQueryHistory
+        "PERSON" -> Right SPSPerson
+        "GOOGLE_DRIVE" -> Right SPSGoogleDrive
+        "GOOGLE_GMAIL" -> Right SPSGoogleGmail
+        "GOOGLE_SITES" -> Right SPSGoogleSites
+        "GOOGLE_GROUPS" -> Right SPSGoogleGroups
+        "GOOGLE_CALENDAR" -> Right SPSGoogleCalendar
+        "GOOGLE_KEEP" -> Right SPSGoogleKeep
+        x -> Left ("Unable to parse SourcePredefinedSource from: " <> x)
+
+instance ToHttpApiData SourcePredefinedSource where
+    toQueryParam = \case
+        SPSNone -> "NONE"
+        SPSQueryHistory -> "QUERY_HISTORY"
+        SPSPerson -> "PERSON"
+        SPSGoogleDrive -> "GOOGLE_DRIVE"
+        SPSGoogleGmail -> "GOOGLE_GMAIL"
+        SPSGoogleSites -> "GOOGLE_SITES"
+        SPSGoogleGroups -> "GOOGLE_GROUPS"
+        SPSGoogleCalendar -> "GOOGLE_CALENDAR"
+        SPSGoogleKeep -> "GOOGLE_KEEP"
+
+instance FromJSON SourcePredefinedSource where
+    parseJSON = parseJSONText "SourcePredefinedSource"
+
+instance ToJSON SourcePredefinedSource where
+    toJSON = toJSONText
+
+data DriveTimeSpanRestrictType
+    = DTSRTUnspecified
+      -- ^ @UNSPECIFIED@
+    | DTSRTToday
+      -- ^ @TODAY@
+    | DTSRTYesterday
+      -- ^ @YESTERDAY@
+    | DTSRTLast7Days
+      -- ^ @LAST_7_DAYS@
+    | DTSRTLast30Days
+      -- ^ @LAST_30_DAYS@
+      -- Not Enabled
+    | DTSRTLast90Days
+      -- ^ @LAST_90_DAYS@
+      -- Not Enabled
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DriveTimeSpanRestrictType
+
+instance FromHttpApiData DriveTimeSpanRestrictType where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right DTSRTUnspecified
+        "TODAY" -> Right DTSRTToday
+        "YESTERDAY" -> Right DTSRTYesterday
+        "LAST_7_DAYS" -> Right DTSRTLast7Days
+        "LAST_30_DAYS" -> Right DTSRTLast30Days
+        "LAST_90_DAYS" -> Right DTSRTLast90Days
+        x -> Left ("Unable to parse DriveTimeSpanRestrictType from: " <> x)
+
+instance ToHttpApiData DriveTimeSpanRestrictType where
+    toQueryParam = \case
+        DTSRTUnspecified -> "UNSPECIFIED"
+        DTSRTToday -> "TODAY"
+        DTSRTYesterday -> "YESTERDAY"
+        DTSRTLast7Days -> "LAST_7_DAYS"
+        DTSRTLast30Days -> "LAST_30_DAYS"
+        DTSRTLast90Days -> "LAST_90_DAYS"
+
+instance FromJSON DriveTimeSpanRestrictType where
+    parseJSON = parseJSONText "DriveTimeSpanRestrictType"
+
+instance ToJSON DriveTimeSpanRestrictType where
+    toJSON = toJSONText
+
+-- | Required. The RequestMode for this request.
+data IndexItemRequestMode
+    = IIRMUnspecified
+      -- ^ @UNSPECIFIED@
+      -- Priority is not specified in the update request. Leaving priority
+      -- unspecified results in an update failure.
+    | IIRMSynchronous
+      -- ^ @SYNCHRONOUS@
+      -- For real-time updates.
+    | IIRMAsynchronous
+      -- ^ @ASYNCHRONOUS@
+      -- For changes that are executed after the response is sent back to the
+      -- caller.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable IndexItemRequestMode
+
+instance FromHttpApiData IndexItemRequestMode where
+    parseQueryParam = \case
+        "UNSPECIFIED" -> Right IIRMUnspecified
+        "SYNCHRONOUS" -> Right IIRMSynchronous
+        "ASYNCHRONOUS" -> Right IIRMAsynchronous
+        x -> Left ("Unable to parse IndexItemRequestMode from: " <> x)
+
+instance ToHttpApiData IndexItemRequestMode where
+    toQueryParam = \case
+        IIRMUnspecified -> "UNSPECIFIED"
+        IIRMSynchronous -> "SYNCHRONOUS"
+        IIRMAsynchronous -> "ASYNCHRONOUS"
+
+instance FromJSON IndexItemRequestMode where
+    parseJSON = parseJSONText "IndexItemRequestMode"
+
+instance ToJSON IndexItemRequestMode where
+    toJSON = toJSONText
+
+-- | Sets the type of access rules to apply when an item inherits its ACL
+-- from a parent. This should always be set in tandem with the
+-- inheritAclFrom field. Also, when the inheritAclFrom field is set, this
+-- field should be set to a valid AclInheritanceType.
+data ItemACLACLInheritanceType
+    = NotApplicable
+      -- ^ @NOT_APPLICABLE@
+      -- The default value when this item does not inherit an ACL. Use
+      -- NOT_APPLICABLE when inheritAclFrom is empty. An item without ACL
+      -- inheritance can still have ACLs supplied by its own readers and
+      -- deniedReaders fields.
+    | ChildOverride
+      -- ^ @CHILD_OVERRIDE@
+      -- During an authorization conflict, the ACL of the child item determines
+      -- its read access.
+    | ParentOverride
+      -- ^ @PARENT_OVERRIDE@
+      -- During an authorization conflict, the ACL of the parent item specified
+      -- in the inheritAclFrom field determines read access.
+    | BothPermit
+      -- ^ @BOTH_PERMIT@
+      -- Access is granted only if this item and the parent item specified in the
+      -- inheritAclFrom field both permit read access.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ItemACLACLInheritanceType
+
+instance FromHttpApiData ItemACLACLInheritanceType where
+    parseQueryParam = \case
+        "NOT_APPLICABLE" -> Right NotApplicable
+        "CHILD_OVERRIDE" -> Right ChildOverride
+        "PARENT_OVERRIDE" -> Right ParentOverride
+        "BOTH_PERMIT" -> Right BothPermit
+        x -> Left ("Unable to parse ItemACLACLInheritanceType from: " <> x)
+
+instance ToHttpApiData ItemACLACLInheritanceType where
+    toQueryParam = \case
+        NotApplicable -> "NOT_APPLICABLE"
+        ChildOverride -> "CHILD_OVERRIDE"
+        ParentOverride -> "PARENT_OVERRIDE"
+        BothPermit -> "BOTH_PERMIT"
+
+instance FromJSON ItemACLACLInheritanceType where
+    parseJSON = parseJSONText "ItemACLACLInheritanceType"
+
+instance ToJSON ItemACLACLInheritanceType where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/CheckAccess.hs b/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/CheckAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/CheckAccess.hs
@@ -0,0 +1,180 @@
+{-# 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.CloudSearch.Debug.Datasources.Items.CheckAccess
+-- 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)
+--
+-- Checks whether an item is accessible by specified principal.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.debug.datasources.items.checkAccess@.
+module Network.Google.Resource.CloudSearch.Debug.Datasources.Items.CheckAccess
+    (
+    -- * REST Resource
+      DebugDatasourcesItemsCheckAccessResource
+
+    -- * Creating a Request
+    , debugDatasourcesItemsCheckAccess
+    , DebugDatasourcesItemsCheckAccess
+
+    -- * Request Lenses
+    , ddicaXgafv
+    , ddicaUploadProtocol
+    , ddicaAccessToken
+    , ddicaUploadType
+    , ddicaPayload
+    , ddicaName
+    , ddicaDebugOptionsEnableDebugging
+    , ddicaCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.debug.datasources.items.checkAccess@ method which the
+-- 'DebugDatasourcesItemsCheckAccess' request conforms to.
+type DebugDatasourcesItemsCheckAccessResource =
+     "v1" :>
+       "debug" :>
+         CaptureMode "name" "checkAccess" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Principal :>
+                           Post '[JSON] CheckAccessResponse
+
+-- | Checks whether an item is accessible by specified principal.
+--
+-- /See:/ 'debugDatasourcesItemsCheckAccess' smart constructor.
+data DebugDatasourcesItemsCheckAccess = DebugDatasourcesItemsCheckAccess'
+    { _ddicaXgafv                       :: !(Maybe Xgafv)
+    , _ddicaUploadProtocol              :: !(Maybe Text)
+    , _ddicaAccessToken                 :: !(Maybe Text)
+    , _ddicaUploadType                  :: !(Maybe Text)
+    , _ddicaPayload                     :: !Principal
+    , _ddicaName                        :: !Text
+    , _ddicaDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _ddicaCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DebugDatasourcesItemsCheckAccess' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddicaXgafv'
+--
+-- * 'ddicaUploadProtocol'
+--
+-- * 'ddicaAccessToken'
+--
+-- * 'ddicaUploadType'
+--
+-- * 'ddicaPayload'
+--
+-- * 'ddicaName'
+--
+-- * 'ddicaDebugOptionsEnableDebugging'
+--
+-- * 'ddicaCallback'
+debugDatasourcesItemsCheckAccess
+    :: Principal -- ^ 'ddicaPayload'
+    -> Text -- ^ 'ddicaName'
+    -> DebugDatasourcesItemsCheckAccess
+debugDatasourcesItemsCheckAccess pDdicaPayload_ pDdicaName_ =
+    DebugDatasourcesItemsCheckAccess'
+    { _ddicaXgafv = Nothing
+    , _ddicaUploadProtocol = Nothing
+    , _ddicaAccessToken = Nothing
+    , _ddicaUploadType = Nothing
+    , _ddicaPayload = pDdicaPayload_
+    , _ddicaName = pDdicaName_
+    , _ddicaDebugOptionsEnableDebugging = Nothing
+    , _ddicaCallback = Nothing
+    }
+
+-- | V1 error format.
+ddicaXgafv :: Lens' DebugDatasourcesItemsCheckAccess (Maybe Xgafv)
+ddicaXgafv
+  = lens _ddicaXgafv (\ s a -> s{_ddicaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ddicaUploadProtocol :: Lens' DebugDatasourcesItemsCheckAccess (Maybe Text)
+ddicaUploadProtocol
+  = lens _ddicaUploadProtocol
+      (\ s a -> s{_ddicaUploadProtocol = a})
+
+-- | OAuth access token.
+ddicaAccessToken :: Lens' DebugDatasourcesItemsCheckAccess (Maybe Text)
+ddicaAccessToken
+  = lens _ddicaAccessToken
+      (\ s a -> s{_ddicaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ddicaUploadType :: Lens' DebugDatasourcesItemsCheckAccess (Maybe Text)
+ddicaUploadType
+  = lens _ddicaUploadType
+      (\ s a -> s{_ddicaUploadType = a})
+
+-- | Multipart request metadata.
+ddicaPayload :: Lens' DebugDatasourcesItemsCheckAccess Principal
+ddicaPayload
+  = lens _ddicaPayload (\ s a -> s{_ddicaPayload = a})
+
+-- | Item name, format: datasources\/{source_id}\/items\/{item_id}
+ddicaName :: Lens' DebugDatasourcesItemsCheckAccess Text
+ddicaName
+  = lens _ddicaName (\ s a -> s{_ddicaName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+ddicaDebugOptionsEnableDebugging :: Lens' DebugDatasourcesItemsCheckAccess (Maybe Bool)
+ddicaDebugOptionsEnableDebugging
+  = lens _ddicaDebugOptionsEnableDebugging
+      (\ s a -> s{_ddicaDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+ddicaCallback :: Lens' DebugDatasourcesItemsCheckAccess (Maybe Text)
+ddicaCallback
+  = lens _ddicaCallback
+      (\ s a -> s{_ddicaCallback = a})
+
+instance GoogleRequest
+         DebugDatasourcesItemsCheckAccess where
+        type Rs DebugDatasourcesItemsCheckAccess =
+             CheckAccessResponse
+        type Scopes DebugDatasourcesItemsCheckAccess =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.debug"]
+        requestClient DebugDatasourcesItemsCheckAccess'{..}
+          = go _ddicaName _ddicaXgafv _ddicaUploadProtocol
+              _ddicaAccessToken
+              _ddicaUploadType
+              _ddicaDebugOptionsEnableDebugging
+              _ddicaCallback
+              (Just AltJSON)
+              _ddicaPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy DebugDatasourcesItemsCheckAccessResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/SearchByViewURL.hs b/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/SearchByViewURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/SearchByViewURL.hs
@@ -0,0 +1,172 @@
+{-# 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.CloudSearch.Debug.Datasources.Items.SearchByViewURL
+-- 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)
+--
+-- Fetches the item whose viewUrl exactly matches that of the URL provided
+-- in the request.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.debug.datasources.items.searchByViewUrl@.
+module Network.Google.Resource.CloudSearch.Debug.Datasources.Items.SearchByViewURL
+    (
+    -- * REST Resource
+      DebugDatasourcesItemsSearchByViewURLResource
+
+    -- * Creating a Request
+    , debugDatasourcesItemsSearchByViewURL
+    , DebugDatasourcesItemsSearchByViewURL
+
+    -- * Request Lenses
+    , ddisbvuXgafv
+    , ddisbvuUploadProtocol
+    , ddisbvuAccessToken
+    , ddisbvuUploadType
+    , ddisbvuPayload
+    , ddisbvuName
+    , ddisbvuCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.debug.datasources.items.searchByViewUrl@ method which the
+-- 'DebugDatasourcesItemsSearchByViewURL' request conforms to.
+type DebugDatasourcesItemsSearchByViewURLResource =
+     "v1" :>
+       "debug" :>
+         Capture "name" Text :>
+           "items:searchByViewUrl" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] SearchItemsByViewURLRequest :>
+                           Post '[JSON] SearchItemsByViewURLResponse
+
+-- | Fetches the item whose viewUrl exactly matches that of the URL provided
+-- in the request.
+--
+-- /See:/ 'debugDatasourcesItemsSearchByViewURL' smart constructor.
+data DebugDatasourcesItemsSearchByViewURL = DebugDatasourcesItemsSearchByViewURL'
+    { _ddisbvuXgafv          :: !(Maybe Xgafv)
+    , _ddisbvuUploadProtocol :: !(Maybe Text)
+    , _ddisbvuAccessToken    :: !(Maybe Text)
+    , _ddisbvuUploadType     :: !(Maybe Text)
+    , _ddisbvuPayload        :: !SearchItemsByViewURLRequest
+    , _ddisbvuName           :: !Text
+    , _ddisbvuCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DebugDatasourcesItemsSearchByViewURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddisbvuXgafv'
+--
+-- * 'ddisbvuUploadProtocol'
+--
+-- * 'ddisbvuAccessToken'
+--
+-- * 'ddisbvuUploadType'
+--
+-- * 'ddisbvuPayload'
+--
+-- * 'ddisbvuName'
+--
+-- * 'ddisbvuCallback'
+debugDatasourcesItemsSearchByViewURL
+    :: SearchItemsByViewURLRequest -- ^ 'ddisbvuPayload'
+    -> Text -- ^ 'ddisbvuName'
+    -> DebugDatasourcesItemsSearchByViewURL
+debugDatasourcesItemsSearchByViewURL pDdisbvuPayload_ pDdisbvuName_ =
+    DebugDatasourcesItemsSearchByViewURL'
+    { _ddisbvuXgafv = Nothing
+    , _ddisbvuUploadProtocol = Nothing
+    , _ddisbvuAccessToken = Nothing
+    , _ddisbvuUploadType = Nothing
+    , _ddisbvuPayload = pDdisbvuPayload_
+    , _ddisbvuName = pDdisbvuName_
+    , _ddisbvuCallback = Nothing
+    }
+
+-- | V1 error format.
+ddisbvuXgafv :: Lens' DebugDatasourcesItemsSearchByViewURL (Maybe Xgafv)
+ddisbvuXgafv
+  = lens _ddisbvuXgafv (\ s a -> s{_ddisbvuXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ddisbvuUploadProtocol :: Lens' DebugDatasourcesItemsSearchByViewURL (Maybe Text)
+ddisbvuUploadProtocol
+  = lens _ddisbvuUploadProtocol
+      (\ s a -> s{_ddisbvuUploadProtocol = a})
+
+-- | OAuth access token.
+ddisbvuAccessToken :: Lens' DebugDatasourcesItemsSearchByViewURL (Maybe Text)
+ddisbvuAccessToken
+  = lens _ddisbvuAccessToken
+      (\ s a -> s{_ddisbvuAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ddisbvuUploadType :: Lens' DebugDatasourcesItemsSearchByViewURL (Maybe Text)
+ddisbvuUploadType
+  = lens _ddisbvuUploadType
+      (\ s a -> s{_ddisbvuUploadType = a})
+
+-- | Multipart request metadata.
+ddisbvuPayload :: Lens' DebugDatasourcesItemsSearchByViewURL SearchItemsByViewURLRequest
+ddisbvuPayload
+  = lens _ddisbvuPayload
+      (\ s a -> s{_ddisbvuPayload = a})
+
+-- | Source name, format: datasources\/{source_id}
+ddisbvuName :: Lens' DebugDatasourcesItemsSearchByViewURL Text
+ddisbvuName
+  = lens _ddisbvuName (\ s a -> s{_ddisbvuName = a})
+
+-- | JSONP
+ddisbvuCallback :: Lens' DebugDatasourcesItemsSearchByViewURL (Maybe Text)
+ddisbvuCallback
+  = lens _ddisbvuCallback
+      (\ s a -> s{_ddisbvuCallback = a})
+
+instance GoogleRequest
+         DebugDatasourcesItemsSearchByViewURL where
+        type Rs DebugDatasourcesItemsSearchByViewURL =
+             SearchItemsByViewURLResponse
+        type Scopes DebugDatasourcesItemsSearchByViewURL =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.debug"]
+        requestClient
+          DebugDatasourcesItemsSearchByViewURL'{..}
+          = go _ddisbvuName _ddisbvuXgafv
+              _ddisbvuUploadProtocol
+              _ddisbvuAccessToken
+              _ddisbvuUploadType
+              _ddisbvuCallback
+              (Just AltJSON)
+              _ddisbvuPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy DebugDatasourcesItemsSearchByViewURLResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/UnmAppedids/List.hs b/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/UnmAppedids/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Debug/Datasources/Items/UnmAppedids/List.hs
@@ -0,0 +1,197 @@
+{-# 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.CloudSearch.Debug.Datasources.Items.UnmAppedids.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)
+--
+-- List all unmapped identities for a specific item.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.debug.datasources.items.unmappedids.list@.
+module Network.Google.Resource.CloudSearch.Debug.Datasources.Items.UnmAppedids.List
+    (
+    -- * REST Resource
+      DebugDatasourcesItemsUnmAppedidsListResource
+
+    -- * Creating a Request
+    , debugDatasourcesItemsUnmAppedidsList
+    , DebugDatasourcesItemsUnmAppedidsList
+
+    -- * Request Lenses
+    , ddiualParent
+    , ddiualXgafv
+    , ddiualUploadProtocol
+    , ddiualAccessToken
+    , ddiualUploadType
+    , ddiualDebugOptionsEnableDebugging
+    , ddiualPageToken
+    , ddiualPageSize
+    , ddiualCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.debug.datasources.items.unmappedids.list@ method which the
+-- 'DebugDatasourcesItemsUnmAppedidsList' request conforms to.
+type DebugDatasourcesItemsUnmAppedidsListResource =
+     "v1" :>
+       "debug" :>
+         Capture "parent" Text :>
+           "unmappedids" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "debugOptions.enableDebugging" Bool :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "pageSize" (Textual Int32) :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               Get '[JSON] ListUnmAppedIdentitiesResponse
+
+-- | List all unmapped identities for a specific item.
+--
+-- /See:/ 'debugDatasourcesItemsUnmAppedidsList' smart constructor.
+data DebugDatasourcesItemsUnmAppedidsList = DebugDatasourcesItemsUnmAppedidsList'
+    { _ddiualParent                      :: !Text
+    , _ddiualXgafv                       :: !(Maybe Xgafv)
+    , _ddiualUploadProtocol              :: !(Maybe Text)
+    , _ddiualAccessToken                 :: !(Maybe Text)
+    , _ddiualUploadType                  :: !(Maybe Text)
+    , _ddiualDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _ddiualPageToken                   :: !(Maybe Text)
+    , _ddiualPageSize                    :: !(Maybe (Textual Int32))
+    , _ddiualCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DebugDatasourcesItemsUnmAppedidsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddiualParent'
+--
+-- * 'ddiualXgafv'
+--
+-- * 'ddiualUploadProtocol'
+--
+-- * 'ddiualAccessToken'
+--
+-- * 'ddiualUploadType'
+--
+-- * 'ddiualDebugOptionsEnableDebugging'
+--
+-- * 'ddiualPageToken'
+--
+-- * 'ddiualPageSize'
+--
+-- * 'ddiualCallback'
+debugDatasourcesItemsUnmAppedidsList
+    :: Text -- ^ 'ddiualParent'
+    -> DebugDatasourcesItemsUnmAppedidsList
+debugDatasourcesItemsUnmAppedidsList pDdiualParent_ =
+    DebugDatasourcesItemsUnmAppedidsList'
+    { _ddiualParent = pDdiualParent_
+    , _ddiualXgafv = Nothing
+    , _ddiualUploadProtocol = Nothing
+    , _ddiualAccessToken = Nothing
+    , _ddiualUploadType = Nothing
+    , _ddiualDebugOptionsEnableDebugging = Nothing
+    , _ddiualPageToken = Nothing
+    , _ddiualPageSize = Nothing
+    , _ddiualCallback = Nothing
+    }
+
+-- | The name of the item, in the following format:
+-- datasources\/{source_id}\/items\/{ID}
+ddiualParent :: Lens' DebugDatasourcesItemsUnmAppedidsList Text
+ddiualParent
+  = lens _ddiualParent (\ s a -> s{_ddiualParent = a})
+
+-- | V1 error format.
+ddiualXgafv :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Xgafv)
+ddiualXgafv
+  = lens _ddiualXgafv (\ s a -> s{_ddiualXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ddiualUploadProtocol :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Text)
+ddiualUploadProtocol
+  = lens _ddiualUploadProtocol
+      (\ s a -> s{_ddiualUploadProtocol = a})
+
+-- | OAuth access token.
+ddiualAccessToken :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Text)
+ddiualAccessToken
+  = lens _ddiualAccessToken
+      (\ s a -> s{_ddiualAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ddiualUploadType :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Text)
+ddiualUploadType
+  = lens _ddiualUploadType
+      (\ s a -> s{_ddiualUploadType = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+ddiualDebugOptionsEnableDebugging :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Bool)
+ddiualDebugOptionsEnableDebugging
+  = lens _ddiualDebugOptionsEnableDebugging
+      (\ s a -> s{_ddiualDebugOptionsEnableDebugging = a})
+
+-- | The next_page_token value returned from a previous List request, if any.
+ddiualPageToken :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Text)
+ddiualPageToken
+  = lens _ddiualPageToken
+      (\ s a -> s{_ddiualPageToken = a})
+
+-- | Maximum number of items to fetch in a request. Defaults to 100.
+ddiualPageSize :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Int32)
+ddiualPageSize
+  = lens _ddiualPageSize
+      (\ s a -> s{_ddiualPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+ddiualCallback :: Lens' DebugDatasourcesItemsUnmAppedidsList (Maybe Text)
+ddiualCallback
+  = lens _ddiualCallback
+      (\ s a -> s{_ddiualCallback = a})
+
+instance GoogleRequest
+         DebugDatasourcesItemsUnmAppedidsList where
+        type Rs DebugDatasourcesItemsUnmAppedidsList =
+             ListUnmAppedIdentitiesResponse
+        type Scopes DebugDatasourcesItemsUnmAppedidsList =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.debug"]
+        requestClient
+          DebugDatasourcesItemsUnmAppedidsList'{..}
+          = go _ddiualParent _ddiualXgafv _ddiualUploadProtocol
+              _ddiualAccessToken
+              _ddiualUploadType
+              _ddiualDebugOptionsEnableDebugging
+              _ddiualPageToken
+              _ddiualPageSize
+              _ddiualCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy DebugDatasourcesItemsUnmAppedidsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Debug/Identitysources/Items/ListForunmAppedidentity.hs b/gen/Network/Google/Resource/CloudSearch/Debug/Identitysources/Items/ListForunmAppedidentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Debug/Identitysources/Items/ListForunmAppedidentity.hs
@@ -0,0 +1,229 @@
+{-# 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.CloudSearch.Debug.Identitysources.Items.ListForunmAppedidentity
+-- 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 names of items associated with an unmapped identity.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.debug.identitysources.items.listForunmappedidentity@.
+module Network.Google.Resource.CloudSearch.Debug.Identitysources.Items.ListForunmAppedidentity
+    (
+    -- * REST Resource
+      DebugIdentitysourcesItemsListForunmAppedidentityResource
+
+    -- * Creating a Request
+    , debugIdentitysourcesItemsListForunmAppedidentity
+    , DebugIdentitysourcesItemsListForunmAppedidentity
+
+    -- * Request Lenses
+    , diilfaUserResourceName
+    , diilfaParent
+    , diilfaXgafv
+    , diilfaUploadProtocol
+    , diilfaGroupResourceName
+    , diilfaAccessToken
+    , diilfaUploadType
+    , diilfaDebugOptionsEnableDebugging
+    , diilfaPageToken
+    , diilfaPageSize
+    , diilfaCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.debug.identitysources.items.listForunmappedidentity@ method which the
+-- 'DebugIdentitysourcesItemsListForunmAppedidentity' request conforms to.
+type DebugIdentitysourcesItemsListForunmAppedidentityResource
+     =
+     "v1" :>
+       "debug" :>
+         Capture "parent" Text :>
+           "items:forunmappedidentity" :>
+             QueryParam "userResourceName" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "groupResourceName" Text :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "debugOptions.enableDebugging" Bool :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "pageSize" (Textual Int32) :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON]
+                                     ListItemNamesForUnmAppedIdentityResponse
+
+-- | Lists names of items associated with an unmapped identity.
+--
+-- /See:/ 'debugIdentitysourcesItemsListForunmAppedidentity' smart constructor.
+data DebugIdentitysourcesItemsListForunmAppedidentity = DebugIdentitysourcesItemsListForunmAppedidentity'
+    { _diilfaUserResourceName            :: !(Maybe Text)
+    , _diilfaParent                      :: !Text
+    , _diilfaXgafv                       :: !(Maybe Xgafv)
+    , _diilfaUploadProtocol              :: !(Maybe Text)
+    , _diilfaGroupResourceName           :: !(Maybe Text)
+    , _diilfaAccessToken                 :: !(Maybe Text)
+    , _diilfaUploadType                  :: !(Maybe Text)
+    , _diilfaDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _diilfaPageToken                   :: !(Maybe Text)
+    , _diilfaPageSize                    :: !(Maybe (Textual Int32))
+    , _diilfaCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DebugIdentitysourcesItemsListForunmAppedidentity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diilfaUserResourceName'
+--
+-- * 'diilfaParent'
+--
+-- * 'diilfaXgafv'
+--
+-- * 'diilfaUploadProtocol'
+--
+-- * 'diilfaGroupResourceName'
+--
+-- * 'diilfaAccessToken'
+--
+-- * 'diilfaUploadType'
+--
+-- * 'diilfaDebugOptionsEnableDebugging'
+--
+-- * 'diilfaPageToken'
+--
+-- * 'diilfaPageSize'
+--
+-- * 'diilfaCallback'
+debugIdentitysourcesItemsListForunmAppedidentity
+    :: Text -- ^ 'diilfaParent'
+    -> DebugIdentitysourcesItemsListForunmAppedidentity
+debugIdentitysourcesItemsListForunmAppedidentity pDiilfaParent_ =
+    DebugIdentitysourcesItemsListForunmAppedidentity'
+    { _diilfaUserResourceName = Nothing
+    , _diilfaParent = pDiilfaParent_
+    , _diilfaXgafv = Nothing
+    , _diilfaUploadProtocol = Nothing
+    , _diilfaGroupResourceName = Nothing
+    , _diilfaAccessToken = Nothing
+    , _diilfaUploadType = Nothing
+    , _diilfaDebugOptionsEnableDebugging = Nothing
+    , _diilfaPageToken = Nothing
+    , _diilfaPageSize = Nothing
+    , _diilfaCallback = Nothing
+    }
+
+diilfaUserResourceName :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaUserResourceName
+  = lens _diilfaUserResourceName
+      (\ s a -> s{_diilfaUserResourceName = a})
+
+-- | The name of the identity source, in the following format:
+-- identitysources\/{source_id}}
+diilfaParent :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity Text
+diilfaParent
+  = lens _diilfaParent (\ s a -> s{_diilfaParent = a})
+
+-- | V1 error format.
+diilfaXgafv :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Xgafv)
+diilfaXgafv
+  = lens _diilfaXgafv (\ s a -> s{_diilfaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+diilfaUploadProtocol :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaUploadProtocol
+  = lens _diilfaUploadProtocol
+      (\ s a -> s{_diilfaUploadProtocol = a})
+
+diilfaGroupResourceName :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaGroupResourceName
+  = lens _diilfaGroupResourceName
+      (\ s a -> s{_diilfaGroupResourceName = a})
+
+-- | OAuth access token.
+diilfaAccessToken :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaAccessToken
+  = lens _diilfaAccessToken
+      (\ s a -> s{_diilfaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+diilfaUploadType :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaUploadType
+  = lens _diilfaUploadType
+      (\ s a -> s{_diilfaUploadType = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+diilfaDebugOptionsEnableDebugging :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Bool)
+diilfaDebugOptionsEnableDebugging
+  = lens _diilfaDebugOptionsEnableDebugging
+      (\ s a -> s{_diilfaDebugOptionsEnableDebugging = a})
+
+-- | The next_page_token value returned from a previous List request, if any.
+diilfaPageToken :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaPageToken
+  = lens _diilfaPageToken
+      (\ s a -> s{_diilfaPageToken = a})
+
+-- | Maximum number of items to fetch in a request. Defaults to 100.
+diilfaPageSize :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Int32)
+diilfaPageSize
+  = lens _diilfaPageSize
+      (\ s a -> s{_diilfaPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+diilfaCallback :: Lens' DebugIdentitysourcesItemsListForunmAppedidentity (Maybe Text)
+diilfaCallback
+  = lens _diilfaCallback
+      (\ s a -> s{_diilfaCallback = a})
+
+instance GoogleRequest
+         DebugIdentitysourcesItemsListForunmAppedidentity
+         where
+        type Rs
+               DebugIdentitysourcesItemsListForunmAppedidentity
+             = ListItemNamesForUnmAppedIdentityResponse
+        type Scopes
+               DebugIdentitysourcesItemsListForunmAppedidentity
+             =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.debug"]
+        requestClient
+          DebugIdentitysourcesItemsListForunmAppedidentity'{..}
+          = go _diilfaParent _diilfaUserResourceName
+              _diilfaXgafv
+              _diilfaUploadProtocol
+              _diilfaGroupResourceName
+              _diilfaAccessToken
+              _diilfaUploadType
+              _diilfaDebugOptionsEnableDebugging
+              _diilfaPageToken
+              _diilfaPageSize
+              _diilfaCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           DebugIdentitysourcesItemsListForunmAppedidentityResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Debug/Identitysources/UnmAppedids/List.hs b/gen/Network/Google/Resource/CloudSearch/Debug/Identitysources/UnmAppedids/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Debug/Identitysources/UnmAppedids/List.hs
@@ -0,0 +1,211 @@
+{-# 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.CloudSearch.Debug.Identitysources.UnmAppedids.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 unmapped user identities for an identity source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.debug.identitysources.unmappedids.list@.
+module Network.Google.Resource.CloudSearch.Debug.Identitysources.UnmAppedids.List
+    (
+    -- * REST Resource
+      DebugIdentitysourcesUnmAppedidsListResource
+
+    -- * Creating a Request
+    , debugIdentitysourcesUnmAppedidsList
+    , DebugIdentitysourcesUnmAppedidsList
+
+    -- * Request Lenses
+    , diualParent
+    , diualXgafv
+    , diualResolutionStatusCode
+    , diualUploadProtocol
+    , diualAccessToken
+    , diualUploadType
+    , diualDebugOptionsEnableDebugging
+    , diualPageToken
+    , diualPageSize
+    , diualCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.debug.identitysources.unmappedids.list@ method which the
+-- 'DebugIdentitysourcesUnmAppedidsList' request conforms to.
+type DebugIdentitysourcesUnmAppedidsListResource =
+     "v1" :>
+       "debug" :>
+         Capture "parent" Text :>
+           "unmappedids" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "resolutionStatusCode" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "debugOptions.enableDebugging" Bool :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListUnmAppedIdentitiesResponse
+
+-- | Lists unmapped user identities for an identity source.
+--
+-- /See:/ 'debugIdentitysourcesUnmAppedidsList' smart constructor.
+data DebugIdentitysourcesUnmAppedidsList = DebugIdentitysourcesUnmAppedidsList'
+    { _diualParent                      :: !Text
+    , _diualXgafv                       :: !(Maybe Xgafv)
+    , _diualResolutionStatusCode        :: !(Maybe Text)
+    , _diualUploadProtocol              :: !(Maybe Text)
+    , _diualAccessToken                 :: !(Maybe Text)
+    , _diualUploadType                  :: !(Maybe Text)
+    , _diualDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _diualPageToken                   :: !(Maybe Text)
+    , _diualPageSize                    :: !(Maybe (Textual Int32))
+    , _diualCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DebugIdentitysourcesUnmAppedidsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diualParent'
+--
+-- * 'diualXgafv'
+--
+-- * 'diualResolutionStatusCode'
+--
+-- * 'diualUploadProtocol'
+--
+-- * 'diualAccessToken'
+--
+-- * 'diualUploadType'
+--
+-- * 'diualDebugOptionsEnableDebugging'
+--
+-- * 'diualPageToken'
+--
+-- * 'diualPageSize'
+--
+-- * 'diualCallback'
+debugIdentitysourcesUnmAppedidsList
+    :: Text -- ^ 'diualParent'
+    -> DebugIdentitysourcesUnmAppedidsList
+debugIdentitysourcesUnmAppedidsList pDiualParent_ =
+    DebugIdentitysourcesUnmAppedidsList'
+    { _diualParent = pDiualParent_
+    , _diualXgafv = Nothing
+    , _diualResolutionStatusCode = Nothing
+    , _diualUploadProtocol = Nothing
+    , _diualAccessToken = Nothing
+    , _diualUploadType = Nothing
+    , _diualDebugOptionsEnableDebugging = Nothing
+    , _diualPageToken = Nothing
+    , _diualPageSize = Nothing
+    , _diualCallback = Nothing
+    }
+
+-- | The name of the identity source, in the following format:
+-- identitysources\/{source_id}
+diualParent :: Lens' DebugIdentitysourcesUnmAppedidsList Text
+diualParent
+  = lens _diualParent (\ s a -> s{_diualParent = a})
+
+-- | V1 error format.
+diualXgafv :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Xgafv)
+diualXgafv
+  = lens _diualXgafv (\ s a -> s{_diualXgafv = a})
+
+-- | Limit users selection to this status.
+diualResolutionStatusCode :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Text)
+diualResolutionStatusCode
+  = lens _diualResolutionStatusCode
+      (\ s a -> s{_diualResolutionStatusCode = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+diualUploadProtocol :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Text)
+diualUploadProtocol
+  = lens _diualUploadProtocol
+      (\ s a -> s{_diualUploadProtocol = a})
+
+-- | OAuth access token.
+diualAccessToken :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Text)
+diualAccessToken
+  = lens _diualAccessToken
+      (\ s a -> s{_diualAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+diualUploadType :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Text)
+diualUploadType
+  = lens _diualUploadType
+      (\ s a -> s{_diualUploadType = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+diualDebugOptionsEnableDebugging :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Bool)
+diualDebugOptionsEnableDebugging
+  = lens _diualDebugOptionsEnableDebugging
+      (\ s a -> s{_diualDebugOptionsEnableDebugging = a})
+
+-- | The next_page_token value returned from a previous List request, if any.
+diualPageToken :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Text)
+diualPageToken
+  = lens _diualPageToken
+      (\ s a -> s{_diualPageToken = a})
+
+-- | Maximum number of items to fetch in a request. Defaults to 100.
+diualPageSize :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Int32)
+diualPageSize
+  = lens _diualPageSize
+      (\ s a -> s{_diualPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+diualCallback :: Lens' DebugIdentitysourcesUnmAppedidsList (Maybe Text)
+diualCallback
+  = lens _diualCallback
+      (\ s a -> s{_diualCallback = a})
+
+instance GoogleRequest
+         DebugIdentitysourcesUnmAppedidsList where
+        type Rs DebugIdentitysourcesUnmAppedidsList =
+             ListUnmAppedIdentitiesResponse
+        type Scopes DebugIdentitysourcesUnmAppedidsList =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.debug"]
+        requestClient
+          DebugIdentitysourcesUnmAppedidsList'{..}
+          = go _diualParent _diualXgafv
+              _diualResolutionStatusCode
+              _diualUploadProtocol
+              _diualAccessToken
+              _diualUploadType
+              _diualDebugOptionsEnableDebugging
+              _diualPageToken
+              _diualPageSize
+              _diualCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy DebugIdentitysourcesUnmAppedidsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/DeleteSchema.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/DeleteSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/DeleteSchema.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.CloudSearch.Indexing.Datasources.DeleteSchema
+-- 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 the schema of a data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.deleteSchema@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.DeleteSchema
+    (
+    -- * REST Resource
+      IndexingDatasourcesDeleteSchemaResource
+
+    -- * Creating a Request
+    , indexingDatasourcesDeleteSchema
+    , IndexingDatasourcesDeleteSchema
+
+    -- * Request Lenses
+    , iddsXgafv
+    , iddsUploadProtocol
+    , iddsAccessToken
+    , iddsUploadType
+    , iddsName
+    , iddsDebugOptionsEnableDebugging
+    , iddsCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.deleteSchema@ method which the
+-- 'IndexingDatasourcesDeleteSchema' request conforms to.
+type IndexingDatasourcesDeleteSchemaResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "schema" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "debugOptions.enableDebugging" Bool :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Operation
+
+-- | Deletes the schema of a data source.
+--
+-- /See:/ 'indexingDatasourcesDeleteSchema' smart constructor.
+data IndexingDatasourcesDeleteSchema = IndexingDatasourcesDeleteSchema'
+    { _iddsXgafv                       :: !(Maybe Xgafv)
+    , _iddsUploadProtocol              :: !(Maybe Text)
+    , _iddsAccessToken                 :: !(Maybe Text)
+    , _iddsUploadType                  :: !(Maybe Text)
+    , _iddsName                        :: !Text
+    , _iddsDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _iddsCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesDeleteSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iddsXgafv'
+--
+-- * 'iddsUploadProtocol'
+--
+-- * 'iddsAccessToken'
+--
+-- * 'iddsUploadType'
+--
+-- * 'iddsName'
+--
+-- * 'iddsDebugOptionsEnableDebugging'
+--
+-- * 'iddsCallback'
+indexingDatasourcesDeleteSchema
+    :: Text -- ^ 'iddsName'
+    -> IndexingDatasourcesDeleteSchema
+indexingDatasourcesDeleteSchema pIddsName_ =
+    IndexingDatasourcesDeleteSchema'
+    { _iddsXgafv = Nothing
+    , _iddsUploadProtocol = Nothing
+    , _iddsAccessToken = Nothing
+    , _iddsUploadType = Nothing
+    , _iddsName = pIddsName_
+    , _iddsDebugOptionsEnableDebugging = Nothing
+    , _iddsCallback = Nothing
+    }
+
+-- | V1 error format.
+iddsXgafv :: Lens' IndexingDatasourcesDeleteSchema (Maybe Xgafv)
+iddsXgafv
+  = lens _iddsXgafv (\ s a -> s{_iddsXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+iddsUploadProtocol :: Lens' IndexingDatasourcesDeleteSchema (Maybe Text)
+iddsUploadProtocol
+  = lens _iddsUploadProtocol
+      (\ s a -> s{_iddsUploadProtocol = a})
+
+-- | OAuth access token.
+iddsAccessToken :: Lens' IndexingDatasourcesDeleteSchema (Maybe Text)
+iddsAccessToken
+  = lens _iddsAccessToken
+      (\ s a -> s{_iddsAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+iddsUploadType :: Lens' IndexingDatasourcesDeleteSchema (Maybe Text)
+iddsUploadType
+  = lens _iddsUploadType
+      (\ s a -> s{_iddsUploadType = a})
+
+-- | Name of the data source to delete Schema. Format:
+-- datasources\/{source_id}
+iddsName :: Lens' IndexingDatasourcesDeleteSchema Text
+iddsName = lens _iddsName (\ s a -> s{_iddsName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+iddsDebugOptionsEnableDebugging :: Lens' IndexingDatasourcesDeleteSchema (Maybe Bool)
+iddsDebugOptionsEnableDebugging
+  = lens _iddsDebugOptionsEnableDebugging
+      (\ s a -> s{_iddsDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+iddsCallback :: Lens' IndexingDatasourcesDeleteSchema (Maybe Text)
+iddsCallback
+  = lens _iddsCallback (\ s a -> s{_iddsCallback = a})
+
+instance GoogleRequest
+         IndexingDatasourcesDeleteSchema where
+        type Rs IndexingDatasourcesDeleteSchema = Operation
+        type Scopes IndexingDatasourcesDeleteSchema =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient IndexingDatasourcesDeleteSchema'{..}
+          = go _iddsName _iddsXgafv _iddsUploadProtocol
+              _iddsAccessToken
+              _iddsUploadType
+              _iddsDebugOptionsEnableDebugging
+              _iddsCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy IndexingDatasourcesDeleteSchemaResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/GetSchema.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/GetSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/GetSchema.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.CloudSearch.Indexing.Datasources.GetSchema
+-- 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 schema of a data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.getSchema@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.GetSchema
+    (
+    -- * REST Resource
+      IndexingDatasourcesGetSchemaResource
+
+    -- * Creating a Request
+    , indexingDatasourcesGetSchema
+    , IndexingDatasourcesGetSchema
+
+    -- * Request Lenses
+    , idgsXgafv
+    , idgsUploadProtocol
+    , idgsAccessToken
+    , idgsUploadType
+    , idgsName
+    , idgsDebugOptionsEnableDebugging
+    , idgsCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.getSchema@ method which the
+-- 'IndexingDatasourcesGetSchema' request conforms to.
+type IndexingDatasourcesGetSchemaResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "schema" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "debugOptions.enableDebugging" Bool :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Schema
+
+-- | Gets the schema of a data source.
+--
+-- /See:/ 'indexingDatasourcesGetSchema' smart constructor.
+data IndexingDatasourcesGetSchema = IndexingDatasourcesGetSchema'
+    { _idgsXgafv                       :: !(Maybe Xgafv)
+    , _idgsUploadProtocol              :: !(Maybe Text)
+    , _idgsAccessToken                 :: !(Maybe Text)
+    , _idgsUploadType                  :: !(Maybe Text)
+    , _idgsName                        :: !Text
+    , _idgsDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _idgsCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesGetSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idgsXgafv'
+--
+-- * 'idgsUploadProtocol'
+--
+-- * 'idgsAccessToken'
+--
+-- * 'idgsUploadType'
+--
+-- * 'idgsName'
+--
+-- * 'idgsDebugOptionsEnableDebugging'
+--
+-- * 'idgsCallback'
+indexingDatasourcesGetSchema
+    :: Text -- ^ 'idgsName'
+    -> IndexingDatasourcesGetSchema
+indexingDatasourcesGetSchema pIdgsName_ =
+    IndexingDatasourcesGetSchema'
+    { _idgsXgafv = Nothing
+    , _idgsUploadProtocol = Nothing
+    , _idgsAccessToken = Nothing
+    , _idgsUploadType = Nothing
+    , _idgsName = pIdgsName_
+    , _idgsDebugOptionsEnableDebugging = Nothing
+    , _idgsCallback = Nothing
+    }
+
+-- | V1 error format.
+idgsXgafv :: Lens' IndexingDatasourcesGetSchema (Maybe Xgafv)
+idgsXgafv
+  = lens _idgsXgafv (\ s a -> s{_idgsXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idgsUploadProtocol :: Lens' IndexingDatasourcesGetSchema (Maybe Text)
+idgsUploadProtocol
+  = lens _idgsUploadProtocol
+      (\ s a -> s{_idgsUploadProtocol = a})
+
+-- | OAuth access token.
+idgsAccessToken :: Lens' IndexingDatasourcesGetSchema (Maybe Text)
+idgsAccessToken
+  = lens _idgsAccessToken
+      (\ s a -> s{_idgsAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idgsUploadType :: Lens' IndexingDatasourcesGetSchema (Maybe Text)
+idgsUploadType
+  = lens _idgsUploadType
+      (\ s a -> s{_idgsUploadType = a})
+
+-- | Name of the data source to get Schema. Format: datasources\/{source_id}
+idgsName :: Lens' IndexingDatasourcesGetSchema Text
+idgsName = lens _idgsName (\ s a -> s{_idgsName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+idgsDebugOptionsEnableDebugging :: Lens' IndexingDatasourcesGetSchema (Maybe Bool)
+idgsDebugOptionsEnableDebugging
+  = lens _idgsDebugOptionsEnableDebugging
+      (\ s a -> s{_idgsDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+idgsCallback :: Lens' IndexingDatasourcesGetSchema (Maybe Text)
+idgsCallback
+  = lens _idgsCallback (\ s a -> s{_idgsCallback = a})
+
+instance GoogleRequest IndexingDatasourcesGetSchema
+         where
+        type Rs IndexingDatasourcesGetSchema = Schema
+        type Scopes IndexingDatasourcesGetSchema =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient IndexingDatasourcesGetSchema'{..}
+          = go _idgsName _idgsXgafv _idgsUploadProtocol
+              _idgsAccessToken
+              _idgsUploadType
+              _idgsDebugOptionsEnableDebugging
+              _idgsCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy IndexingDatasourcesGetSchemaResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Delete.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Delete.hs
@@ -0,0 +1,209 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.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 Item resource for the specified resource name.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.delete@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Delete
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsDeleteResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsDelete
+    , IndexingDatasourcesItemsDelete
+
+    -- * Request Lenses
+    , ididXgafv
+    , ididUploadProtocol
+    , ididAccessToken
+    , ididMode
+    , ididUploadType
+    , ididConnectorName
+    , ididName
+    , ididVersion
+    , ididDebugOptionsEnableDebugging
+    , ididCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.delete@ method which the
+-- 'IndexingDatasourcesItemsDelete' request conforms to.
+type IndexingDatasourcesItemsDeleteResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "mode" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "connectorName" Text :>
+                       QueryParam "version" Bytes :>
+                         QueryParam "debugOptions.enableDebugging" Bool :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               Delete '[JSON] Operation
+
+-- | Deletes Item resource for the specified resource name.
+--
+-- /See:/ 'indexingDatasourcesItemsDelete' smart constructor.
+data IndexingDatasourcesItemsDelete = IndexingDatasourcesItemsDelete'
+    { _ididXgafv                       :: !(Maybe Xgafv)
+    , _ididUploadProtocol              :: !(Maybe Text)
+    , _ididAccessToken                 :: !(Maybe Text)
+    , _ididMode                        :: !(Maybe Text)
+    , _ididUploadType                  :: !(Maybe Text)
+    , _ididConnectorName               :: !(Maybe Text)
+    , _ididName                        :: !Text
+    , _ididVersion                     :: !(Maybe Bytes)
+    , _ididDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _ididCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ididXgafv'
+--
+-- * 'ididUploadProtocol'
+--
+-- * 'ididAccessToken'
+--
+-- * 'ididMode'
+--
+-- * 'ididUploadType'
+--
+-- * 'ididConnectorName'
+--
+-- * 'ididName'
+--
+-- * 'ididVersion'
+--
+-- * 'ididDebugOptionsEnableDebugging'
+--
+-- * 'ididCallback'
+indexingDatasourcesItemsDelete
+    :: Text -- ^ 'ididName'
+    -> IndexingDatasourcesItemsDelete
+indexingDatasourcesItemsDelete pIdidName_ =
+    IndexingDatasourcesItemsDelete'
+    { _ididXgafv = Nothing
+    , _ididUploadProtocol = Nothing
+    , _ididAccessToken = Nothing
+    , _ididMode = Nothing
+    , _ididUploadType = Nothing
+    , _ididConnectorName = Nothing
+    , _ididName = pIdidName_
+    , _ididVersion = Nothing
+    , _ididDebugOptionsEnableDebugging = Nothing
+    , _ididCallback = Nothing
+    }
+
+-- | V1 error format.
+ididXgafv :: Lens' IndexingDatasourcesItemsDelete (Maybe Xgafv)
+ididXgafv
+  = lens _ididXgafv (\ s a -> s{_ididXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ididUploadProtocol :: Lens' IndexingDatasourcesItemsDelete (Maybe Text)
+ididUploadProtocol
+  = lens _ididUploadProtocol
+      (\ s a -> s{_ididUploadProtocol = a})
+
+-- | OAuth access token.
+ididAccessToken :: Lens' IndexingDatasourcesItemsDelete (Maybe Text)
+ididAccessToken
+  = lens _ididAccessToken
+      (\ s a -> s{_ididAccessToken = a})
+
+-- | Required. The RequestMode for this request.
+ididMode :: Lens' IndexingDatasourcesItemsDelete (Maybe Text)
+ididMode = lens _ididMode (\ s a -> s{_ididMode = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ididUploadType :: Lens' IndexingDatasourcesItemsDelete (Maybe Text)
+ididUploadType
+  = lens _ididUploadType
+      (\ s a -> s{_ididUploadType = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+ididConnectorName :: Lens' IndexingDatasourcesItemsDelete (Maybe Text)
+ididConnectorName
+  = lens _ididConnectorName
+      (\ s a -> s{_ididConnectorName = a})
+
+-- | Required. Name of the item to delete. Format:
+-- datasources\/{source_id}\/items\/{item_id}
+ididName :: Lens' IndexingDatasourcesItemsDelete Text
+ididName = lens _ididName (\ s a -> s{_ididName = a})
+
+-- | Required. The incremented version of the item to delete from the index.
+-- The indexing system stores the version from the datasource as a byte
+-- string and compares the Item version in the index to the version of the
+-- queued Item using lexical ordering.
+-- Cloud Search Indexing won\'t delete any queued item with a version value
+-- that is less than or equal to the version of the currently indexed item.
+-- The maximum length for this field is 1024 bytes.
+ididVersion :: Lens' IndexingDatasourcesItemsDelete (Maybe ByteString)
+ididVersion
+  = lens _ididVersion (\ s a -> s{_ididVersion = a}) .
+      mapping _Bytes
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+ididDebugOptionsEnableDebugging :: Lens' IndexingDatasourcesItemsDelete (Maybe Bool)
+ididDebugOptionsEnableDebugging
+  = lens _ididDebugOptionsEnableDebugging
+      (\ s a -> s{_ididDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+ididCallback :: Lens' IndexingDatasourcesItemsDelete (Maybe Text)
+ididCallback
+  = lens _ididCallback (\ s a -> s{_ididCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsDelete
+         where
+        type Rs IndexingDatasourcesItemsDelete = Operation
+        type Scopes IndexingDatasourcesItemsDelete =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsDelete'{..}
+          = go _ididName _ididXgafv _ididUploadProtocol
+              _ididAccessToken
+              _ididMode
+              _ididUploadType
+              _ididConnectorName
+              _ididVersion
+              _ididDebugOptionsEnableDebugging
+              _ididCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy IndexingDatasourcesItemsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/DeleteQueueItems.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/DeleteQueueItems.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/DeleteQueueItems.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.CloudSearch.Indexing.Datasources.Items.DeleteQueueItems
+-- 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 all items in a queue. This method is useful for deleting stale
+-- items.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.deleteQueueItems@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.DeleteQueueItems
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsDeleteQueueItemsResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsDeleteQueueItems
+    , IndexingDatasourcesItemsDeleteQueueItems
+
+    -- * Request Lenses
+    , ididqiXgafv
+    , ididqiUploadProtocol
+    , ididqiAccessToken
+    , ididqiUploadType
+    , ididqiPayload
+    , ididqiName
+    , ididqiCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.deleteQueueItems@ method which the
+-- 'IndexingDatasourcesItemsDeleteQueueItems' request conforms to.
+type IndexingDatasourcesItemsDeleteQueueItemsResource
+     =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "items:deleteQueueItems" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] DeleteQueueItemsRequest :>
+                           Post '[JSON] Operation
+
+-- | Deletes all items in a queue. This method is useful for deleting stale
+-- items.
+--
+-- /See:/ 'indexingDatasourcesItemsDeleteQueueItems' smart constructor.
+data IndexingDatasourcesItemsDeleteQueueItems = IndexingDatasourcesItemsDeleteQueueItems'
+    { _ididqiXgafv          :: !(Maybe Xgafv)
+    , _ididqiUploadProtocol :: !(Maybe Text)
+    , _ididqiAccessToken    :: !(Maybe Text)
+    , _ididqiUploadType     :: !(Maybe Text)
+    , _ididqiPayload        :: !DeleteQueueItemsRequest
+    , _ididqiName           :: !Text
+    , _ididqiCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsDeleteQueueItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ididqiXgafv'
+--
+-- * 'ididqiUploadProtocol'
+--
+-- * 'ididqiAccessToken'
+--
+-- * 'ididqiUploadType'
+--
+-- * 'ididqiPayload'
+--
+-- * 'ididqiName'
+--
+-- * 'ididqiCallback'
+indexingDatasourcesItemsDeleteQueueItems
+    :: DeleteQueueItemsRequest -- ^ 'ididqiPayload'
+    -> Text -- ^ 'ididqiName'
+    -> IndexingDatasourcesItemsDeleteQueueItems
+indexingDatasourcesItemsDeleteQueueItems pIdidqiPayload_ pIdidqiName_ =
+    IndexingDatasourcesItemsDeleteQueueItems'
+    { _ididqiXgafv = Nothing
+    , _ididqiUploadProtocol = Nothing
+    , _ididqiAccessToken = Nothing
+    , _ididqiUploadType = Nothing
+    , _ididqiPayload = pIdidqiPayload_
+    , _ididqiName = pIdidqiName_
+    , _ididqiCallback = Nothing
+    }
+
+-- | V1 error format.
+ididqiXgafv :: Lens' IndexingDatasourcesItemsDeleteQueueItems (Maybe Xgafv)
+ididqiXgafv
+  = lens _ididqiXgafv (\ s a -> s{_ididqiXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ididqiUploadProtocol :: Lens' IndexingDatasourcesItemsDeleteQueueItems (Maybe Text)
+ididqiUploadProtocol
+  = lens _ididqiUploadProtocol
+      (\ s a -> s{_ididqiUploadProtocol = a})
+
+-- | OAuth access token.
+ididqiAccessToken :: Lens' IndexingDatasourcesItemsDeleteQueueItems (Maybe Text)
+ididqiAccessToken
+  = lens _ididqiAccessToken
+      (\ s a -> s{_ididqiAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ididqiUploadType :: Lens' IndexingDatasourcesItemsDeleteQueueItems (Maybe Text)
+ididqiUploadType
+  = lens _ididqiUploadType
+      (\ s a -> s{_ididqiUploadType = a})
+
+-- | Multipart request metadata.
+ididqiPayload :: Lens' IndexingDatasourcesItemsDeleteQueueItems DeleteQueueItemsRequest
+ididqiPayload
+  = lens _ididqiPayload
+      (\ s a -> s{_ididqiPayload = a})
+
+-- | Name of the Data Source to delete items in a queue. Format:
+-- datasources\/{source_id}
+ididqiName :: Lens' IndexingDatasourcesItemsDeleteQueueItems Text
+ididqiName
+  = lens _ididqiName (\ s a -> s{_ididqiName = a})
+
+-- | JSONP
+ididqiCallback :: Lens' IndexingDatasourcesItemsDeleteQueueItems (Maybe Text)
+ididqiCallback
+  = lens _ididqiCallback
+      (\ s a -> s{_ididqiCallback = a})
+
+instance GoogleRequest
+         IndexingDatasourcesItemsDeleteQueueItems where
+        type Rs IndexingDatasourcesItemsDeleteQueueItems =
+             Operation
+        type Scopes IndexingDatasourcesItemsDeleteQueueItems
+             =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient
+          IndexingDatasourcesItemsDeleteQueueItems'{..}
+          = go _ididqiName _ididqiXgafv _ididqiUploadProtocol
+              _ididqiAccessToken
+              _ididqiUploadType
+              _ididqiCallback
+              (Just AltJSON)
+              _ididqiPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           IndexingDatasourcesItemsDeleteQueueItemsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Get.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Get.hs
@@ -0,0 +1,177 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.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 Item resource by item name.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.get@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Get
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsGetResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsGet
+    , IndexingDatasourcesItemsGet
+
+    -- * Request Lenses
+    , idigXgafv
+    , idigUploadProtocol
+    , idigAccessToken
+    , idigUploadType
+    , idigConnectorName
+    , idigName
+    , idigDebugOptionsEnableDebugging
+    , idigCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.get@ method which the
+-- 'IndexingDatasourcesItemsGet' request conforms to.
+type IndexingDatasourcesItemsGetResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "connectorName" Text :>
+                     QueryParam "debugOptions.enableDebugging" Bool :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Item
+
+-- | Gets Item resource by item name.
+--
+-- /See:/ 'indexingDatasourcesItemsGet' smart constructor.
+data IndexingDatasourcesItemsGet = IndexingDatasourcesItemsGet'
+    { _idigXgafv                       :: !(Maybe Xgafv)
+    , _idigUploadProtocol              :: !(Maybe Text)
+    , _idigAccessToken                 :: !(Maybe Text)
+    , _idigUploadType                  :: !(Maybe Text)
+    , _idigConnectorName               :: !(Maybe Text)
+    , _idigName                        :: !Text
+    , _idigDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _idigCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idigXgafv'
+--
+-- * 'idigUploadProtocol'
+--
+-- * 'idigAccessToken'
+--
+-- * 'idigUploadType'
+--
+-- * 'idigConnectorName'
+--
+-- * 'idigName'
+--
+-- * 'idigDebugOptionsEnableDebugging'
+--
+-- * 'idigCallback'
+indexingDatasourcesItemsGet
+    :: Text -- ^ 'idigName'
+    -> IndexingDatasourcesItemsGet
+indexingDatasourcesItemsGet pIdigName_ =
+    IndexingDatasourcesItemsGet'
+    { _idigXgafv = Nothing
+    , _idigUploadProtocol = Nothing
+    , _idigAccessToken = Nothing
+    , _idigUploadType = Nothing
+    , _idigConnectorName = Nothing
+    , _idigName = pIdigName_
+    , _idigDebugOptionsEnableDebugging = Nothing
+    , _idigCallback = Nothing
+    }
+
+-- | V1 error format.
+idigXgafv :: Lens' IndexingDatasourcesItemsGet (Maybe Xgafv)
+idigXgafv
+  = lens _idigXgafv (\ s a -> s{_idigXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idigUploadProtocol :: Lens' IndexingDatasourcesItemsGet (Maybe Text)
+idigUploadProtocol
+  = lens _idigUploadProtocol
+      (\ s a -> s{_idigUploadProtocol = a})
+
+-- | OAuth access token.
+idigAccessToken :: Lens' IndexingDatasourcesItemsGet (Maybe Text)
+idigAccessToken
+  = lens _idigAccessToken
+      (\ s a -> s{_idigAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idigUploadType :: Lens' IndexingDatasourcesItemsGet (Maybe Text)
+idigUploadType
+  = lens _idigUploadType
+      (\ s a -> s{_idigUploadType = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+idigConnectorName :: Lens' IndexingDatasourcesItemsGet (Maybe Text)
+idigConnectorName
+  = lens _idigConnectorName
+      (\ s a -> s{_idigConnectorName = a})
+
+-- | Name of the item to get info. Format:
+-- datasources\/{source_id}\/items\/{item_id}
+idigName :: Lens' IndexingDatasourcesItemsGet Text
+idigName = lens _idigName (\ s a -> s{_idigName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+idigDebugOptionsEnableDebugging :: Lens' IndexingDatasourcesItemsGet (Maybe Bool)
+idigDebugOptionsEnableDebugging
+  = lens _idigDebugOptionsEnableDebugging
+      (\ s a -> s{_idigDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+idigCallback :: Lens' IndexingDatasourcesItemsGet (Maybe Text)
+idigCallback
+  = lens _idigCallback (\ s a -> s{_idigCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsGet
+         where
+        type Rs IndexingDatasourcesItemsGet = Item
+        type Scopes IndexingDatasourcesItemsGet =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsGet'{..}
+          = go _idigName _idigXgafv _idigUploadProtocol
+              _idigAccessToken
+              _idigUploadType
+              _idigConnectorName
+              _idigDebugOptionsEnableDebugging
+              _idigCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy IndexingDatasourcesItemsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Index.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Index.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Index.hs
@@ -0,0 +1,168 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.Index
+-- 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 Item ACL, metadata, and content. It will insert the Item if it
+-- does not exist. This method does not support partial updates. Fields
+-- with no provided values are cleared out in the Cloud Search index.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.index@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Index
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsIndexResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsIndex
+    , IndexingDatasourcesItemsIndex
+
+    -- * Request Lenses
+    , idiiXgafv
+    , idiiUploadProtocol
+    , idiiAccessToken
+    , idiiUploadType
+    , idiiPayload
+    , idiiName
+    , idiiCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.index@ method which the
+-- 'IndexingDatasourcesItemsIndex' request conforms to.
+type IndexingDatasourcesItemsIndexResource =
+     "v1" :>
+       "indexing" :>
+         CaptureMode "name" "index" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] IndexItemRequest :>
+                         Post '[JSON] Operation
+
+-- | Updates Item ACL, metadata, and content. It will insert the Item if it
+-- does not exist. This method does not support partial updates. Fields
+-- with no provided values are cleared out in the Cloud Search index.
+--
+-- /See:/ 'indexingDatasourcesItemsIndex' smart constructor.
+data IndexingDatasourcesItemsIndex = IndexingDatasourcesItemsIndex'
+    { _idiiXgafv          :: !(Maybe Xgafv)
+    , _idiiUploadProtocol :: !(Maybe Text)
+    , _idiiAccessToken    :: !(Maybe Text)
+    , _idiiUploadType     :: !(Maybe Text)
+    , _idiiPayload        :: !IndexItemRequest
+    , _idiiName           :: !Text
+    , _idiiCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsIndex' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idiiXgafv'
+--
+-- * 'idiiUploadProtocol'
+--
+-- * 'idiiAccessToken'
+--
+-- * 'idiiUploadType'
+--
+-- * 'idiiPayload'
+--
+-- * 'idiiName'
+--
+-- * 'idiiCallback'
+indexingDatasourcesItemsIndex
+    :: IndexItemRequest -- ^ 'idiiPayload'
+    -> Text -- ^ 'idiiName'
+    -> IndexingDatasourcesItemsIndex
+indexingDatasourcesItemsIndex pIdiiPayload_ pIdiiName_ =
+    IndexingDatasourcesItemsIndex'
+    { _idiiXgafv = Nothing
+    , _idiiUploadProtocol = Nothing
+    , _idiiAccessToken = Nothing
+    , _idiiUploadType = Nothing
+    , _idiiPayload = pIdiiPayload_
+    , _idiiName = pIdiiName_
+    , _idiiCallback = Nothing
+    }
+
+-- | V1 error format.
+idiiXgafv :: Lens' IndexingDatasourcesItemsIndex (Maybe Xgafv)
+idiiXgafv
+  = lens _idiiXgafv (\ s a -> s{_idiiXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idiiUploadProtocol :: Lens' IndexingDatasourcesItemsIndex (Maybe Text)
+idiiUploadProtocol
+  = lens _idiiUploadProtocol
+      (\ s a -> s{_idiiUploadProtocol = a})
+
+-- | OAuth access token.
+idiiAccessToken :: Lens' IndexingDatasourcesItemsIndex (Maybe Text)
+idiiAccessToken
+  = lens _idiiAccessToken
+      (\ s a -> s{_idiiAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idiiUploadType :: Lens' IndexingDatasourcesItemsIndex (Maybe Text)
+idiiUploadType
+  = lens _idiiUploadType
+      (\ s a -> s{_idiiUploadType = a})
+
+-- | Multipart request metadata.
+idiiPayload :: Lens' IndexingDatasourcesItemsIndex IndexItemRequest
+idiiPayload
+  = lens _idiiPayload (\ s a -> s{_idiiPayload = a})
+
+-- | Name of the Item. Format: datasources\/{source_id}\/items\/{item_id}
+-- This is a required field. The maximum length is 1536 characters.
+idiiName :: Lens' IndexingDatasourcesItemsIndex Text
+idiiName = lens _idiiName (\ s a -> s{_idiiName = a})
+
+-- | JSONP
+idiiCallback :: Lens' IndexingDatasourcesItemsIndex (Maybe Text)
+idiiCallback
+  = lens _idiiCallback (\ s a -> s{_idiiCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsIndex
+         where
+        type Rs IndexingDatasourcesItemsIndex = Operation
+        type Scopes IndexingDatasourcesItemsIndex =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsIndex'{..}
+          = go _idiiName _idiiXgafv _idiiUploadProtocol
+              _idiiAccessToken
+              _idiiUploadType
+              _idiiCallback
+              (Just AltJSON)
+              _idiiPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy IndexingDatasourcesItemsIndexResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/List.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/List.hs
@@ -0,0 +1,222 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.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 all or a subset of Item resources.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.list@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.List
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsListResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsList
+    , IndexingDatasourcesItemsList
+
+    -- * Request Lenses
+    , idilXgafv
+    , idilUploadProtocol
+    , idilAccessToken
+    , idilUploadType
+    , idilConnectorName
+    , idilName
+    , idilBrief
+    , idilDebugOptionsEnableDebugging
+    , idilPageToken
+    , idilPageSize
+    , idilCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.list@ method which the
+-- 'IndexingDatasourcesItemsList' request conforms to.
+type IndexingDatasourcesItemsListResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "items" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "connectorName" Text :>
+                       QueryParam "brief" Bool :>
+                         QueryParam "debugOptions.enableDebugging" Bool :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "pageSize" (Textual Int32) :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON] ListItemsResponse
+
+-- | Lists all or a subset of Item resources.
+--
+-- /See:/ 'indexingDatasourcesItemsList' smart constructor.
+data IndexingDatasourcesItemsList = IndexingDatasourcesItemsList'
+    { _idilXgafv                       :: !(Maybe Xgafv)
+    , _idilUploadProtocol              :: !(Maybe Text)
+    , _idilAccessToken                 :: !(Maybe Text)
+    , _idilUploadType                  :: !(Maybe Text)
+    , _idilConnectorName               :: !(Maybe Text)
+    , _idilName                        :: !Text
+    , _idilBrief                       :: !(Maybe Bool)
+    , _idilDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _idilPageToken                   :: !(Maybe Text)
+    , _idilPageSize                    :: !(Maybe (Textual Int32))
+    , _idilCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idilXgafv'
+--
+-- * 'idilUploadProtocol'
+--
+-- * 'idilAccessToken'
+--
+-- * 'idilUploadType'
+--
+-- * 'idilConnectorName'
+--
+-- * 'idilName'
+--
+-- * 'idilBrief'
+--
+-- * 'idilDebugOptionsEnableDebugging'
+--
+-- * 'idilPageToken'
+--
+-- * 'idilPageSize'
+--
+-- * 'idilCallback'
+indexingDatasourcesItemsList
+    :: Text -- ^ 'idilName'
+    -> IndexingDatasourcesItemsList
+indexingDatasourcesItemsList pIdilName_ =
+    IndexingDatasourcesItemsList'
+    { _idilXgafv = Nothing
+    , _idilUploadProtocol = Nothing
+    , _idilAccessToken = Nothing
+    , _idilUploadType = Nothing
+    , _idilConnectorName = Nothing
+    , _idilName = pIdilName_
+    , _idilBrief = Nothing
+    , _idilDebugOptionsEnableDebugging = Nothing
+    , _idilPageToken = Nothing
+    , _idilPageSize = Nothing
+    , _idilCallback = Nothing
+    }
+
+-- | V1 error format.
+idilXgafv :: Lens' IndexingDatasourcesItemsList (Maybe Xgafv)
+idilXgafv
+  = lens _idilXgafv (\ s a -> s{_idilXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idilUploadProtocol :: Lens' IndexingDatasourcesItemsList (Maybe Text)
+idilUploadProtocol
+  = lens _idilUploadProtocol
+      (\ s a -> s{_idilUploadProtocol = a})
+
+-- | OAuth access token.
+idilAccessToken :: Lens' IndexingDatasourcesItemsList (Maybe Text)
+idilAccessToken
+  = lens _idilAccessToken
+      (\ s a -> s{_idilAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idilUploadType :: Lens' IndexingDatasourcesItemsList (Maybe Text)
+idilUploadType
+  = lens _idilUploadType
+      (\ s a -> s{_idilUploadType = a})
+
+-- | Name of connector making this call.
+-- Format: datasources\/{source_id}\/connectors\/{ID}
+idilConnectorName :: Lens' IndexingDatasourcesItemsList (Maybe Text)
+idilConnectorName
+  = lens _idilConnectorName
+      (\ s a -> s{_idilConnectorName = a})
+
+-- | Name of the Data Source to list Items. Format: datasources\/{source_id}
+idilName :: Lens' IndexingDatasourcesItemsList Text
+idilName = lens _idilName (\ s a -> s{_idilName = a})
+
+-- | When set to true, the indexing system only populates the following
+-- fields: name, version, metadata.hash, structured_data.hash,
+-- content.hash.
+-- If this value is false, then all the fields are populated in Item.
+idilBrief :: Lens' IndexingDatasourcesItemsList (Maybe Bool)
+idilBrief
+  = lens _idilBrief (\ s a -> s{_idilBrief = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+idilDebugOptionsEnableDebugging :: Lens' IndexingDatasourcesItemsList (Maybe Bool)
+idilDebugOptionsEnableDebugging
+  = lens _idilDebugOptionsEnableDebugging
+      (\ s a -> s{_idilDebugOptionsEnableDebugging = a})
+
+-- | The next_page_token value returned from a previous List request, if any.
+idilPageToken :: Lens' IndexingDatasourcesItemsList (Maybe Text)
+idilPageToken
+  = lens _idilPageToken
+      (\ s a -> s{_idilPageToken = a})
+
+-- | Maximum number of items to fetch in a request. The max value is 1000
+-- when brief is true. The max value is 10 if brief is false.
+-- The default value is 10
+idilPageSize :: Lens' IndexingDatasourcesItemsList (Maybe Int32)
+idilPageSize
+  = lens _idilPageSize (\ s a -> s{_idilPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+idilCallback :: Lens' IndexingDatasourcesItemsList (Maybe Text)
+idilCallback
+  = lens _idilCallback (\ s a -> s{_idilCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsList
+         where
+        type Rs IndexingDatasourcesItemsList =
+             ListItemsResponse
+        type Scopes IndexingDatasourcesItemsList =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsList'{..}
+          = go _idilName _idilXgafv _idilUploadProtocol
+              _idilAccessToken
+              _idilUploadType
+              _idilConnectorName
+              _idilBrief
+              _idilDebugOptionsEnableDebugging
+              _idilPageToken
+              _idilPageSize
+              _idilCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy IndexingDatasourcesItemsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Poll.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Poll.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Poll.hs
@@ -0,0 +1,188 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.Poll
+-- 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)
+--
+-- Polls for unreserved items from the indexing queue and marks a set as
+-- reserved, starting with items that have the oldest timestamp from the
+-- highest priority ItemStatus. The priority order is as follows:
+-- ERROR
+-- MODIFIED
+-- NEW_ITEM
+-- ACCEPTED
+-- Reserving items ensures that polling from other threads cannot create
+-- overlapping sets. After handling the reserved items, the client should
+-- put items back into the unreserved state, either by calling index, or by
+-- calling push with the type REQUEUE. Items automatically become available
+-- (unreserved) after 4 hours even if no update or push method is called.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.poll@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Poll
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsPollResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsPoll
+    , IndexingDatasourcesItemsPoll
+
+    -- * Request Lenses
+    , idipdXgafv
+    , idipdUploadProtocol
+    , idipdAccessToken
+    , idipdUploadType
+    , idipdPayload
+    , idipdName
+    , idipdCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.poll@ method which the
+-- 'IndexingDatasourcesItemsPoll' request conforms to.
+type IndexingDatasourcesItemsPollResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "items:poll" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] PollItemsRequest :>
+                           Post '[JSON] PollItemsResponse
+
+-- | Polls for unreserved items from the indexing queue and marks a set as
+-- reserved, starting with items that have the oldest timestamp from the
+-- highest priority ItemStatus. The priority order is as follows:
+-- ERROR
+-- MODIFIED
+-- NEW_ITEM
+-- ACCEPTED
+-- Reserving items ensures that polling from other threads cannot create
+-- overlapping sets. After handling the reserved items, the client should
+-- put items back into the unreserved state, either by calling index, or by
+-- calling push with the type REQUEUE. Items automatically become available
+-- (unreserved) after 4 hours even if no update or push method is called.
+--
+-- /See:/ 'indexingDatasourcesItemsPoll' smart constructor.
+data IndexingDatasourcesItemsPoll = IndexingDatasourcesItemsPoll'
+    { _idipdXgafv          :: !(Maybe Xgafv)
+    , _idipdUploadProtocol :: !(Maybe Text)
+    , _idipdAccessToken    :: !(Maybe Text)
+    , _idipdUploadType     :: !(Maybe Text)
+    , _idipdPayload        :: !PollItemsRequest
+    , _idipdName           :: !Text
+    , _idipdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsPoll' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idipdXgafv'
+--
+-- * 'idipdUploadProtocol'
+--
+-- * 'idipdAccessToken'
+--
+-- * 'idipdUploadType'
+--
+-- * 'idipdPayload'
+--
+-- * 'idipdName'
+--
+-- * 'idipdCallback'
+indexingDatasourcesItemsPoll
+    :: PollItemsRequest -- ^ 'idipdPayload'
+    -> Text -- ^ 'idipdName'
+    -> IndexingDatasourcesItemsPoll
+indexingDatasourcesItemsPoll pIdipdPayload_ pIdipdName_ =
+    IndexingDatasourcesItemsPoll'
+    { _idipdXgafv = Nothing
+    , _idipdUploadProtocol = Nothing
+    , _idipdAccessToken = Nothing
+    , _idipdUploadType = Nothing
+    , _idipdPayload = pIdipdPayload_
+    , _idipdName = pIdipdName_
+    , _idipdCallback = Nothing
+    }
+
+-- | V1 error format.
+idipdXgafv :: Lens' IndexingDatasourcesItemsPoll (Maybe Xgafv)
+idipdXgafv
+  = lens _idipdXgafv (\ s a -> s{_idipdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idipdUploadProtocol :: Lens' IndexingDatasourcesItemsPoll (Maybe Text)
+idipdUploadProtocol
+  = lens _idipdUploadProtocol
+      (\ s a -> s{_idipdUploadProtocol = a})
+
+-- | OAuth access token.
+idipdAccessToken :: Lens' IndexingDatasourcesItemsPoll (Maybe Text)
+idipdAccessToken
+  = lens _idipdAccessToken
+      (\ s a -> s{_idipdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idipdUploadType :: Lens' IndexingDatasourcesItemsPoll (Maybe Text)
+idipdUploadType
+  = lens _idipdUploadType
+      (\ s a -> s{_idipdUploadType = a})
+
+-- | Multipart request metadata.
+idipdPayload :: Lens' IndexingDatasourcesItemsPoll PollItemsRequest
+idipdPayload
+  = lens _idipdPayload (\ s a -> s{_idipdPayload = a})
+
+-- | Name of the Data Source to poll items. Format: datasources\/{source_id}
+idipdName :: Lens' IndexingDatasourcesItemsPoll Text
+idipdName
+  = lens _idipdName (\ s a -> s{_idipdName = a})
+
+-- | JSONP
+idipdCallback :: Lens' IndexingDatasourcesItemsPoll (Maybe Text)
+idipdCallback
+  = lens _idipdCallback
+      (\ s a -> s{_idipdCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsPoll
+         where
+        type Rs IndexingDatasourcesItemsPoll =
+             PollItemsResponse
+        type Scopes IndexingDatasourcesItemsPoll =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsPoll'{..}
+          = go _idipdName _idipdXgafv _idipdUploadProtocol
+              _idipdAccessToken
+              _idipdUploadType
+              _idipdCallback
+              (Just AltJSON)
+              _idipdPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy IndexingDatasourcesItemsPollResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Push.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Push.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Push.hs
@@ -0,0 +1,163 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.Push
+-- 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)
+--
+-- Pushes an item onto a queue for later polling and updating.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.push@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Push
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsPushResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsPush
+    , IndexingDatasourcesItemsPush
+
+    -- * Request Lenses
+    , idipXgafv
+    , idipUploadProtocol
+    , idipAccessToken
+    , idipUploadType
+    , idipPayload
+    , idipName
+    , idipCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.push@ method which the
+-- 'IndexingDatasourcesItemsPush' request conforms to.
+type IndexingDatasourcesItemsPushResource =
+     "v1" :>
+       "indexing" :>
+         CaptureMode "name" "push" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] PushItemRequest :> Post '[JSON] Item
+
+-- | Pushes an item onto a queue for later polling and updating.
+--
+-- /See:/ 'indexingDatasourcesItemsPush' smart constructor.
+data IndexingDatasourcesItemsPush = IndexingDatasourcesItemsPush'
+    { _idipXgafv          :: !(Maybe Xgafv)
+    , _idipUploadProtocol :: !(Maybe Text)
+    , _idipAccessToken    :: !(Maybe Text)
+    , _idipUploadType     :: !(Maybe Text)
+    , _idipPayload        :: !PushItemRequest
+    , _idipName           :: !Text
+    , _idipCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsPush' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idipXgafv'
+--
+-- * 'idipUploadProtocol'
+--
+-- * 'idipAccessToken'
+--
+-- * 'idipUploadType'
+--
+-- * 'idipPayload'
+--
+-- * 'idipName'
+--
+-- * 'idipCallback'
+indexingDatasourcesItemsPush
+    :: PushItemRequest -- ^ 'idipPayload'
+    -> Text -- ^ 'idipName'
+    -> IndexingDatasourcesItemsPush
+indexingDatasourcesItemsPush pIdipPayload_ pIdipName_ =
+    IndexingDatasourcesItemsPush'
+    { _idipXgafv = Nothing
+    , _idipUploadProtocol = Nothing
+    , _idipAccessToken = Nothing
+    , _idipUploadType = Nothing
+    , _idipPayload = pIdipPayload_
+    , _idipName = pIdipName_
+    , _idipCallback = Nothing
+    }
+
+-- | V1 error format.
+idipXgafv :: Lens' IndexingDatasourcesItemsPush (Maybe Xgafv)
+idipXgafv
+  = lens _idipXgafv (\ s a -> s{_idipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idipUploadProtocol :: Lens' IndexingDatasourcesItemsPush (Maybe Text)
+idipUploadProtocol
+  = lens _idipUploadProtocol
+      (\ s a -> s{_idipUploadProtocol = a})
+
+-- | OAuth access token.
+idipAccessToken :: Lens' IndexingDatasourcesItemsPush (Maybe Text)
+idipAccessToken
+  = lens _idipAccessToken
+      (\ s a -> s{_idipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idipUploadType :: Lens' IndexingDatasourcesItemsPush (Maybe Text)
+idipUploadType
+  = lens _idipUploadType
+      (\ s a -> s{_idipUploadType = a})
+
+-- | Multipart request metadata.
+idipPayload :: Lens' IndexingDatasourcesItemsPush PushItemRequest
+idipPayload
+  = lens _idipPayload (\ s a -> s{_idipPayload = a})
+
+-- | Name of the item to push into the indexing queue.
+-- Format: datasources\/{source_id}\/items\/{ID}
+-- This is a required field. The maximum length is 1536 characters.
+idipName :: Lens' IndexingDatasourcesItemsPush Text
+idipName = lens _idipName (\ s a -> s{_idipName = a})
+
+-- | JSONP
+idipCallback :: Lens' IndexingDatasourcesItemsPush (Maybe Text)
+idipCallback
+  = lens _idipCallback (\ s a -> s{_idipCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsPush
+         where
+        type Rs IndexingDatasourcesItemsPush = Item
+        type Scopes IndexingDatasourcesItemsPush =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsPush'{..}
+          = go _idipName _idipXgafv _idipUploadProtocol
+              _idipAccessToken
+              _idipUploadType
+              _idipCallback
+              (Just AltJSON)
+              _idipPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy IndexingDatasourcesItemsPushResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Unreserve.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Unreserve.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Unreserve.hs
@@ -0,0 +1,169 @@
+{-# 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.CloudSearch.Indexing.Datasources.Items.Unreserve
+-- 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)
+--
+-- Unreserves all items from a queue, making them all eligible to be
+-- polled. This method is useful for resetting the indexing queue after a
+-- connector has been restarted.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.unreserve@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Unreserve
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsUnreserveResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsUnreserve
+    , IndexingDatasourcesItemsUnreserve
+
+    -- * Request Lenses
+    , idiuXgafv
+    , idiuUploadProtocol
+    , idiuAccessToken
+    , idiuUploadType
+    , idiuPayload
+    , idiuName
+    , idiuCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.unreserve@ method which the
+-- 'IndexingDatasourcesItemsUnreserve' request conforms to.
+type IndexingDatasourcesItemsUnreserveResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "items:unreserve" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] UnreserveItemsRequest :>
+                           Post '[JSON] Operation
+
+-- | Unreserves all items from a queue, making them all eligible to be
+-- polled. This method is useful for resetting the indexing queue after a
+-- connector has been restarted.
+--
+-- /See:/ 'indexingDatasourcesItemsUnreserve' smart constructor.
+data IndexingDatasourcesItemsUnreserve = IndexingDatasourcesItemsUnreserve'
+    { _idiuXgafv          :: !(Maybe Xgafv)
+    , _idiuUploadProtocol :: !(Maybe Text)
+    , _idiuAccessToken    :: !(Maybe Text)
+    , _idiuUploadType     :: !(Maybe Text)
+    , _idiuPayload        :: !UnreserveItemsRequest
+    , _idiuName           :: !Text
+    , _idiuCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsUnreserve' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idiuXgafv'
+--
+-- * 'idiuUploadProtocol'
+--
+-- * 'idiuAccessToken'
+--
+-- * 'idiuUploadType'
+--
+-- * 'idiuPayload'
+--
+-- * 'idiuName'
+--
+-- * 'idiuCallback'
+indexingDatasourcesItemsUnreserve
+    :: UnreserveItemsRequest -- ^ 'idiuPayload'
+    -> Text -- ^ 'idiuName'
+    -> IndexingDatasourcesItemsUnreserve
+indexingDatasourcesItemsUnreserve pIdiuPayload_ pIdiuName_ =
+    IndexingDatasourcesItemsUnreserve'
+    { _idiuXgafv = Nothing
+    , _idiuUploadProtocol = Nothing
+    , _idiuAccessToken = Nothing
+    , _idiuUploadType = Nothing
+    , _idiuPayload = pIdiuPayload_
+    , _idiuName = pIdiuName_
+    , _idiuCallback = Nothing
+    }
+
+-- | V1 error format.
+idiuXgafv :: Lens' IndexingDatasourcesItemsUnreserve (Maybe Xgafv)
+idiuXgafv
+  = lens _idiuXgafv (\ s a -> s{_idiuXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idiuUploadProtocol :: Lens' IndexingDatasourcesItemsUnreserve (Maybe Text)
+idiuUploadProtocol
+  = lens _idiuUploadProtocol
+      (\ s a -> s{_idiuUploadProtocol = a})
+
+-- | OAuth access token.
+idiuAccessToken :: Lens' IndexingDatasourcesItemsUnreserve (Maybe Text)
+idiuAccessToken
+  = lens _idiuAccessToken
+      (\ s a -> s{_idiuAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idiuUploadType :: Lens' IndexingDatasourcesItemsUnreserve (Maybe Text)
+idiuUploadType
+  = lens _idiuUploadType
+      (\ s a -> s{_idiuUploadType = a})
+
+-- | Multipart request metadata.
+idiuPayload :: Lens' IndexingDatasourcesItemsUnreserve UnreserveItemsRequest
+idiuPayload
+  = lens _idiuPayload (\ s a -> s{_idiuPayload = a})
+
+-- | Name of the Data Source to unreserve all items. Format:
+-- datasources\/{source_id}
+idiuName :: Lens' IndexingDatasourcesItemsUnreserve Text
+idiuName = lens _idiuName (\ s a -> s{_idiuName = a})
+
+-- | JSONP
+idiuCallback :: Lens' IndexingDatasourcesItemsUnreserve (Maybe Text)
+idiuCallback
+  = lens _idiuCallback (\ s a -> s{_idiuCallback = a})
+
+instance GoogleRequest
+         IndexingDatasourcesItemsUnreserve where
+        type Rs IndexingDatasourcesItemsUnreserve = Operation
+        type Scopes IndexingDatasourcesItemsUnreserve =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsUnreserve'{..}
+          = go _idiuName _idiuXgafv _idiuUploadProtocol
+              _idiuAccessToken
+              _idiuUploadType
+              _idiuCallback
+              (Just AltJSON)
+              _idiuPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy IndexingDatasourcesItemsUnreserveResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Upload.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Upload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/Items/Upload.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.CloudSearch.Indexing.Datasources.Items.Upload
+-- 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 an upload session for uploading item content. For items smaller
+-- than 100 KiB, it\'s easier to embed the content inline within update.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.items.upload@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Upload
+    (
+    -- * REST Resource
+      IndexingDatasourcesItemsUploadResource
+
+    -- * Creating a Request
+    , indexingDatasourcesItemsUpload
+    , IndexingDatasourcesItemsUpload
+
+    -- * Request Lenses
+    , indXgafv
+    , indUploadProtocol
+    , indAccessToken
+    , indUploadType
+    , indPayload
+    , indName
+    , indCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.items.upload@ method which the
+-- 'IndexingDatasourcesItemsUpload' request conforms to.
+type IndexingDatasourcesItemsUploadResource =
+     "v1" :>
+       "indexing" :>
+         CaptureMode "name" "upload" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] StartUploadItemRequest :>
+                         Post '[JSON] UploadItemRef
+
+-- | Creates an upload session for uploading item content. For items smaller
+-- than 100 KiB, it\'s easier to embed the content inline within update.
+--
+-- /See:/ 'indexingDatasourcesItemsUpload' smart constructor.
+data IndexingDatasourcesItemsUpload = IndexingDatasourcesItemsUpload'
+    { _indXgafv          :: !(Maybe Xgafv)
+    , _indUploadProtocol :: !(Maybe Text)
+    , _indAccessToken    :: !(Maybe Text)
+    , _indUploadType     :: !(Maybe Text)
+    , _indPayload        :: !StartUploadItemRequest
+    , _indName           :: !Text
+    , _indCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesItemsUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'indXgafv'
+--
+-- * 'indUploadProtocol'
+--
+-- * 'indAccessToken'
+--
+-- * 'indUploadType'
+--
+-- * 'indPayload'
+--
+-- * 'indName'
+--
+-- * 'indCallback'
+indexingDatasourcesItemsUpload
+    :: StartUploadItemRequest -- ^ 'indPayload'
+    -> Text -- ^ 'indName'
+    -> IndexingDatasourcesItemsUpload
+indexingDatasourcesItemsUpload pIndPayload_ pIndName_ =
+    IndexingDatasourcesItemsUpload'
+    { _indXgafv = Nothing
+    , _indUploadProtocol = Nothing
+    , _indAccessToken = Nothing
+    , _indUploadType = Nothing
+    , _indPayload = pIndPayload_
+    , _indName = pIndName_
+    , _indCallback = Nothing
+    }
+
+-- | V1 error format.
+indXgafv :: Lens' IndexingDatasourcesItemsUpload (Maybe Xgafv)
+indXgafv = lens _indXgafv (\ s a -> s{_indXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+indUploadProtocol :: Lens' IndexingDatasourcesItemsUpload (Maybe Text)
+indUploadProtocol
+  = lens _indUploadProtocol
+      (\ s a -> s{_indUploadProtocol = a})
+
+-- | OAuth access token.
+indAccessToken :: Lens' IndexingDatasourcesItemsUpload (Maybe Text)
+indAccessToken
+  = lens _indAccessToken
+      (\ s a -> s{_indAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+indUploadType :: Lens' IndexingDatasourcesItemsUpload (Maybe Text)
+indUploadType
+  = lens _indUploadType
+      (\ s a -> s{_indUploadType = a})
+
+-- | Multipart request metadata.
+indPayload :: Lens' IndexingDatasourcesItemsUpload StartUploadItemRequest
+indPayload
+  = lens _indPayload (\ s a -> s{_indPayload = a})
+
+-- | Name of the Data Source to start a resumable upload. Format:
+-- datasources\/{source_id}
+indName :: Lens' IndexingDatasourcesItemsUpload Text
+indName = lens _indName (\ s a -> s{_indName = a})
+
+-- | JSONP
+indCallback :: Lens' IndexingDatasourcesItemsUpload (Maybe Text)
+indCallback
+  = lens _indCallback (\ s a -> s{_indCallback = a})
+
+instance GoogleRequest IndexingDatasourcesItemsUpload
+         where
+        type Rs IndexingDatasourcesItemsUpload =
+             UploadItemRef
+        type Scopes IndexingDatasourcesItemsUpload =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient IndexingDatasourcesItemsUpload'{..}
+          = go _indName _indXgafv _indUploadProtocol
+              _indAccessToken
+              _indUploadType
+              _indCallback
+              (Just AltJSON)
+              _indPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy IndexingDatasourcesItemsUploadResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/UpdateSchema.hs b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/UpdateSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Indexing/Datasources/UpdateSchema.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.CloudSearch.Indexing.Datasources.UpdateSchema
+-- 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 the schema of a data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.indexing.datasources.updateSchema@.
+module Network.Google.Resource.CloudSearch.Indexing.Datasources.UpdateSchema
+    (
+    -- * REST Resource
+      IndexingDatasourcesUpdateSchemaResource
+
+    -- * Creating a Request
+    , indexingDatasourcesUpdateSchema
+    , IndexingDatasourcesUpdateSchema
+
+    -- * Request Lenses
+    , idusXgafv
+    , idusUploadProtocol
+    , idusAccessToken
+    , idusUploadType
+    , idusPayload
+    , idusName
+    , idusCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.indexing.datasources.updateSchema@ method which the
+-- 'IndexingDatasourcesUpdateSchema' request conforms to.
+type IndexingDatasourcesUpdateSchemaResource =
+     "v1" :>
+       "indexing" :>
+         Capture "name" Text :>
+           "schema" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] UpdateSchemaRequest :>
+                           Put '[JSON] Operation
+
+-- | Updates the schema of a data source.
+--
+-- /See:/ 'indexingDatasourcesUpdateSchema' smart constructor.
+data IndexingDatasourcesUpdateSchema = IndexingDatasourcesUpdateSchema'
+    { _idusXgafv          :: !(Maybe Xgafv)
+    , _idusUploadProtocol :: !(Maybe Text)
+    , _idusAccessToken    :: !(Maybe Text)
+    , _idusUploadType     :: !(Maybe Text)
+    , _idusPayload        :: !UpdateSchemaRequest
+    , _idusName           :: !Text
+    , _idusCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndexingDatasourcesUpdateSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idusXgafv'
+--
+-- * 'idusUploadProtocol'
+--
+-- * 'idusAccessToken'
+--
+-- * 'idusUploadType'
+--
+-- * 'idusPayload'
+--
+-- * 'idusName'
+--
+-- * 'idusCallback'
+indexingDatasourcesUpdateSchema
+    :: UpdateSchemaRequest -- ^ 'idusPayload'
+    -> Text -- ^ 'idusName'
+    -> IndexingDatasourcesUpdateSchema
+indexingDatasourcesUpdateSchema pIdusPayload_ pIdusName_ =
+    IndexingDatasourcesUpdateSchema'
+    { _idusXgafv = Nothing
+    , _idusUploadProtocol = Nothing
+    , _idusAccessToken = Nothing
+    , _idusUploadType = Nothing
+    , _idusPayload = pIdusPayload_
+    , _idusName = pIdusName_
+    , _idusCallback = Nothing
+    }
+
+-- | V1 error format.
+idusXgafv :: Lens' IndexingDatasourcesUpdateSchema (Maybe Xgafv)
+idusXgafv
+  = lens _idusXgafv (\ s a -> s{_idusXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idusUploadProtocol :: Lens' IndexingDatasourcesUpdateSchema (Maybe Text)
+idusUploadProtocol
+  = lens _idusUploadProtocol
+      (\ s a -> s{_idusUploadProtocol = a})
+
+-- | OAuth access token.
+idusAccessToken :: Lens' IndexingDatasourcesUpdateSchema (Maybe Text)
+idusAccessToken
+  = lens _idusAccessToken
+      (\ s a -> s{_idusAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idusUploadType :: Lens' IndexingDatasourcesUpdateSchema (Maybe Text)
+idusUploadType
+  = lens _idusUploadType
+      (\ s a -> s{_idusUploadType = a})
+
+-- | Multipart request metadata.
+idusPayload :: Lens' IndexingDatasourcesUpdateSchema UpdateSchemaRequest
+idusPayload
+  = lens _idusPayload (\ s a -> s{_idusPayload = a})
+
+-- | Name of the data source to update Schema. Format:
+-- datasources\/{source_id}
+idusName :: Lens' IndexingDatasourcesUpdateSchema Text
+idusName = lens _idusName (\ s a -> s{_idusName = a})
+
+-- | JSONP
+idusCallback :: Lens' IndexingDatasourcesUpdateSchema (Maybe Text)
+idusCallback
+  = lens _idusCallback (\ s a -> s{_idusCallback = a})
+
+instance GoogleRequest
+         IndexingDatasourcesUpdateSchema where
+        type Rs IndexingDatasourcesUpdateSchema = Operation
+        type Scopes IndexingDatasourcesUpdateSchema =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient IndexingDatasourcesUpdateSchema'{..}
+          = go _idusName _idusXgafv _idusUploadProtocol
+              _idusAccessToken
+              _idusUploadType
+              _idusCallback
+              (Just AltJSON)
+              _idusPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy IndexingDatasourcesUpdateSchemaResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Media/Upload.hs b/gen/Network/Google/Resource/CloudSearch/Media/Upload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Media/Upload.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.CloudSearch.Media.Upload
+-- 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)
+--
+-- Uploads media for indexing. The upload endpoint supports direct and
+-- resumable upload protocols and is intended for large items that can not
+-- be inlined during index requests. To index large content: 1. Call upload
+-- to begin a session and get the item reference. 1. Upload the content
+-- using the item reference\'s resource name. 1. Call index with the item
+-- reference as the content. For additional information, see [Create a
+-- content connector using the REST
+-- API](https:\/\/developers.google.com\/cloud-search\/docs\/guides\/content-connector#rest).
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.media.upload@.
+module Network.Google.Resource.CloudSearch.Media.Upload
+    (
+    -- * REST Resource
+      MediaUploadResource
+
+    -- * Creating a Request
+    , mediaUpload
+    , MediaUpload'
+
+    -- * Request Lenses
+    , muXgafv
+    , muUploadProtocol
+    , muResourceName
+    , muAccessToken
+    , muUploadType
+    , muPayload
+    , muCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.media.upload@ method which the
+-- 'MediaUpload'' request conforms to.
+type MediaUploadResource =
+     "v1" :>
+       "media" :>
+         Capture "resourceName" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Media :> Post '[JSON] Media
+       :<|>
+       "upload" :>
+         "v1" :>
+           "media" :>
+             Capture "resourceName" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           QueryParam "uploadType" Multipart :>
+                             MultipartRelated '[JSON] Media :>
+                               Post '[JSON] Media
+
+-- | Uploads media for indexing. The upload endpoint supports direct and
+-- resumable upload protocols and is intended for large items that can not
+-- be inlined during index requests. To index large content: 1. Call upload
+-- to begin a session and get the item reference. 1. Upload the content
+-- using the item reference\'s resource name. 1. Call index with the item
+-- reference as the content. For additional information, see [Create a
+-- content connector using the REST
+-- API](https:\/\/developers.google.com\/cloud-search\/docs\/guides\/content-connector#rest).
+--
+-- /See:/ 'mediaUpload' smart constructor.
+data MediaUpload' = MediaUpload''
+    { _muXgafv          :: !(Maybe Xgafv)
+    , _muUploadProtocol :: !(Maybe Text)
+    , _muResourceName   :: !Text
+    , _muAccessToken    :: !(Maybe Text)
+    , _muUploadType     :: !(Maybe Text)
+    , _muPayload        :: !Media
+    , _muCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MediaUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'muXgafv'
+--
+-- * 'muUploadProtocol'
+--
+-- * 'muResourceName'
+--
+-- * 'muAccessToken'
+--
+-- * 'muUploadType'
+--
+-- * 'muPayload'
+--
+-- * 'muCallback'
+mediaUpload
+    :: Text -- ^ 'muResourceName'
+    -> Media -- ^ 'muPayload'
+    -> MediaUpload'
+mediaUpload pMuResourceName_ pMuPayload_ =
+    MediaUpload''
+    { _muXgafv = Nothing
+    , _muUploadProtocol = Nothing
+    , _muResourceName = pMuResourceName_
+    , _muAccessToken = Nothing
+    , _muUploadType = Nothing
+    , _muPayload = pMuPayload_
+    , _muCallback = Nothing
+    }
+
+-- | V1 error format.
+muXgafv :: Lens' MediaUpload' (Maybe Xgafv)
+muXgafv = lens _muXgafv (\ s a -> s{_muXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+muUploadProtocol :: Lens' MediaUpload' (Maybe Text)
+muUploadProtocol
+  = lens _muUploadProtocol
+      (\ s a -> s{_muUploadProtocol = a})
+
+-- | Name of the media that is being downloaded. See
+-- ReadRequest.resource_name.
+muResourceName :: Lens' MediaUpload' Text
+muResourceName
+  = lens _muResourceName
+      (\ s a -> s{_muResourceName = a})
+
+-- | OAuth access token.
+muAccessToken :: Lens' MediaUpload' (Maybe Text)
+muAccessToken
+  = lens _muAccessToken
+      (\ s a -> s{_muAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+muUploadType :: Lens' MediaUpload' (Maybe Text)
+muUploadType
+  = lens _muUploadType (\ s a -> s{_muUploadType = a})
+
+-- | Multipart request metadata.
+muPayload :: Lens' MediaUpload' Media
+muPayload
+  = lens _muPayload (\ s a -> s{_muPayload = a})
+
+-- | JSONP
+muCallback :: Lens' MediaUpload' (Maybe Text)
+muCallback
+  = lens _muCallback (\ s a -> s{_muCallback = a})
+
+instance GoogleRequest MediaUpload' where
+        type Rs MediaUpload' = Media
+        type Scopes MediaUpload' =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.indexing"]
+        requestClient MediaUpload''{..}
+          = go _muResourceName _muXgafv _muUploadProtocol
+              _muAccessToken
+              _muUploadType
+              _muCallback
+              (Just AltJSON)
+              _muPayload
+              cloudSearchService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy MediaUploadResource)
+                      mempty
+
+instance GoogleRequest (MediaUpload MediaUpload')
+         where
+        type Rs (MediaUpload MediaUpload') = Media
+        type Scopes (MediaUpload MediaUpload') =
+             Scopes MediaUpload'
+        requestClient (MediaUpload MediaUpload''{..} body)
+          = go _muResourceName _muXgafv _muUploadProtocol
+              _muAccessToken
+              _muUploadType
+              _muCallback
+              (Just AltJSON)
+              (Just Multipart)
+              _muPayload
+              body
+              cloudSearchService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy MediaUploadResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Operations/Get.hs b/gen/Network/Google/Resource/CloudSearch/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Operations/Get.hs
@@ -0,0 +1,151 @@
+{-# 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.CloudSearch.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://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.operations.get@.
+module Network.Google.Resource.CloudSearch.Operations.Get
+    (
+    -- * REST Resource
+      OperationsGetResource
+
+    -- * Creating a Request
+    , operationsGet
+    , OperationsGet
+
+    -- * Request Lenses
+    , ogXgafv
+    , ogUploadProtocol
+    , ogAccessToken
+    , ogUploadType
+    , ogName
+    , ogCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.operations.get@ method which the
+-- 'OperationsGet' request conforms to.
+type OperationsGetResource =
+     "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] Operation
+
+-- | 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:/ 'operationsGet' smart constructor.
+data OperationsGet = OperationsGet'
+    { _ogXgafv          :: !(Maybe Xgafv)
+    , _ogUploadProtocol :: !(Maybe Text)
+    , _ogAccessToken    :: !(Maybe Text)
+    , _ogUploadType     :: !(Maybe Text)
+    , _ogName           :: !Text
+    , _ogCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ogXgafv'
+--
+-- * 'ogUploadProtocol'
+--
+-- * 'ogAccessToken'
+--
+-- * 'ogUploadType'
+--
+-- * 'ogName'
+--
+-- * 'ogCallback'
+operationsGet
+    :: Text -- ^ 'ogName'
+    -> OperationsGet
+operationsGet pOgName_ =
+    OperationsGet'
+    { _ogXgafv = Nothing
+    , _ogUploadProtocol = Nothing
+    , _ogAccessToken = Nothing
+    , _ogUploadType = Nothing
+    , _ogName = pOgName_
+    , _ogCallback = Nothing
+    }
+
+-- | V1 error format.
+ogXgafv :: Lens' OperationsGet (Maybe Xgafv)
+ogXgafv = lens _ogXgafv (\ s a -> s{_ogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ogUploadProtocol :: Lens' OperationsGet (Maybe Text)
+ogUploadProtocol
+  = lens _ogUploadProtocol
+      (\ s a -> s{_ogUploadProtocol = a})
+
+-- | OAuth access token.
+ogAccessToken :: Lens' OperationsGet (Maybe Text)
+ogAccessToken
+  = lens _ogAccessToken
+      (\ s a -> s{_ogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ogUploadType :: Lens' OperationsGet (Maybe Text)
+ogUploadType
+  = lens _ogUploadType (\ s a -> s{_ogUploadType = a})
+
+-- | The name of the operation resource.
+ogName :: Lens' OperationsGet Text
+ogName = lens _ogName (\ s a -> s{_ogName = a})
+
+-- | JSONP
+ogCallback :: Lens' OperationsGet (Maybe Text)
+ogCallback
+  = lens _ogCallback (\ s a -> s{_ogCallback = a})
+
+instance GoogleRequest OperationsGet where
+        type Rs OperationsGet = Operation
+        type Scopes OperationsGet =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.debug",
+               "https://www.googleapis.com/auth/cloud_search.indexing",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient OperationsGet'{..}
+          = go _ogName _ogXgafv _ogUploadProtocol
+              _ogAccessToken
+              _ogUploadType
+              _ogCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Query/Search.hs b/gen/Network/Google/Resource/CloudSearch/Query/Search.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Query/Search.hs
@@ -0,0 +1,151 @@
+{-# 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.CloudSearch.Query.Search
+-- 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)
+--
+-- The Cloud Search Query API provides the search method, which returns the
+-- most relevant results from a user query. The results can come from G
+-- Suite Apps, such as Gmail or Google Drive, or they can come from data
+-- that you have indexed from a third party.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.query.search@.
+module Network.Google.Resource.CloudSearch.Query.Search
+    (
+    -- * REST Resource
+      QuerySearchResource
+
+    -- * Creating a Request
+    , querySearch
+    , QuerySearch
+
+    -- * Request Lenses
+    , qXgafv
+    , qUploadProtocol
+    , qAccessToken
+    , qUploadType
+    , qPayload
+    , qCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.query.search@ method which the
+-- 'QuerySearch' request conforms to.
+type QuerySearchResource =
+     "v1" :>
+       "query" :>
+         "search" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] SearchRequest :>
+                         Post '[JSON] SearchResponse
+
+-- | The Cloud Search Query API provides the search method, which returns the
+-- most relevant results from a user query. The results can come from G
+-- Suite Apps, such as Gmail or Google Drive, or they can come from data
+-- that you have indexed from a third party.
+--
+-- /See:/ 'querySearch' smart constructor.
+data QuerySearch = QuerySearch'
+    { _qXgafv          :: !(Maybe Xgafv)
+    , _qUploadProtocol :: !(Maybe Text)
+    , _qAccessToken    :: !(Maybe Text)
+    , _qUploadType     :: !(Maybe Text)
+    , _qPayload        :: !SearchRequest
+    , _qCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QuerySearch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qXgafv'
+--
+-- * 'qUploadProtocol'
+--
+-- * 'qAccessToken'
+--
+-- * 'qUploadType'
+--
+-- * 'qPayload'
+--
+-- * 'qCallback'
+querySearch
+    :: SearchRequest -- ^ 'qPayload'
+    -> QuerySearch
+querySearch pQPayload_ =
+    QuerySearch'
+    { _qXgafv = Nothing
+    , _qUploadProtocol = Nothing
+    , _qAccessToken = Nothing
+    , _qUploadType = Nothing
+    , _qPayload = pQPayload_
+    , _qCallback = Nothing
+    }
+
+-- | V1 error format.
+qXgafv :: Lens' QuerySearch (Maybe Xgafv)
+qXgafv = lens _qXgafv (\ s a -> s{_qXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+qUploadProtocol :: Lens' QuerySearch (Maybe Text)
+qUploadProtocol
+  = lens _qUploadProtocol
+      (\ s a -> s{_qUploadProtocol = a})
+
+-- | OAuth access token.
+qAccessToken :: Lens' QuerySearch (Maybe Text)
+qAccessToken
+  = lens _qAccessToken (\ s a -> s{_qAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+qUploadType :: Lens' QuerySearch (Maybe Text)
+qUploadType
+  = lens _qUploadType (\ s a -> s{_qUploadType = a})
+
+-- | Multipart request metadata.
+qPayload :: Lens' QuerySearch SearchRequest
+qPayload = lens _qPayload (\ s a -> s{_qPayload = a})
+
+-- | JSONP
+qCallback :: Lens' QuerySearch (Maybe Text)
+qCallback
+  = lens _qCallback (\ s a -> s{_qCallback = a})
+
+instance GoogleRequest QuerySearch where
+        type Rs QuerySearch = SearchResponse
+        type Scopes QuerySearch =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.query"]
+        requestClient QuerySearch'{..}
+          = go _qXgafv _qUploadProtocol _qAccessToken
+              _qUploadType
+              _qCallback
+              (Just AltJSON)
+              _qPayload
+              cloudSearchService
+          where go
+                  = buildClient (Proxy :: Proxy QuerySearchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Query/Sources/List.hs b/gen/Network/Google/Resource/CloudSearch/Query/Sources/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Query/Sources/List.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.CloudSearch.Query.Sources.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)
+--
+-- Returns list of sources that user can use for Search and Suggest APIs.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.query.sources.list@.
+module Network.Google.Resource.CloudSearch.Query.Sources.List
+    (
+    -- * REST Resource
+      QuerySourcesListResource
+
+    -- * Creating a Request
+    , querySourcesList
+    , QuerySourcesList
+
+    -- * Request Lenses
+    , qslXgafv
+    , qslRequestOptionsTimeZone
+    , qslRequestOptionsDebugOptionsEnableDebugging
+    , qslUploadProtocol
+    , qslAccessToken
+    , qslUploadType
+    , qslRequestOptionsSearchApplicationId
+    , qslRequestOptionsLanguageCode
+    , qslPageToken
+    , qslCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.query.sources.list@ method which the
+-- 'QuerySourcesList' request conforms to.
+type QuerySourcesListResource =
+     "v1" :>
+       "query" :>
+         "sources" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "requestOptions.timeZone" Text :>
+               QueryParam
+                 "requestOptions.debugOptions.enableDebugging"
+                 Bool
+                 :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "requestOptions.searchApplicationId" Text
+                         :>
+                         QueryParam "requestOptions.languageCode" Text :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListQuerySourcesResponse
+
+-- | Returns list of sources that user can use for Search and Suggest APIs.
+--
+-- /See:/ 'querySourcesList' smart constructor.
+data QuerySourcesList = QuerySourcesList'
+    { _qslXgafv                                     :: !(Maybe Xgafv)
+    , _qslRequestOptionsTimeZone                    :: !(Maybe Text)
+    , _qslRequestOptionsDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _qslUploadProtocol                            :: !(Maybe Text)
+    , _qslAccessToken                               :: !(Maybe Text)
+    , _qslUploadType                                :: !(Maybe Text)
+    , _qslRequestOptionsSearchApplicationId         :: !(Maybe Text)
+    , _qslRequestOptionsLanguageCode                :: !(Maybe Text)
+    , _qslPageToken                                 :: !(Maybe Text)
+    , _qslCallback                                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QuerySourcesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qslXgafv'
+--
+-- * 'qslRequestOptionsTimeZone'
+--
+-- * 'qslRequestOptionsDebugOptionsEnableDebugging'
+--
+-- * 'qslUploadProtocol'
+--
+-- * 'qslAccessToken'
+--
+-- * 'qslUploadType'
+--
+-- * 'qslRequestOptionsSearchApplicationId'
+--
+-- * 'qslRequestOptionsLanguageCode'
+--
+-- * 'qslPageToken'
+--
+-- * 'qslCallback'
+querySourcesList
+    :: QuerySourcesList
+querySourcesList =
+    QuerySourcesList'
+    { _qslXgafv = Nothing
+    , _qslRequestOptionsTimeZone = Nothing
+    , _qslRequestOptionsDebugOptionsEnableDebugging = Nothing
+    , _qslUploadProtocol = Nothing
+    , _qslAccessToken = Nothing
+    , _qslUploadType = Nothing
+    , _qslRequestOptionsSearchApplicationId = Nothing
+    , _qslRequestOptionsLanguageCode = Nothing
+    , _qslPageToken = Nothing
+    , _qslCallback = Nothing
+    }
+
+-- | V1 error format.
+qslXgafv :: Lens' QuerySourcesList (Maybe Xgafv)
+qslXgafv = lens _qslXgafv (\ s a -> s{_qslXgafv = a})
+
+-- | Current user\'s time zone id, such as \"America\/Los_Angeles\" or
+-- \"Australia\/Sydney\". These IDs are defined by [Unicode Common Locale
+-- Data Repository (CLDR)](http:\/\/cldr.unicode.org\/) project, and
+-- currently available in the file
+-- [timezone.xml](http:\/\/unicode.org\/repos\/cldr\/trunk\/common\/bcp47\/timezone.xml)
+qslRequestOptionsTimeZone :: Lens' QuerySourcesList (Maybe Text)
+qslRequestOptionsTimeZone
+  = lens _qslRequestOptionsTimeZone
+      (\ s a -> s{_qslRequestOptionsTimeZone = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+qslRequestOptionsDebugOptionsEnableDebugging :: Lens' QuerySourcesList (Maybe Bool)
+qslRequestOptionsDebugOptionsEnableDebugging
+  = lens _qslRequestOptionsDebugOptionsEnableDebugging
+      (\ s a ->
+         s{_qslRequestOptionsDebugOptionsEnableDebugging = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+qslUploadProtocol :: Lens' QuerySourcesList (Maybe Text)
+qslUploadProtocol
+  = lens _qslUploadProtocol
+      (\ s a -> s{_qslUploadProtocol = a})
+
+-- | OAuth access token.
+qslAccessToken :: Lens' QuerySourcesList (Maybe Text)
+qslAccessToken
+  = lens _qslAccessToken
+      (\ s a -> s{_qslAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+qslUploadType :: Lens' QuerySourcesList (Maybe Text)
+qslUploadType
+  = lens _qslUploadType
+      (\ s a -> s{_qslUploadType = a})
+
+-- | Id of the application created using SearchApplicationsService.
+qslRequestOptionsSearchApplicationId :: Lens' QuerySourcesList (Maybe Text)
+qslRequestOptionsSearchApplicationId
+  = lens _qslRequestOptionsSearchApplicationId
+      (\ s a ->
+         s{_qslRequestOptionsSearchApplicationId = a})
+
+-- | The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more
+-- information, see
+-- http:\/\/www.unicode.org\/reports\/tr35\/#Unicode_locale_identifier. For
+-- translations.
+qslRequestOptionsLanguageCode :: Lens' QuerySourcesList (Maybe Text)
+qslRequestOptionsLanguageCode
+  = lens _qslRequestOptionsLanguageCode
+      (\ s a -> s{_qslRequestOptionsLanguageCode = a})
+
+-- | Number of sources to return in the response.
+qslPageToken :: Lens' QuerySourcesList (Maybe Text)
+qslPageToken
+  = lens _qslPageToken (\ s a -> s{_qslPageToken = a})
+
+-- | JSONP
+qslCallback :: Lens' QuerySourcesList (Maybe Text)
+qslCallback
+  = lens _qslCallback (\ s a -> s{_qslCallback = a})
+
+instance GoogleRequest QuerySourcesList where
+        type Rs QuerySourcesList = ListQuerySourcesResponse
+        type Scopes QuerySourcesList =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.query"]
+        requestClient QuerySourcesList'{..}
+          = go _qslXgafv _qslRequestOptionsTimeZone
+              _qslRequestOptionsDebugOptionsEnableDebugging
+              _qslUploadProtocol
+              _qslAccessToken
+              _qslUploadType
+              _qslRequestOptionsSearchApplicationId
+              _qslRequestOptionsLanguageCode
+              _qslPageToken
+              _qslCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy QuerySourcesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Query/Suggest.hs b/gen/Network/Google/Resource/CloudSearch/Query/Suggest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Query/Suggest.hs
@@ -0,0 +1,147 @@
+{-# 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.CloudSearch.Query.Suggest
+-- 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)
+--
+-- Provides suggestions for autocompleting the query.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.query.suggest@.
+module Network.Google.Resource.CloudSearch.Query.Suggest
+    (
+    -- * REST Resource
+      QuerySuggestResource
+
+    -- * Creating a Request
+    , querySuggest
+    , QuerySuggest
+
+    -- * Request Lenses
+    , qsXgafv
+    , qsUploadProtocol
+    , qsAccessToken
+    , qsUploadType
+    , qsPayload
+    , qsCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.query.suggest@ method which the
+-- 'QuerySuggest' request conforms to.
+type QuerySuggestResource =
+     "v1" :>
+       "query" :>
+         "suggest" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] SuggestRequest :>
+                         Post '[JSON] SuggestResponse
+
+-- | Provides suggestions for autocompleting the query.
+--
+-- /See:/ 'querySuggest' smart constructor.
+data QuerySuggest = QuerySuggest'
+    { _qsXgafv          :: !(Maybe Xgafv)
+    , _qsUploadProtocol :: !(Maybe Text)
+    , _qsAccessToken    :: !(Maybe Text)
+    , _qsUploadType     :: !(Maybe Text)
+    , _qsPayload        :: !SuggestRequest
+    , _qsCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QuerySuggest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qsXgafv'
+--
+-- * 'qsUploadProtocol'
+--
+-- * 'qsAccessToken'
+--
+-- * 'qsUploadType'
+--
+-- * 'qsPayload'
+--
+-- * 'qsCallback'
+querySuggest
+    :: SuggestRequest -- ^ 'qsPayload'
+    -> QuerySuggest
+querySuggest pQsPayload_ =
+    QuerySuggest'
+    { _qsXgafv = Nothing
+    , _qsUploadProtocol = Nothing
+    , _qsAccessToken = Nothing
+    , _qsUploadType = Nothing
+    , _qsPayload = pQsPayload_
+    , _qsCallback = Nothing
+    }
+
+-- | V1 error format.
+qsXgafv :: Lens' QuerySuggest (Maybe Xgafv)
+qsXgafv = lens _qsXgafv (\ s a -> s{_qsXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+qsUploadProtocol :: Lens' QuerySuggest (Maybe Text)
+qsUploadProtocol
+  = lens _qsUploadProtocol
+      (\ s a -> s{_qsUploadProtocol = a})
+
+-- | OAuth access token.
+qsAccessToken :: Lens' QuerySuggest (Maybe Text)
+qsAccessToken
+  = lens _qsAccessToken
+      (\ s a -> s{_qsAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+qsUploadType :: Lens' QuerySuggest (Maybe Text)
+qsUploadType
+  = lens _qsUploadType (\ s a -> s{_qsUploadType = a})
+
+-- | Multipart request metadata.
+qsPayload :: Lens' QuerySuggest SuggestRequest
+qsPayload
+  = lens _qsPayload (\ s a -> s{_qsPayload = a})
+
+-- | JSONP
+qsCallback :: Lens' QuerySuggest (Maybe Text)
+qsCallback
+  = lens _qsCallback (\ s a -> s{_qsCallback = a})
+
+instance GoogleRequest QuerySuggest where
+        type Rs QuerySuggest = SuggestResponse
+        type Scopes QuerySuggest =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.query"]
+        requestClient QuerySuggest'{..}
+          = go _qsXgafv _qsUploadProtocol _qsAccessToken
+              _qsUploadType
+              _qsCallback
+              (Just AltJSON)
+              _qsPayload
+              cloudSearchService
+          where go
+                  = buildClient (Proxy :: Proxy QuerySuggestResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Create.hs b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Create.hs
@@ -0,0 +1,150 @@
+{-# 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.CloudSearch.Settings.Datasources.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 data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.datasources.create@.
+module Network.Google.Resource.CloudSearch.Settings.Datasources.Create
+    (
+    -- * REST Resource
+      SettingsDatasourcesCreateResource
+
+    -- * Creating a Request
+    , settingsDatasourcesCreate
+    , SettingsDatasourcesCreate
+
+    -- * Request Lenses
+    , sdcXgafv
+    , sdcUploadProtocol
+    , sdcAccessToken
+    , sdcUploadType
+    , sdcPayload
+    , sdcCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.datasources.create@ method which the
+-- 'SettingsDatasourcesCreate' request conforms to.
+type SettingsDatasourcesCreateResource =
+     "v1" :>
+       "settings" :>
+         "datasources" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] DataSource :> Post '[JSON] Operation
+
+-- | Creates data source.
+--
+-- /See:/ 'settingsDatasourcesCreate' smart constructor.
+data SettingsDatasourcesCreate = SettingsDatasourcesCreate'
+    { _sdcXgafv          :: !(Maybe Xgafv)
+    , _sdcUploadProtocol :: !(Maybe Text)
+    , _sdcAccessToken    :: !(Maybe Text)
+    , _sdcUploadType     :: !(Maybe Text)
+    , _sdcPayload        :: !DataSource
+    , _sdcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsDatasourcesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdcXgafv'
+--
+-- * 'sdcUploadProtocol'
+--
+-- * 'sdcAccessToken'
+--
+-- * 'sdcUploadType'
+--
+-- * 'sdcPayload'
+--
+-- * 'sdcCallback'
+settingsDatasourcesCreate
+    :: DataSource -- ^ 'sdcPayload'
+    -> SettingsDatasourcesCreate
+settingsDatasourcesCreate pSdcPayload_ =
+    SettingsDatasourcesCreate'
+    { _sdcXgafv = Nothing
+    , _sdcUploadProtocol = Nothing
+    , _sdcAccessToken = Nothing
+    , _sdcUploadType = Nothing
+    , _sdcPayload = pSdcPayload_
+    , _sdcCallback = Nothing
+    }
+
+-- | V1 error format.
+sdcXgafv :: Lens' SettingsDatasourcesCreate (Maybe Xgafv)
+sdcXgafv = lens _sdcXgafv (\ s a -> s{_sdcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdcUploadProtocol :: Lens' SettingsDatasourcesCreate (Maybe Text)
+sdcUploadProtocol
+  = lens _sdcUploadProtocol
+      (\ s a -> s{_sdcUploadProtocol = a})
+
+-- | OAuth access token.
+sdcAccessToken :: Lens' SettingsDatasourcesCreate (Maybe Text)
+sdcAccessToken
+  = lens _sdcAccessToken
+      (\ s a -> s{_sdcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdcUploadType :: Lens' SettingsDatasourcesCreate (Maybe Text)
+sdcUploadType
+  = lens _sdcUploadType
+      (\ s a -> s{_sdcUploadType = a})
+
+-- | Multipart request metadata.
+sdcPayload :: Lens' SettingsDatasourcesCreate DataSource
+sdcPayload
+  = lens _sdcPayload (\ s a -> s{_sdcPayload = a})
+
+-- | JSONP
+sdcCallback :: Lens' SettingsDatasourcesCreate (Maybe Text)
+sdcCallback
+  = lens _sdcCallback (\ s a -> s{_sdcCallback = a})
+
+instance GoogleRequest SettingsDatasourcesCreate
+         where
+        type Rs SettingsDatasourcesCreate = Operation
+        type Scopes SettingsDatasourcesCreate =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient SettingsDatasourcesCreate'{..}
+          = go _sdcXgafv _sdcUploadProtocol _sdcAccessToken
+              _sdcUploadType
+              _sdcCallback
+              (Just AltJSON)
+              _sdcPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SettingsDatasourcesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Delete.hs b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Delete.hs
@@ -0,0 +1,162 @@
+{-# 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.CloudSearch.Settings.Datasources.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 data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.datasources.delete@.
+module Network.Google.Resource.CloudSearch.Settings.Datasources.Delete
+    (
+    -- * REST Resource
+      SettingsDatasourcesDeleteResource
+
+    -- * Creating a Request
+    , settingsDatasourcesDelete
+    , SettingsDatasourcesDelete
+
+    -- * Request Lenses
+    , sddXgafv
+    , sddUploadProtocol
+    , sddAccessToken
+    , sddUploadType
+    , sddName
+    , sddDebugOptionsEnableDebugging
+    , sddCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.datasources.delete@ method which the
+-- 'SettingsDatasourcesDelete' request conforms to.
+type SettingsDatasourcesDeleteResource =
+     "v1" :>
+       "settings" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Delete '[JSON] Operation
+
+-- | Deletes a data source.
+--
+-- /See:/ 'settingsDatasourcesDelete' smart constructor.
+data SettingsDatasourcesDelete = SettingsDatasourcesDelete'
+    { _sddXgafv                       :: !(Maybe Xgafv)
+    , _sddUploadProtocol              :: !(Maybe Text)
+    , _sddAccessToken                 :: !(Maybe Text)
+    , _sddUploadType                  :: !(Maybe Text)
+    , _sddName                        :: !Text
+    , _sddDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _sddCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsDatasourcesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sddXgafv'
+--
+-- * 'sddUploadProtocol'
+--
+-- * 'sddAccessToken'
+--
+-- * 'sddUploadType'
+--
+-- * 'sddName'
+--
+-- * 'sddDebugOptionsEnableDebugging'
+--
+-- * 'sddCallback'
+settingsDatasourcesDelete
+    :: Text -- ^ 'sddName'
+    -> SettingsDatasourcesDelete
+settingsDatasourcesDelete pSddName_ =
+    SettingsDatasourcesDelete'
+    { _sddXgafv = Nothing
+    , _sddUploadProtocol = Nothing
+    , _sddAccessToken = Nothing
+    , _sddUploadType = Nothing
+    , _sddName = pSddName_
+    , _sddDebugOptionsEnableDebugging = Nothing
+    , _sddCallback = Nothing
+    }
+
+-- | V1 error format.
+sddXgafv :: Lens' SettingsDatasourcesDelete (Maybe Xgafv)
+sddXgafv = lens _sddXgafv (\ s a -> s{_sddXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sddUploadProtocol :: Lens' SettingsDatasourcesDelete (Maybe Text)
+sddUploadProtocol
+  = lens _sddUploadProtocol
+      (\ s a -> s{_sddUploadProtocol = a})
+
+-- | OAuth access token.
+sddAccessToken :: Lens' SettingsDatasourcesDelete (Maybe Text)
+sddAccessToken
+  = lens _sddAccessToken
+      (\ s a -> s{_sddAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sddUploadType :: Lens' SettingsDatasourcesDelete (Maybe Text)
+sddUploadType
+  = lens _sddUploadType
+      (\ s a -> s{_sddUploadType = a})
+
+-- | Name of the data source. Format: datasources\/{source_id}.
+sddName :: Lens' SettingsDatasourcesDelete Text
+sddName = lens _sddName (\ s a -> s{_sddName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+sddDebugOptionsEnableDebugging :: Lens' SettingsDatasourcesDelete (Maybe Bool)
+sddDebugOptionsEnableDebugging
+  = lens _sddDebugOptionsEnableDebugging
+      (\ s a -> s{_sddDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+sddCallback :: Lens' SettingsDatasourcesDelete (Maybe Text)
+sddCallback
+  = lens _sddCallback (\ s a -> s{_sddCallback = a})
+
+instance GoogleRequest SettingsDatasourcesDelete
+         where
+        type Rs SettingsDatasourcesDelete = Operation
+        type Scopes SettingsDatasourcesDelete =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient SettingsDatasourcesDelete'{..}
+          = go _sddName _sddXgafv _sddUploadProtocol
+              _sddAccessToken
+              _sddUploadType
+              _sddDebugOptionsEnableDebugging
+              _sddCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SettingsDatasourcesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Get.hs b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Get.hs
@@ -0,0 +1,161 @@
+{-# 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.CloudSearch.Settings.Datasources.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 data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.datasources.get@.
+module Network.Google.Resource.CloudSearch.Settings.Datasources.Get
+    (
+    -- * REST Resource
+      SettingsDatasourcesGetResource
+
+    -- * Creating a Request
+    , settingsDatasourcesGet
+    , SettingsDatasourcesGet
+
+    -- * Request Lenses
+    , sdgXgafv
+    , sdgUploadProtocol
+    , sdgAccessToken
+    , sdgUploadType
+    , sdgName
+    , sdgDebugOptionsEnableDebugging
+    , sdgCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.datasources.get@ method which the
+-- 'SettingsDatasourcesGet' request conforms to.
+type SettingsDatasourcesGetResource =
+     "v1" :>
+       "settings" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] DataSource
+
+-- | Gets a data source.
+--
+-- /See:/ 'settingsDatasourcesGet' smart constructor.
+data SettingsDatasourcesGet = SettingsDatasourcesGet'
+    { _sdgXgafv                       :: !(Maybe Xgafv)
+    , _sdgUploadProtocol              :: !(Maybe Text)
+    , _sdgAccessToken                 :: !(Maybe Text)
+    , _sdgUploadType                  :: !(Maybe Text)
+    , _sdgName                        :: !Text
+    , _sdgDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _sdgCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsDatasourcesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdgXgafv'
+--
+-- * 'sdgUploadProtocol'
+--
+-- * 'sdgAccessToken'
+--
+-- * 'sdgUploadType'
+--
+-- * 'sdgName'
+--
+-- * 'sdgDebugOptionsEnableDebugging'
+--
+-- * 'sdgCallback'
+settingsDatasourcesGet
+    :: Text -- ^ 'sdgName'
+    -> SettingsDatasourcesGet
+settingsDatasourcesGet pSdgName_ =
+    SettingsDatasourcesGet'
+    { _sdgXgafv = Nothing
+    , _sdgUploadProtocol = Nothing
+    , _sdgAccessToken = Nothing
+    , _sdgUploadType = Nothing
+    , _sdgName = pSdgName_
+    , _sdgDebugOptionsEnableDebugging = Nothing
+    , _sdgCallback = Nothing
+    }
+
+-- | V1 error format.
+sdgXgafv :: Lens' SettingsDatasourcesGet (Maybe Xgafv)
+sdgXgafv = lens _sdgXgafv (\ s a -> s{_sdgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdgUploadProtocol :: Lens' SettingsDatasourcesGet (Maybe Text)
+sdgUploadProtocol
+  = lens _sdgUploadProtocol
+      (\ s a -> s{_sdgUploadProtocol = a})
+
+-- | OAuth access token.
+sdgAccessToken :: Lens' SettingsDatasourcesGet (Maybe Text)
+sdgAccessToken
+  = lens _sdgAccessToken
+      (\ s a -> s{_sdgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdgUploadType :: Lens' SettingsDatasourcesGet (Maybe Text)
+sdgUploadType
+  = lens _sdgUploadType
+      (\ s a -> s{_sdgUploadType = a})
+
+-- | Name of the data source resource. Format: datasources\/{source_id}.
+sdgName :: Lens' SettingsDatasourcesGet Text
+sdgName = lens _sdgName (\ s a -> s{_sdgName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+sdgDebugOptionsEnableDebugging :: Lens' SettingsDatasourcesGet (Maybe Bool)
+sdgDebugOptionsEnableDebugging
+  = lens _sdgDebugOptionsEnableDebugging
+      (\ s a -> s{_sdgDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+sdgCallback :: Lens' SettingsDatasourcesGet (Maybe Text)
+sdgCallback
+  = lens _sdgCallback (\ s a -> s{_sdgCallback = a})
+
+instance GoogleRequest SettingsDatasourcesGet where
+        type Rs SettingsDatasourcesGet = DataSource
+        type Scopes SettingsDatasourcesGet =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient SettingsDatasourcesGet'{..}
+          = go _sdgName _sdgXgafv _sdgUploadProtocol
+              _sdgAccessToken
+              _sdgUploadType
+              _sdgDebugOptionsEnableDebugging
+              _sdgCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SettingsDatasourcesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/List.hs b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/List.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.CloudSearch.Settings.Datasources.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 data sources.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.datasources.list@.
+module Network.Google.Resource.CloudSearch.Settings.Datasources.List
+    (
+    -- * REST Resource
+      SettingsDatasourcesListResource
+
+    -- * Creating a Request
+    , settingsDatasourcesList
+    , SettingsDatasourcesList
+
+    -- * Request Lenses
+    , sdlXgafv
+    , sdlUploadProtocol
+    , sdlAccessToken
+    , sdlUploadType
+    , sdlDebugOptionsEnableDebugging
+    , sdlPageToken
+    , sdlPageSize
+    , sdlCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.datasources.list@ method which the
+-- 'SettingsDatasourcesList' request conforms to.
+type SettingsDatasourcesListResource =
+     "v1" :>
+       "settings" :>
+         "datasources" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListDataSourceResponse
+
+-- | Lists data sources.
+--
+-- /See:/ 'settingsDatasourcesList' smart constructor.
+data SettingsDatasourcesList = SettingsDatasourcesList'
+    { _sdlXgafv                       :: !(Maybe Xgafv)
+    , _sdlUploadProtocol              :: !(Maybe Text)
+    , _sdlAccessToken                 :: !(Maybe Text)
+    , _sdlUploadType                  :: !(Maybe Text)
+    , _sdlDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _sdlPageToken                   :: !(Maybe Text)
+    , _sdlPageSize                    :: !(Maybe (Textual Int32))
+    , _sdlCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsDatasourcesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdlXgafv'
+--
+-- * 'sdlUploadProtocol'
+--
+-- * 'sdlAccessToken'
+--
+-- * 'sdlUploadType'
+--
+-- * 'sdlDebugOptionsEnableDebugging'
+--
+-- * 'sdlPageToken'
+--
+-- * 'sdlPageSize'
+--
+-- * 'sdlCallback'
+settingsDatasourcesList
+    :: SettingsDatasourcesList
+settingsDatasourcesList =
+    SettingsDatasourcesList'
+    { _sdlXgafv = Nothing
+    , _sdlUploadProtocol = Nothing
+    , _sdlAccessToken = Nothing
+    , _sdlUploadType = Nothing
+    , _sdlDebugOptionsEnableDebugging = Nothing
+    , _sdlPageToken = Nothing
+    , _sdlPageSize = Nothing
+    , _sdlCallback = Nothing
+    }
+
+-- | V1 error format.
+sdlXgafv :: Lens' SettingsDatasourcesList (Maybe Xgafv)
+sdlXgafv = lens _sdlXgafv (\ s a -> s{_sdlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdlUploadProtocol :: Lens' SettingsDatasourcesList (Maybe Text)
+sdlUploadProtocol
+  = lens _sdlUploadProtocol
+      (\ s a -> s{_sdlUploadProtocol = a})
+
+-- | OAuth access token.
+sdlAccessToken :: Lens' SettingsDatasourcesList (Maybe Text)
+sdlAccessToken
+  = lens _sdlAccessToken
+      (\ s a -> s{_sdlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdlUploadType :: Lens' SettingsDatasourcesList (Maybe Text)
+sdlUploadType
+  = lens _sdlUploadType
+      (\ s a -> s{_sdlUploadType = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+sdlDebugOptionsEnableDebugging :: Lens' SettingsDatasourcesList (Maybe Bool)
+sdlDebugOptionsEnableDebugging
+  = lens _sdlDebugOptionsEnableDebugging
+      (\ s a -> s{_sdlDebugOptionsEnableDebugging = a})
+
+-- | Starting index of the results.
+sdlPageToken :: Lens' SettingsDatasourcesList (Maybe Text)
+sdlPageToken
+  = lens _sdlPageToken (\ s a -> s{_sdlPageToken = a})
+
+-- | Maximum number of data sources to fetch in a request. The max value is
+-- 100.
+-- The default value is 10
+sdlPageSize :: Lens' SettingsDatasourcesList (Maybe Int32)
+sdlPageSize
+  = lens _sdlPageSize (\ s a -> s{_sdlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+sdlCallback :: Lens' SettingsDatasourcesList (Maybe Text)
+sdlCallback
+  = lens _sdlCallback (\ s a -> s{_sdlCallback = a})
+
+instance GoogleRequest SettingsDatasourcesList where
+        type Rs SettingsDatasourcesList =
+             ListDataSourceResponse
+        type Scopes SettingsDatasourcesList =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient SettingsDatasourcesList'{..}
+          = go _sdlXgafv _sdlUploadProtocol _sdlAccessToken
+              _sdlUploadType
+              _sdlDebugOptionsEnableDebugging
+              _sdlPageToken
+              _sdlPageSize
+              _sdlCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SettingsDatasourcesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Update.hs b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/Datasources/Update.hs
@@ -0,0 +1,163 @@
+{-# 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.CloudSearch.Settings.Datasources.Update
+-- 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 data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.datasources.update@.
+module Network.Google.Resource.CloudSearch.Settings.Datasources.Update
+    (
+    -- * REST Resource
+      SettingsDatasourcesUpdateResource
+
+    -- * Creating a Request
+    , settingsDatasourcesUpdate
+    , SettingsDatasourcesUpdate
+
+    -- * Request Lenses
+    , sduXgafv
+    , sduUploadProtocol
+    , sduAccessToken
+    , sduUploadType
+    , sduPayload
+    , sduName
+    , sduCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.datasources.update@ method which the
+-- 'SettingsDatasourcesUpdate' request conforms to.
+type SettingsDatasourcesUpdateResource =
+     "v1" :>
+       "settings" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] UpdateDataSourceRequest :>
+                         Put '[JSON] Operation
+
+-- | Updates a data source.
+--
+-- /See:/ 'settingsDatasourcesUpdate' smart constructor.
+data SettingsDatasourcesUpdate = SettingsDatasourcesUpdate'
+    { _sduXgafv          :: !(Maybe Xgafv)
+    , _sduUploadProtocol :: !(Maybe Text)
+    , _sduAccessToken    :: !(Maybe Text)
+    , _sduUploadType     :: !(Maybe Text)
+    , _sduPayload        :: !UpdateDataSourceRequest
+    , _sduName           :: !Text
+    , _sduCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsDatasourcesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sduXgafv'
+--
+-- * 'sduUploadProtocol'
+--
+-- * 'sduAccessToken'
+--
+-- * 'sduUploadType'
+--
+-- * 'sduPayload'
+--
+-- * 'sduName'
+--
+-- * 'sduCallback'
+settingsDatasourcesUpdate
+    :: UpdateDataSourceRequest -- ^ 'sduPayload'
+    -> Text -- ^ 'sduName'
+    -> SettingsDatasourcesUpdate
+settingsDatasourcesUpdate pSduPayload_ pSduName_ =
+    SettingsDatasourcesUpdate'
+    { _sduXgafv = Nothing
+    , _sduUploadProtocol = Nothing
+    , _sduAccessToken = Nothing
+    , _sduUploadType = Nothing
+    , _sduPayload = pSduPayload_
+    , _sduName = pSduName_
+    , _sduCallback = Nothing
+    }
+
+-- | V1 error format.
+sduXgafv :: Lens' SettingsDatasourcesUpdate (Maybe Xgafv)
+sduXgafv = lens _sduXgafv (\ s a -> s{_sduXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sduUploadProtocol :: Lens' SettingsDatasourcesUpdate (Maybe Text)
+sduUploadProtocol
+  = lens _sduUploadProtocol
+      (\ s a -> s{_sduUploadProtocol = a})
+
+-- | OAuth access token.
+sduAccessToken :: Lens' SettingsDatasourcesUpdate (Maybe Text)
+sduAccessToken
+  = lens _sduAccessToken
+      (\ s a -> s{_sduAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sduUploadType :: Lens' SettingsDatasourcesUpdate (Maybe Text)
+sduUploadType
+  = lens _sduUploadType
+      (\ s a -> s{_sduUploadType = a})
+
+-- | Multipart request metadata.
+sduPayload :: Lens' SettingsDatasourcesUpdate UpdateDataSourceRequest
+sduPayload
+  = lens _sduPayload (\ s a -> s{_sduPayload = a})
+
+-- | Name of the data source resource. Format: datasources\/{source_id}.
+-- The name is ignored when creating a data source.
+sduName :: Lens' SettingsDatasourcesUpdate Text
+sduName = lens _sduName (\ s a -> s{_sduName = a})
+
+-- | JSONP
+sduCallback :: Lens' SettingsDatasourcesUpdate (Maybe Text)
+sduCallback
+  = lens _sduCallback (\ s a -> s{_sduCallback = a})
+
+instance GoogleRequest SettingsDatasourcesUpdate
+         where
+        type Rs SettingsDatasourcesUpdate = Operation
+        type Scopes SettingsDatasourcesUpdate =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.indexing"]
+        requestClient SettingsDatasourcesUpdate'{..}
+          = go _sduName _sduXgafv _sduUploadProtocol
+              _sduAccessToken
+              _sduUploadType
+              _sduCallback
+              (Just AltJSON)
+              _sduPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SettingsDatasourcesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Create.hs b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Create.hs
@@ -0,0 +1,153 @@
+{-# 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.CloudSearch.Settings.SearchApplications.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 search application.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.searchapplications.create@.
+module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Create
+    (
+    -- * REST Resource
+      SettingsSearchApplicationsCreateResource
+
+    -- * Creating a Request
+    , settingsSearchApplicationsCreate
+    , SettingsSearchApplicationsCreate
+
+    -- * Request Lenses
+    , ssacXgafv
+    , ssacUploadProtocol
+    , ssacAccessToken
+    , ssacUploadType
+    , ssacPayload
+    , ssacCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.searchapplications.create@ method which the
+-- 'SettingsSearchApplicationsCreate' request conforms to.
+type SettingsSearchApplicationsCreateResource =
+     "v1" :>
+       "settings" :>
+         "searchapplications" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] SearchApplication :>
+                         Post '[JSON] Operation
+
+-- | Creates a search application.
+--
+-- /See:/ 'settingsSearchApplicationsCreate' smart constructor.
+data SettingsSearchApplicationsCreate = SettingsSearchApplicationsCreate'
+    { _ssacXgafv          :: !(Maybe Xgafv)
+    , _ssacUploadProtocol :: !(Maybe Text)
+    , _ssacAccessToken    :: !(Maybe Text)
+    , _ssacUploadType     :: !(Maybe Text)
+    , _ssacPayload        :: !SearchApplication
+    , _ssacCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsSearchApplicationsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssacXgafv'
+--
+-- * 'ssacUploadProtocol'
+--
+-- * 'ssacAccessToken'
+--
+-- * 'ssacUploadType'
+--
+-- * 'ssacPayload'
+--
+-- * 'ssacCallback'
+settingsSearchApplicationsCreate
+    :: SearchApplication -- ^ 'ssacPayload'
+    -> SettingsSearchApplicationsCreate
+settingsSearchApplicationsCreate pSsacPayload_ =
+    SettingsSearchApplicationsCreate'
+    { _ssacXgafv = Nothing
+    , _ssacUploadProtocol = Nothing
+    , _ssacAccessToken = Nothing
+    , _ssacUploadType = Nothing
+    , _ssacPayload = pSsacPayload_
+    , _ssacCallback = Nothing
+    }
+
+-- | V1 error format.
+ssacXgafv :: Lens' SettingsSearchApplicationsCreate (Maybe Xgafv)
+ssacXgafv
+  = lens _ssacXgafv (\ s a -> s{_ssacXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ssacUploadProtocol :: Lens' SettingsSearchApplicationsCreate (Maybe Text)
+ssacUploadProtocol
+  = lens _ssacUploadProtocol
+      (\ s a -> s{_ssacUploadProtocol = a})
+
+-- | OAuth access token.
+ssacAccessToken :: Lens' SettingsSearchApplicationsCreate (Maybe Text)
+ssacAccessToken
+  = lens _ssacAccessToken
+      (\ s a -> s{_ssacAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ssacUploadType :: Lens' SettingsSearchApplicationsCreate (Maybe Text)
+ssacUploadType
+  = lens _ssacUploadType
+      (\ s a -> s{_ssacUploadType = a})
+
+-- | Multipart request metadata.
+ssacPayload :: Lens' SettingsSearchApplicationsCreate SearchApplication
+ssacPayload
+  = lens _ssacPayload (\ s a -> s{_ssacPayload = a})
+
+-- | JSONP
+ssacCallback :: Lens' SettingsSearchApplicationsCreate (Maybe Text)
+ssacCallback
+  = lens _ssacCallback (\ s a -> s{_ssacCallback = a})
+
+instance GoogleRequest
+         SettingsSearchApplicationsCreate where
+        type Rs SettingsSearchApplicationsCreate = Operation
+        type Scopes SettingsSearchApplicationsCreate =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient SettingsSearchApplicationsCreate'{..}
+          = go _ssacXgafv _ssacUploadProtocol _ssacAccessToken
+              _ssacUploadType
+              _ssacCallback
+              (Just AltJSON)
+              _ssacPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SettingsSearchApplicationsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Delete.hs b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Delete.hs
@@ -0,0 +1,165 @@
+{-# 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.CloudSearch.Settings.SearchApplications.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 search application.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.searchapplications.delete@.
+module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Delete
+    (
+    -- * REST Resource
+      SettingsSearchApplicationsDeleteResource
+
+    -- * Creating a Request
+    , settingsSearchApplicationsDelete
+    , SettingsSearchApplicationsDelete
+
+    -- * Request Lenses
+    , ssadXgafv
+    , ssadUploadProtocol
+    , ssadAccessToken
+    , ssadUploadType
+    , ssadName
+    , ssadDebugOptionsEnableDebugging
+    , ssadCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.searchapplications.delete@ method which the
+-- 'SettingsSearchApplicationsDelete' request conforms to.
+type SettingsSearchApplicationsDeleteResource =
+     "v1" :>
+       "settings" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Delete '[JSON] Operation
+
+-- | Deletes a search application.
+--
+-- /See:/ 'settingsSearchApplicationsDelete' smart constructor.
+data SettingsSearchApplicationsDelete = SettingsSearchApplicationsDelete'
+    { _ssadXgafv                       :: !(Maybe Xgafv)
+    , _ssadUploadProtocol              :: !(Maybe Text)
+    , _ssadAccessToken                 :: !(Maybe Text)
+    , _ssadUploadType                  :: !(Maybe Text)
+    , _ssadName                        :: !Text
+    , _ssadDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _ssadCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsSearchApplicationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssadXgafv'
+--
+-- * 'ssadUploadProtocol'
+--
+-- * 'ssadAccessToken'
+--
+-- * 'ssadUploadType'
+--
+-- * 'ssadName'
+--
+-- * 'ssadDebugOptionsEnableDebugging'
+--
+-- * 'ssadCallback'
+settingsSearchApplicationsDelete
+    :: Text -- ^ 'ssadName'
+    -> SettingsSearchApplicationsDelete
+settingsSearchApplicationsDelete pSsadName_ =
+    SettingsSearchApplicationsDelete'
+    { _ssadXgafv = Nothing
+    , _ssadUploadProtocol = Nothing
+    , _ssadAccessToken = Nothing
+    , _ssadUploadType = Nothing
+    , _ssadName = pSsadName_
+    , _ssadDebugOptionsEnableDebugging = Nothing
+    , _ssadCallback = Nothing
+    }
+
+-- | V1 error format.
+ssadXgafv :: Lens' SettingsSearchApplicationsDelete (Maybe Xgafv)
+ssadXgafv
+  = lens _ssadXgafv (\ s a -> s{_ssadXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ssadUploadProtocol :: Lens' SettingsSearchApplicationsDelete (Maybe Text)
+ssadUploadProtocol
+  = lens _ssadUploadProtocol
+      (\ s a -> s{_ssadUploadProtocol = a})
+
+-- | OAuth access token.
+ssadAccessToken :: Lens' SettingsSearchApplicationsDelete (Maybe Text)
+ssadAccessToken
+  = lens _ssadAccessToken
+      (\ s a -> s{_ssadAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ssadUploadType :: Lens' SettingsSearchApplicationsDelete (Maybe Text)
+ssadUploadType
+  = lens _ssadUploadType
+      (\ s a -> s{_ssadUploadType = a})
+
+-- | The name of the search application to be deleted.
+-- Format: applications\/{application_id}.
+ssadName :: Lens' SettingsSearchApplicationsDelete Text
+ssadName = lens _ssadName (\ s a -> s{_ssadName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+ssadDebugOptionsEnableDebugging :: Lens' SettingsSearchApplicationsDelete (Maybe Bool)
+ssadDebugOptionsEnableDebugging
+  = lens _ssadDebugOptionsEnableDebugging
+      (\ s a -> s{_ssadDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+ssadCallback :: Lens' SettingsSearchApplicationsDelete (Maybe Text)
+ssadCallback
+  = lens _ssadCallback (\ s a -> s{_ssadCallback = a})
+
+instance GoogleRequest
+         SettingsSearchApplicationsDelete where
+        type Rs SettingsSearchApplicationsDelete = Operation
+        type Scopes SettingsSearchApplicationsDelete =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient SettingsSearchApplicationsDelete'{..}
+          = go _ssadName _ssadXgafv _ssadUploadProtocol
+              _ssadAccessToken
+              _ssadUploadType
+              _ssadDebugOptionsEnableDebugging
+              _ssadCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SettingsSearchApplicationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Get.hs b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Get.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.CloudSearch.Settings.SearchApplications.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 specified search application.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.searchapplications.get@.
+module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Get
+    (
+    -- * REST Resource
+      SettingsSearchApplicationsGetResource
+
+    -- * Creating a Request
+    , settingsSearchApplicationsGet
+    , SettingsSearchApplicationsGet
+
+    -- * Request Lenses
+    , ssagXgafv
+    , ssagUploadProtocol
+    , ssagAccessToken
+    , ssagUploadType
+    , ssagName
+    , ssagDebugOptionsEnableDebugging
+    , ssagCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.searchapplications.get@ method which the
+-- 'SettingsSearchApplicationsGet' request conforms to.
+type SettingsSearchApplicationsGetResource =
+     "v1" :>
+       "settings" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] SearchApplication
+
+-- | Gets the specified search application.
+--
+-- /See:/ 'settingsSearchApplicationsGet' smart constructor.
+data SettingsSearchApplicationsGet = SettingsSearchApplicationsGet'
+    { _ssagXgafv                       :: !(Maybe Xgafv)
+    , _ssagUploadProtocol              :: !(Maybe Text)
+    , _ssagAccessToken                 :: !(Maybe Text)
+    , _ssagUploadType                  :: !(Maybe Text)
+    , _ssagName                        :: !Text
+    , _ssagDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _ssagCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsSearchApplicationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssagXgafv'
+--
+-- * 'ssagUploadProtocol'
+--
+-- * 'ssagAccessToken'
+--
+-- * 'ssagUploadType'
+--
+-- * 'ssagName'
+--
+-- * 'ssagDebugOptionsEnableDebugging'
+--
+-- * 'ssagCallback'
+settingsSearchApplicationsGet
+    :: Text -- ^ 'ssagName'
+    -> SettingsSearchApplicationsGet
+settingsSearchApplicationsGet pSsagName_ =
+    SettingsSearchApplicationsGet'
+    { _ssagXgafv = Nothing
+    , _ssagUploadProtocol = Nothing
+    , _ssagAccessToken = Nothing
+    , _ssagUploadType = Nothing
+    , _ssagName = pSsagName_
+    , _ssagDebugOptionsEnableDebugging = Nothing
+    , _ssagCallback = Nothing
+    }
+
+-- | V1 error format.
+ssagXgafv :: Lens' SettingsSearchApplicationsGet (Maybe Xgafv)
+ssagXgafv
+  = lens _ssagXgafv (\ s a -> s{_ssagXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ssagUploadProtocol :: Lens' SettingsSearchApplicationsGet (Maybe Text)
+ssagUploadProtocol
+  = lens _ssagUploadProtocol
+      (\ s a -> s{_ssagUploadProtocol = a})
+
+-- | OAuth access token.
+ssagAccessToken :: Lens' SettingsSearchApplicationsGet (Maybe Text)
+ssagAccessToken
+  = lens _ssagAccessToken
+      (\ s a -> s{_ssagAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ssagUploadType :: Lens' SettingsSearchApplicationsGet (Maybe Text)
+ssagUploadType
+  = lens _ssagUploadType
+      (\ s a -> s{_ssagUploadType = a})
+
+-- | Name of the search application.
+-- Format: applications\/{application_id}.
+ssagName :: Lens' SettingsSearchApplicationsGet Text
+ssagName = lens _ssagName (\ s a -> s{_ssagName = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+ssagDebugOptionsEnableDebugging :: Lens' SettingsSearchApplicationsGet (Maybe Bool)
+ssagDebugOptionsEnableDebugging
+  = lens _ssagDebugOptionsEnableDebugging
+      (\ s a -> s{_ssagDebugOptionsEnableDebugging = a})
+
+-- | JSONP
+ssagCallback :: Lens' SettingsSearchApplicationsGet (Maybe Text)
+ssagCallback
+  = lens _ssagCallback (\ s a -> s{_ssagCallback = a})
+
+instance GoogleRequest SettingsSearchApplicationsGet
+         where
+        type Rs SettingsSearchApplicationsGet =
+             SearchApplication
+        type Scopes SettingsSearchApplicationsGet =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient SettingsSearchApplicationsGet'{..}
+          = go _ssagName _ssagXgafv _ssagUploadProtocol
+              _ssagAccessToken
+              _ssagUploadType
+              _ssagDebugOptionsEnableDebugging
+              _ssagCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SettingsSearchApplicationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/List.hs b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/List.hs
@@ -0,0 +1,182 @@
+{-# 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.CloudSearch.Settings.SearchApplications.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 all search applications.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.searchapplications.list@.
+module Network.Google.Resource.CloudSearch.Settings.SearchApplications.List
+    (
+    -- * REST Resource
+      SettingsSearchApplicationsListResource
+
+    -- * Creating a Request
+    , settingsSearchApplicationsList
+    , SettingsSearchApplicationsList
+
+    -- * Request Lenses
+    , ssalXgafv
+    , ssalUploadProtocol
+    , ssalAccessToken
+    , ssalUploadType
+    , ssalDebugOptionsEnableDebugging
+    , ssalPageToken
+    , ssalPageSize
+    , ssalCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.searchapplications.list@ method which the
+-- 'SettingsSearchApplicationsList' request conforms to.
+type SettingsSearchApplicationsListResource =
+     "v1" :>
+       "settings" :>
+         "searchapplications" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "debugOptions.enableDebugging" Bool :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListSearchApplicationsResponse
+
+-- | Lists all search applications.
+--
+-- /See:/ 'settingsSearchApplicationsList' smart constructor.
+data SettingsSearchApplicationsList = SettingsSearchApplicationsList'
+    { _ssalXgafv                       :: !(Maybe Xgafv)
+    , _ssalUploadProtocol              :: !(Maybe Text)
+    , _ssalAccessToken                 :: !(Maybe Text)
+    , _ssalUploadType                  :: !(Maybe Text)
+    , _ssalDebugOptionsEnableDebugging :: !(Maybe Bool)
+    , _ssalPageToken                   :: !(Maybe Text)
+    , _ssalPageSize                    :: !(Maybe (Textual Int32))
+    , _ssalCallback                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsSearchApplicationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssalXgafv'
+--
+-- * 'ssalUploadProtocol'
+--
+-- * 'ssalAccessToken'
+--
+-- * 'ssalUploadType'
+--
+-- * 'ssalDebugOptionsEnableDebugging'
+--
+-- * 'ssalPageToken'
+--
+-- * 'ssalPageSize'
+--
+-- * 'ssalCallback'
+settingsSearchApplicationsList
+    :: SettingsSearchApplicationsList
+settingsSearchApplicationsList =
+    SettingsSearchApplicationsList'
+    { _ssalXgafv = Nothing
+    , _ssalUploadProtocol = Nothing
+    , _ssalAccessToken = Nothing
+    , _ssalUploadType = Nothing
+    , _ssalDebugOptionsEnableDebugging = Nothing
+    , _ssalPageToken = Nothing
+    , _ssalPageSize = Nothing
+    , _ssalCallback = Nothing
+    }
+
+-- | V1 error format.
+ssalXgafv :: Lens' SettingsSearchApplicationsList (Maybe Xgafv)
+ssalXgafv
+  = lens _ssalXgafv (\ s a -> s{_ssalXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ssalUploadProtocol :: Lens' SettingsSearchApplicationsList (Maybe Text)
+ssalUploadProtocol
+  = lens _ssalUploadProtocol
+      (\ s a -> s{_ssalUploadProtocol = a})
+
+-- | OAuth access token.
+ssalAccessToken :: Lens' SettingsSearchApplicationsList (Maybe Text)
+ssalAccessToken
+  = lens _ssalAccessToken
+      (\ s a -> s{_ssalAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ssalUploadType :: Lens' SettingsSearchApplicationsList (Maybe Text)
+ssalUploadType
+  = lens _ssalUploadType
+      (\ s a -> s{_ssalUploadType = a})
+
+-- | If set, the request will enable debugging features of Cloud Search. Only
+-- turn on this field, if asked by Google to help with debugging.
+ssalDebugOptionsEnableDebugging :: Lens' SettingsSearchApplicationsList (Maybe Bool)
+ssalDebugOptionsEnableDebugging
+  = lens _ssalDebugOptionsEnableDebugging
+      (\ s a -> s{_ssalDebugOptionsEnableDebugging = a})
+
+-- | The next_page_token value returned from a previous List request, if any.
+-- The default value is 10
+ssalPageToken :: Lens' SettingsSearchApplicationsList (Maybe Text)
+ssalPageToken
+  = lens _ssalPageToken
+      (\ s a -> s{_ssalPageToken = a})
+
+-- | The maximum number of items to return.
+ssalPageSize :: Lens' SettingsSearchApplicationsList (Maybe Int32)
+ssalPageSize
+  = lens _ssalPageSize (\ s a -> s{_ssalPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+ssalCallback :: Lens' SettingsSearchApplicationsList (Maybe Text)
+ssalCallback
+  = lens _ssalCallback (\ s a -> s{_ssalCallback = a})
+
+instance GoogleRequest SettingsSearchApplicationsList
+         where
+        type Rs SettingsSearchApplicationsList =
+             ListSearchApplicationsResponse
+        type Scopes SettingsSearchApplicationsList =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient SettingsSearchApplicationsList'{..}
+          = go _ssalXgafv _ssalUploadProtocol _ssalAccessToken
+              _ssalUploadType
+              _ssalDebugOptionsEnableDebugging
+              _ssalPageToken
+              _ssalPageSize
+              _ssalCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SettingsSearchApplicationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Reset.hs b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Reset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Reset.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.CloudSearch.Settings.SearchApplications.Reset
+-- 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)
+--
+-- Resets a search application to default settings. This will return an
+-- empty response.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.searchapplications.reset@.
+module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Reset
+    (
+    -- * REST Resource
+      SettingsSearchApplicationsResetResource
+
+    -- * Creating a Request
+    , settingsSearchApplicationsReset
+    , SettingsSearchApplicationsReset
+
+    -- * Request Lenses
+    , ssarXgafv
+    , ssarUploadProtocol
+    , ssarAccessToken
+    , ssarUploadType
+    , ssarPayload
+    , ssarName
+    , ssarCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.searchapplications.reset@ method which the
+-- 'SettingsSearchApplicationsReset' request conforms to.
+type SettingsSearchApplicationsResetResource =
+     "v1" :>
+       "settings" :>
+         CaptureMode "name" "reset" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] ResetSearchApplicationRequest :>
+                         Post '[JSON] Operation
+
+-- | Resets a search application to default settings. This will return an
+-- empty response.
+--
+-- /See:/ 'settingsSearchApplicationsReset' smart constructor.
+data SettingsSearchApplicationsReset = SettingsSearchApplicationsReset'
+    { _ssarXgafv          :: !(Maybe Xgafv)
+    , _ssarUploadProtocol :: !(Maybe Text)
+    , _ssarAccessToken    :: !(Maybe Text)
+    , _ssarUploadType     :: !(Maybe Text)
+    , _ssarPayload        :: !ResetSearchApplicationRequest
+    , _ssarName           :: !Text
+    , _ssarCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsSearchApplicationsReset' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssarXgafv'
+--
+-- * 'ssarUploadProtocol'
+--
+-- * 'ssarAccessToken'
+--
+-- * 'ssarUploadType'
+--
+-- * 'ssarPayload'
+--
+-- * 'ssarName'
+--
+-- * 'ssarCallback'
+settingsSearchApplicationsReset
+    :: ResetSearchApplicationRequest -- ^ 'ssarPayload'
+    -> Text -- ^ 'ssarName'
+    -> SettingsSearchApplicationsReset
+settingsSearchApplicationsReset pSsarPayload_ pSsarName_ =
+    SettingsSearchApplicationsReset'
+    { _ssarXgafv = Nothing
+    , _ssarUploadProtocol = Nothing
+    , _ssarAccessToken = Nothing
+    , _ssarUploadType = Nothing
+    , _ssarPayload = pSsarPayload_
+    , _ssarName = pSsarName_
+    , _ssarCallback = Nothing
+    }
+
+-- | V1 error format.
+ssarXgafv :: Lens' SettingsSearchApplicationsReset (Maybe Xgafv)
+ssarXgafv
+  = lens _ssarXgafv (\ s a -> s{_ssarXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ssarUploadProtocol :: Lens' SettingsSearchApplicationsReset (Maybe Text)
+ssarUploadProtocol
+  = lens _ssarUploadProtocol
+      (\ s a -> s{_ssarUploadProtocol = a})
+
+-- | OAuth access token.
+ssarAccessToken :: Lens' SettingsSearchApplicationsReset (Maybe Text)
+ssarAccessToken
+  = lens _ssarAccessToken
+      (\ s a -> s{_ssarAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ssarUploadType :: Lens' SettingsSearchApplicationsReset (Maybe Text)
+ssarUploadType
+  = lens _ssarUploadType
+      (\ s a -> s{_ssarUploadType = a})
+
+-- | Multipart request metadata.
+ssarPayload :: Lens' SettingsSearchApplicationsReset ResetSearchApplicationRequest
+ssarPayload
+  = lens _ssarPayload (\ s a -> s{_ssarPayload = a})
+
+-- | The name of the search application to be reset.
+-- Format: applications\/{application_id}.
+ssarName :: Lens' SettingsSearchApplicationsReset Text
+ssarName = lens _ssarName (\ s a -> s{_ssarName = a})
+
+-- | JSONP
+ssarCallback :: Lens' SettingsSearchApplicationsReset (Maybe Text)
+ssarCallback
+  = lens _ssarCallback (\ s a -> s{_ssarCallback = a})
+
+instance GoogleRequest
+         SettingsSearchApplicationsReset where
+        type Rs SettingsSearchApplicationsReset = Operation
+        type Scopes SettingsSearchApplicationsReset =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient SettingsSearchApplicationsReset'{..}
+          = go _ssarName _ssarXgafv _ssarUploadProtocol
+              _ssarAccessToken
+              _ssarUploadType
+              _ssarCallback
+              (Just AltJSON)
+              _ssarPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SettingsSearchApplicationsResetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Update.hs b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Settings/SearchApplications/Update.hs
@@ -0,0 +1,165 @@
+{-# 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.CloudSearch.Settings.SearchApplications.Update
+-- 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 search application.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.settings.searchapplications.update@.
+module Network.Google.Resource.CloudSearch.Settings.SearchApplications.Update
+    (
+    -- * REST Resource
+      SettingsSearchApplicationsUpdateResource
+
+    -- * Creating a Request
+    , settingsSearchApplicationsUpdate
+    , SettingsSearchApplicationsUpdate
+
+    -- * Request Lenses
+    , ssauXgafv
+    , ssauUploadProtocol
+    , ssauAccessToken
+    , ssauUploadType
+    , ssauPayload
+    , ssauName
+    , ssauCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.settings.searchapplications.update@ method which the
+-- 'SettingsSearchApplicationsUpdate' request conforms to.
+type SettingsSearchApplicationsUpdateResource =
+     "v1" :>
+       "settings" :>
+         Capture "name" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] SearchApplication :>
+                         Put '[JSON] Operation
+
+-- | Updates a search application.
+--
+-- /See:/ 'settingsSearchApplicationsUpdate' smart constructor.
+data SettingsSearchApplicationsUpdate = SettingsSearchApplicationsUpdate'
+    { _ssauXgafv          :: !(Maybe Xgafv)
+    , _ssauUploadProtocol :: !(Maybe Text)
+    , _ssauAccessToken    :: !(Maybe Text)
+    , _ssauUploadType     :: !(Maybe Text)
+    , _ssauPayload        :: !SearchApplication
+    , _ssauName           :: !Text
+    , _ssauCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SettingsSearchApplicationsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssauXgafv'
+--
+-- * 'ssauUploadProtocol'
+--
+-- * 'ssauAccessToken'
+--
+-- * 'ssauUploadType'
+--
+-- * 'ssauPayload'
+--
+-- * 'ssauName'
+--
+-- * 'ssauCallback'
+settingsSearchApplicationsUpdate
+    :: SearchApplication -- ^ 'ssauPayload'
+    -> Text -- ^ 'ssauName'
+    -> SettingsSearchApplicationsUpdate
+settingsSearchApplicationsUpdate pSsauPayload_ pSsauName_ =
+    SettingsSearchApplicationsUpdate'
+    { _ssauXgafv = Nothing
+    , _ssauUploadProtocol = Nothing
+    , _ssauAccessToken = Nothing
+    , _ssauUploadType = Nothing
+    , _ssauPayload = pSsauPayload_
+    , _ssauName = pSsauName_
+    , _ssauCallback = Nothing
+    }
+
+-- | V1 error format.
+ssauXgafv :: Lens' SettingsSearchApplicationsUpdate (Maybe Xgafv)
+ssauXgafv
+  = lens _ssauXgafv (\ s a -> s{_ssauXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ssauUploadProtocol :: Lens' SettingsSearchApplicationsUpdate (Maybe Text)
+ssauUploadProtocol
+  = lens _ssauUploadProtocol
+      (\ s a -> s{_ssauUploadProtocol = a})
+
+-- | OAuth access token.
+ssauAccessToken :: Lens' SettingsSearchApplicationsUpdate (Maybe Text)
+ssauAccessToken
+  = lens _ssauAccessToken
+      (\ s a -> s{_ssauAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ssauUploadType :: Lens' SettingsSearchApplicationsUpdate (Maybe Text)
+ssauUploadType
+  = lens _ssauUploadType
+      (\ s a -> s{_ssauUploadType = a})
+
+-- | Multipart request metadata.
+ssauPayload :: Lens' SettingsSearchApplicationsUpdate SearchApplication
+ssauPayload
+  = lens _ssauPayload (\ s a -> s{_ssauPayload = a})
+
+-- | Name of the Search Application.
+-- Format: searchapplications\/{application_id}.
+ssauName :: Lens' SettingsSearchApplicationsUpdate Text
+ssauName = lens _ssauName (\ s a -> s{_ssauName = a})
+
+-- | JSONP
+ssauCallback :: Lens' SettingsSearchApplicationsUpdate (Maybe Text)
+ssauCallback
+  = lens _ssauCallback (\ s a -> s{_ssauCallback = a})
+
+instance GoogleRequest
+         SettingsSearchApplicationsUpdate where
+        type Rs SettingsSearchApplicationsUpdate = Operation
+        type Scopes SettingsSearchApplicationsUpdate =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.settings",
+               "https://www.googleapis.com/auth/cloud_search.settings.query"]
+        requestClient SettingsSearchApplicationsUpdate'{..}
+          = go _ssauName _ssauXgafv _ssauUploadProtocol
+              _ssauAccessToken
+              _ssauUploadType
+              _ssauCallback
+              (Just AltJSON)
+              _ssauPayload
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy SettingsSearchApplicationsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Stats/GetIndex.hs b/gen/Network/Google/Resource/CloudSearch/Stats/GetIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Stats/GetIndex.hs
@@ -0,0 +1,219 @@
+{-# 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.CloudSearch.Stats.GetIndex
+-- 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 indexed item statistics aggreggated across all data sources.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.stats.getIndex@.
+module Network.Google.Resource.CloudSearch.Stats.GetIndex
+    (
+    -- * REST Resource
+      StatsGetIndexResource
+
+    -- * Creating a Request
+    , statsGetIndex
+    , StatsGetIndex
+
+    -- * Request Lenses
+    , sgiFromDateMonth
+    , sgiXgafv
+    , sgiUploadProtocol
+    , sgiFromDateDay
+    , sgiAccessToken
+    , sgiUploadType
+    , sgiFromDateYear
+    , sgiToDateDay
+    , sgiToDateYear
+    , sgiToDateMonth
+    , sgiCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.stats.getIndex@ method which the
+-- 'StatsGetIndex' request conforms to.
+type StatsGetIndexResource =
+     "v1" :>
+       "stats" :>
+         "index" :>
+           QueryParam "fromDate.month" (Textual Int32) :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "fromDate.day" (Textual Int32) :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "fromDate.year" (Textual Int32) :>
+                         QueryParam "toDate.day" (Textual Int32) :>
+                           QueryParam "toDate.year" (Textual Int32) :>
+                             QueryParam "toDate.month" (Textual Int32) :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON] GetCustomerIndexStatsResponse
+
+-- | Gets indexed item statistics aggreggated across all data sources.
+--
+-- /See:/ 'statsGetIndex' smart constructor.
+data StatsGetIndex = StatsGetIndex'
+    { _sgiFromDateMonth  :: !(Maybe (Textual Int32))
+    , _sgiXgafv          :: !(Maybe Xgafv)
+    , _sgiUploadProtocol :: !(Maybe Text)
+    , _sgiFromDateDay    :: !(Maybe (Textual Int32))
+    , _sgiAccessToken    :: !(Maybe Text)
+    , _sgiUploadType     :: !(Maybe Text)
+    , _sgiFromDateYear   :: !(Maybe (Textual Int32))
+    , _sgiToDateDay      :: !(Maybe (Textual Int32))
+    , _sgiToDateYear     :: !(Maybe (Textual Int32))
+    , _sgiToDateMonth    :: !(Maybe (Textual Int32))
+    , _sgiCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatsGetIndex' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgiFromDateMonth'
+--
+-- * 'sgiXgafv'
+--
+-- * 'sgiUploadProtocol'
+--
+-- * 'sgiFromDateDay'
+--
+-- * 'sgiAccessToken'
+--
+-- * 'sgiUploadType'
+--
+-- * 'sgiFromDateYear'
+--
+-- * 'sgiToDateDay'
+--
+-- * 'sgiToDateYear'
+--
+-- * 'sgiToDateMonth'
+--
+-- * 'sgiCallback'
+statsGetIndex
+    :: StatsGetIndex
+statsGetIndex =
+    StatsGetIndex'
+    { _sgiFromDateMonth = Nothing
+    , _sgiXgafv = Nothing
+    , _sgiUploadProtocol = Nothing
+    , _sgiFromDateDay = Nothing
+    , _sgiAccessToken = Nothing
+    , _sgiUploadType = Nothing
+    , _sgiFromDateYear = Nothing
+    , _sgiToDateDay = Nothing
+    , _sgiToDateYear = Nothing
+    , _sgiToDateMonth = Nothing
+    , _sgiCallback = Nothing
+    }
+
+-- | Month of date. Must be from 1 to 12.
+sgiFromDateMonth :: Lens' StatsGetIndex (Maybe Int32)
+sgiFromDateMonth
+  = lens _sgiFromDateMonth
+      (\ s a -> s{_sgiFromDateMonth = a})
+      . mapping _Coerce
+
+-- | V1 error format.
+sgiXgafv :: Lens' StatsGetIndex (Maybe Xgafv)
+sgiXgafv = lens _sgiXgafv (\ s a -> s{_sgiXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sgiUploadProtocol :: Lens' StatsGetIndex (Maybe Text)
+sgiUploadProtocol
+  = lens _sgiUploadProtocol
+      (\ s a -> s{_sgiUploadProtocol = a})
+
+-- | Day of month. Must be from 1 to 31 and valid for the year and month.
+sgiFromDateDay :: Lens' StatsGetIndex (Maybe Int32)
+sgiFromDateDay
+  = lens _sgiFromDateDay
+      (\ s a -> s{_sgiFromDateDay = a})
+      . mapping _Coerce
+
+-- | OAuth access token.
+sgiAccessToken :: Lens' StatsGetIndex (Maybe Text)
+sgiAccessToken
+  = lens _sgiAccessToken
+      (\ s a -> s{_sgiAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sgiUploadType :: Lens' StatsGetIndex (Maybe Text)
+sgiUploadType
+  = lens _sgiUploadType
+      (\ s a -> s{_sgiUploadType = a})
+
+-- | Year of date. Must be from 1 to 9999.
+sgiFromDateYear :: Lens' StatsGetIndex (Maybe Int32)
+sgiFromDateYear
+  = lens _sgiFromDateYear
+      (\ s a -> s{_sgiFromDateYear = a})
+      . mapping _Coerce
+
+-- | Day of month. Must be from 1 to 31 and valid for the year and month.
+sgiToDateDay :: Lens' StatsGetIndex (Maybe Int32)
+sgiToDateDay
+  = lens _sgiToDateDay (\ s a -> s{_sgiToDateDay = a})
+      . mapping _Coerce
+
+-- | Year of date. Must be from 1 to 9999.
+sgiToDateYear :: Lens' StatsGetIndex (Maybe Int32)
+sgiToDateYear
+  = lens _sgiToDateYear
+      (\ s a -> s{_sgiToDateYear = a})
+      . mapping _Coerce
+
+-- | Month of date. Must be from 1 to 12.
+sgiToDateMonth :: Lens' StatsGetIndex (Maybe Int32)
+sgiToDateMonth
+  = lens _sgiToDateMonth
+      (\ s a -> s{_sgiToDateMonth = a})
+      . mapping _Coerce
+
+-- | JSONP
+sgiCallback :: Lens' StatsGetIndex (Maybe Text)
+sgiCallback
+  = lens _sgiCallback (\ s a -> s{_sgiCallback = a})
+
+instance GoogleRequest StatsGetIndex where
+        type Rs StatsGetIndex = GetCustomerIndexStatsResponse
+        type Scopes StatsGetIndex =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.stats",
+               "https://www.googleapis.com/auth/cloud_search.stats.indexing"]
+        requestClient StatsGetIndex'{..}
+          = go _sgiFromDateMonth _sgiXgafv _sgiUploadProtocol
+              _sgiFromDateDay
+              _sgiAccessToken
+              _sgiUploadType
+              _sgiFromDateYear
+              _sgiToDateDay
+              _sgiToDateYear
+              _sgiToDateMonth
+              _sgiCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient (Proxy :: Proxy StatsGetIndexResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudSearch/Stats/Index/Datasources/Get.hs b/gen/Network/Google/Resource/CloudSearch/Stats/Index/Datasources/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudSearch/Stats/Index/Datasources/Get.hs
@@ -0,0 +1,236 @@
+{-# 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.CloudSearch.Stats.Index.Datasources.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 indexed item statistics for a single data source.
+--
+-- /See:/ <https://gsuite.google.com/products/cloud-search/ Cloud Search API Reference> for @cloudsearch.stats.index.datasources.get@.
+module Network.Google.Resource.CloudSearch.Stats.Index.Datasources.Get
+    (
+    -- * REST Resource
+      StatsIndexDatasourcesGetResource
+
+    -- * Creating a Request
+    , statsIndexDatasourcesGet
+    , StatsIndexDatasourcesGet
+
+    -- * Request Lenses
+    , sidgFromDateMonth
+    , sidgXgafv
+    , sidgUploadProtocol
+    , sidgFromDateDay
+    , sidgAccessToken
+    , sidgUploadType
+    , sidgFromDateYear
+    , sidgName
+    , sidgToDateDay
+    , sidgToDateYear
+    , sidgToDateMonth
+    , sidgCallback
+    ) where
+
+import           Network.Google.CloudSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudsearch.stats.index.datasources.get@ method which the
+-- 'StatsIndexDatasourcesGet' request conforms to.
+type StatsIndexDatasourcesGetResource =
+     "v1" :>
+       "stats" :>
+         "index" :>
+           Capture "name" Text :>
+             QueryParam "fromDate.month" (Textual Int32) :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "fromDate.day" (Textual Int32) :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "fromDate.year" (Textual Int32) :>
+                           QueryParam "toDate.day" (Textual Int32) :>
+                             QueryParam "toDate.year" (Textual Int32) :>
+                               QueryParam "toDate.month" (Textual Int32) :>
+                                 QueryParam "callback" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] GetDataSourceIndexStatsResponse
+
+-- | Gets indexed item statistics for a single data source.
+--
+-- /See:/ 'statsIndexDatasourcesGet' smart constructor.
+data StatsIndexDatasourcesGet = StatsIndexDatasourcesGet'
+    { _sidgFromDateMonth  :: !(Maybe (Textual Int32))
+    , _sidgXgafv          :: !(Maybe Xgafv)
+    , _sidgUploadProtocol :: !(Maybe Text)
+    , _sidgFromDateDay    :: !(Maybe (Textual Int32))
+    , _sidgAccessToken    :: !(Maybe Text)
+    , _sidgUploadType     :: !(Maybe Text)
+    , _sidgFromDateYear   :: !(Maybe (Textual Int32))
+    , _sidgName           :: !Text
+    , _sidgToDateDay      :: !(Maybe (Textual Int32))
+    , _sidgToDateYear     :: !(Maybe (Textual Int32))
+    , _sidgToDateMonth    :: !(Maybe (Textual Int32))
+    , _sidgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatsIndexDatasourcesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sidgFromDateMonth'
+--
+-- * 'sidgXgafv'
+--
+-- * 'sidgUploadProtocol'
+--
+-- * 'sidgFromDateDay'
+--
+-- * 'sidgAccessToken'
+--
+-- * 'sidgUploadType'
+--
+-- * 'sidgFromDateYear'
+--
+-- * 'sidgName'
+--
+-- * 'sidgToDateDay'
+--
+-- * 'sidgToDateYear'
+--
+-- * 'sidgToDateMonth'
+--
+-- * 'sidgCallback'
+statsIndexDatasourcesGet
+    :: Text -- ^ 'sidgName'
+    -> StatsIndexDatasourcesGet
+statsIndexDatasourcesGet pSidgName_ =
+    StatsIndexDatasourcesGet'
+    { _sidgFromDateMonth = Nothing
+    , _sidgXgafv = Nothing
+    , _sidgUploadProtocol = Nothing
+    , _sidgFromDateDay = Nothing
+    , _sidgAccessToken = Nothing
+    , _sidgUploadType = Nothing
+    , _sidgFromDateYear = Nothing
+    , _sidgName = pSidgName_
+    , _sidgToDateDay = Nothing
+    , _sidgToDateYear = Nothing
+    , _sidgToDateMonth = Nothing
+    , _sidgCallback = Nothing
+    }
+
+-- | Month of date. Must be from 1 to 12.
+sidgFromDateMonth :: Lens' StatsIndexDatasourcesGet (Maybe Int32)
+sidgFromDateMonth
+  = lens _sidgFromDateMonth
+      (\ s a -> s{_sidgFromDateMonth = a})
+      . mapping _Coerce
+
+-- | V1 error format.
+sidgXgafv :: Lens' StatsIndexDatasourcesGet (Maybe Xgafv)
+sidgXgafv
+  = lens _sidgXgafv (\ s a -> s{_sidgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sidgUploadProtocol :: Lens' StatsIndexDatasourcesGet (Maybe Text)
+sidgUploadProtocol
+  = lens _sidgUploadProtocol
+      (\ s a -> s{_sidgUploadProtocol = a})
+
+-- | Day of month. Must be from 1 to 31 and valid for the year and month.
+sidgFromDateDay :: Lens' StatsIndexDatasourcesGet (Maybe Int32)
+sidgFromDateDay
+  = lens _sidgFromDateDay
+      (\ s a -> s{_sidgFromDateDay = a})
+      . mapping _Coerce
+
+-- | OAuth access token.
+sidgAccessToken :: Lens' StatsIndexDatasourcesGet (Maybe Text)
+sidgAccessToken
+  = lens _sidgAccessToken
+      (\ s a -> s{_sidgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sidgUploadType :: Lens' StatsIndexDatasourcesGet (Maybe Text)
+sidgUploadType
+  = lens _sidgUploadType
+      (\ s a -> s{_sidgUploadType = a})
+
+-- | Year of date. Must be from 1 to 9999.
+sidgFromDateYear :: Lens' StatsIndexDatasourcesGet (Maybe Int32)
+sidgFromDateYear
+  = lens _sidgFromDateYear
+      (\ s a -> s{_sidgFromDateYear = a})
+      . mapping _Coerce
+
+-- | The resource id of the data source to retrieve statistics for, in the
+-- following format: \"datasources\/{source_id}\"
+sidgName :: Lens' StatsIndexDatasourcesGet Text
+sidgName = lens _sidgName (\ s a -> s{_sidgName = a})
+
+-- | Day of month. Must be from 1 to 31 and valid for the year and month.
+sidgToDateDay :: Lens' StatsIndexDatasourcesGet (Maybe Int32)
+sidgToDateDay
+  = lens _sidgToDateDay
+      (\ s a -> s{_sidgToDateDay = a})
+      . mapping _Coerce
+
+-- | Year of date. Must be from 1 to 9999.
+sidgToDateYear :: Lens' StatsIndexDatasourcesGet (Maybe Int32)
+sidgToDateYear
+  = lens _sidgToDateYear
+      (\ s a -> s{_sidgToDateYear = a})
+      . mapping _Coerce
+
+-- | Month of date. Must be from 1 to 12.
+sidgToDateMonth :: Lens' StatsIndexDatasourcesGet (Maybe Int32)
+sidgToDateMonth
+  = lens _sidgToDateMonth
+      (\ s a -> s{_sidgToDateMonth = a})
+      . mapping _Coerce
+
+-- | JSONP
+sidgCallback :: Lens' StatsIndexDatasourcesGet (Maybe Text)
+sidgCallback
+  = lens _sidgCallback (\ s a -> s{_sidgCallback = a})
+
+instance GoogleRequest StatsIndexDatasourcesGet where
+        type Rs StatsIndexDatasourcesGet =
+             GetDataSourceIndexStatsResponse
+        type Scopes StatsIndexDatasourcesGet =
+             '["https://www.googleapis.com/auth/cloud_search",
+               "https://www.googleapis.com/auth/cloud_search.stats",
+               "https://www.googleapis.com/auth/cloud_search.stats.indexing"]
+        requestClient StatsIndexDatasourcesGet'{..}
+          = go _sidgName _sidgFromDateMonth _sidgXgafv
+              _sidgUploadProtocol
+              _sidgFromDateDay
+              _sidgAccessToken
+              _sidgUploadType
+              _sidgFromDateYear
+              _sidgToDateDay
+              _sidgToDateYear
+              _sidgToDateMonth
+              _sidgCallback
+              (Just AltJSON)
+              cloudSearchService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy StatsIndexDatasourcesGetResource)
+                      mempty
diff --git a/gogol-cloudsearch.cabal b/gogol-cloudsearch.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudsearch.cabal
@@ -0,0 +1,82 @@
+name:                  gogol-cloudsearch
+version:               0.4.0
+synopsis:              Google Cloud Search 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:
+    Cloud Search provides cloud-based search capabilities over G Suite data.
+    The Cloud Search API allows indexing of non-G Suite data into Cloud
+    Search.
+    .
+    /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.CloudSearch
+        , Network.Google.CloudSearch.Types
+        , Network.Google.Resource.CloudSearch.Debug.Datasources.Items.CheckAccess
+        , Network.Google.Resource.CloudSearch.Debug.Datasources.Items.SearchByViewURL
+        , Network.Google.Resource.CloudSearch.Debug.Datasources.Items.UnmAppedids.List
+        , Network.Google.Resource.CloudSearch.Debug.Identitysources.Items.ListForunmAppedidentity
+        , Network.Google.Resource.CloudSearch.Debug.Identitysources.UnmAppedids.List
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.DeleteSchema
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.GetSchema
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Delete
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.DeleteQueueItems
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Get
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Index
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.List
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Poll
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Push
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Unreserve
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.Items.Upload
+        , Network.Google.Resource.CloudSearch.Indexing.Datasources.UpdateSchema
+        , Network.Google.Resource.CloudSearch.Media.Upload
+        , Network.Google.Resource.CloudSearch.Operations.Get
+        , Network.Google.Resource.CloudSearch.Query.Search
+        , Network.Google.Resource.CloudSearch.Query.Sources.List
+        , Network.Google.Resource.CloudSearch.Query.Suggest
+        , Network.Google.Resource.CloudSearch.Settings.Datasources.Create
+        , Network.Google.Resource.CloudSearch.Settings.Datasources.Delete
+        , Network.Google.Resource.CloudSearch.Settings.Datasources.Get
+        , Network.Google.Resource.CloudSearch.Settings.Datasources.List
+        , Network.Google.Resource.CloudSearch.Settings.Datasources.Update
+        , Network.Google.Resource.CloudSearch.Settings.SearchApplications.Create
+        , Network.Google.Resource.CloudSearch.Settings.SearchApplications.Delete
+        , Network.Google.Resource.CloudSearch.Settings.SearchApplications.Get
+        , Network.Google.Resource.CloudSearch.Settings.SearchApplications.List
+        , Network.Google.Resource.CloudSearch.Settings.SearchApplications.Reset
+        , Network.Google.Resource.CloudSearch.Settings.SearchApplications.Update
+        , Network.Google.Resource.CloudSearch.Stats.GetIndex
+        , Network.Google.Resource.CloudSearch.Stats.Index.Datasources.Get
+
+    other-modules:
+          Network.Google.CloudSearch.Types.Product
+        , Network.Google.CloudSearch.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
