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-cloudfunctions
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Cloud Functions.
+
+
+## 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-cloudfunctions` 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/CloudFunctions.hs b/gen/Network/Google/CloudFunctions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudFunctions.hs
@@ -0,0 +1,371 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudFunctions
+-- 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)
+--
+-- Manages lightweight user-provided functions executed in response to
+-- events.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference>
+module Network.Google.CloudFunctions
+    (
+    -- * Service Configuration
+      cloudFunctionsService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * API Declaration
+    , CloudFunctionsAPI
+
+    -- * Resources
+
+    -- ** cloudfunctions.operations.get
+    , module Network.Google.Resource.CloudFunctions.Operations.Get
+
+    -- ** cloudfunctions.operations.list
+    , module Network.Google.Resource.CloudFunctions.Operations.List
+
+    -- ** cloudfunctions.projects.locations.functions.call
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Call
+
+    -- ** cloudfunctions.projects.locations.functions.create
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Create
+
+    -- ** cloudfunctions.projects.locations.functions.delete
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Delete
+
+    -- ** cloudfunctions.projects.locations.functions.generateDownloadUrl
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateDownloadURL
+
+    -- ** cloudfunctions.projects.locations.functions.generateUploadUrl
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateUploadURL
+
+    -- ** cloudfunctions.projects.locations.functions.get
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Get
+
+    -- ** cloudfunctions.projects.locations.functions.getIamPolicy
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GetIAMPolicy
+
+    -- ** cloudfunctions.projects.locations.functions.list
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.List
+
+    -- ** cloudfunctions.projects.locations.functions.patch
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Patch
+
+    -- ** cloudfunctions.projects.locations.functions.setIamPolicy
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.SetIAMPolicy
+
+    -- ** cloudfunctions.projects.locations.functions.testIamPermissions
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.TestIAMPermissions
+
+    -- ** cloudfunctions.projects.locations.list
+    , module Network.Google.Resource.CloudFunctions.Projects.Locations.List
+
+    -- * Types
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** AuditConfig
+    , AuditConfig
+    , auditConfig
+    , acService
+    , acAuditLogConfigs
+
+    -- ** OperationMetadataV1Type
+    , OperationMetadataV1Type (..)
+
+    -- ** OperationMetadataV1Beta2
+    , OperationMetadataV1Beta2
+    , operationMetadataV1Beta2
+    , omvbVersionId
+    , omvbUpdateTime
+    , omvbType
+    , omvbTarget
+    , omvbRequest
+
+    -- ** Expr
+    , Expr
+    , expr
+    , eLocation
+    , eExpression
+    , eTitle
+    , eDescription
+
+    -- ** ListLocationsResponse
+    , ListLocationsResponse
+    , listLocationsResponse
+    , llrNextPageToken
+    , llrLocations
+
+    -- ** ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- ** GenerateUploadURLRequest
+    , GenerateUploadURLRequest
+    , generateUploadURLRequest
+
+    -- ** Location
+    , Location
+    , location
+    , lName
+    , lMetadata
+    , lDisplayName
+    , lLabels
+    , lLocationId
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** GenerateDownloadURLRequest
+    , GenerateDownloadURLRequest
+    , generateDownloadURLRequest
+    , gdurVersionId
+
+    -- ** Retry
+    , Retry
+    , retry
+
+    -- ** GenerateUploadURLResponse
+    , GenerateUploadURLResponse
+    , generateUploadURLResponse
+    , guurUploadURL
+
+    -- ** FailurePolicy
+    , FailurePolicy
+    , failurePolicy
+    , fpRetry
+
+    -- ** CallFunctionResponse
+    , CallFunctionResponse
+    , callFunctionResponse
+    , cfrExecutionId
+    , cfrError
+    , cfrResult
+
+    -- ** HTTPSTrigger
+    , HTTPSTrigger
+    , httpsTrigger
+    , htURL
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** CloudFunctionEnvironmentVariables
+    , CloudFunctionEnvironmentVariables
+    , cloudFunctionEnvironmentVariables
+    , cfevAddtional
+
+    -- ** OperationMetadataV1Request
+    , OperationMetadataV1Request
+    , operationMetadataV1Request
+    , omvrAddtional
+
+    -- ** SetIAMPolicyRequest
+    , SetIAMPolicyRequest
+    , setIAMPolicyRequest
+    , siprUpdateMask
+    , siprPolicy
+
+    -- ** EventTrigger
+    , EventTrigger
+    , eventTrigger
+    , etService
+    , etFailurePolicy
+    , etEventType
+    , etResource
+
+    -- ** SourceRepository
+    , SourceRepository
+    , sourceRepository
+    , srURL
+    , srDeployedURL
+
+    -- ** OperationMetadataV1
+    , OperationMetadataV1
+    , operationMetadataV1
+    , omvVersionId
+    , omvUpdateTime
+    , omvType
+    , omvTarget
+    , omvRequest
+
+    -- ** CloudFunctionStatus
+    , CloudFunctionStatus (..)
+
+    -- ** OperationMetadataV1Beta2Type
+    , OperationMetadataV1Beta2Type (..)
+
+    -- ** GenerateDownloadURLResponse
+    , GenerateDownloadURLResponse
+    , generateDownloadURLResponse
+    , gdurDownloadURL
+
+    -- ** AuditLogConfigLogType
+    , AuditLogConfigLogType (..)
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** TestIAMPermissionsRequest
+    , TestIAMPermissionsRequest
+    , testIAMPermissionsRequest
+    , tiprPermissions
+
+    -- ** TestIAMPermissionsResponse
+    , TestIAMPermissionsResponse
+    , testIAMPermissionsResponse
+    , tiamprPermissions
+
+    -- ** Policy
+    , Policy
+    , policy
+    , pAuditConfigs
+    , pEtag
+    , pVersion
+    , pBindings
+
+    -- ** LocationLabels
+    , LocationLabels
+    , locationLabels
+    , llAddtional
+
+    -- ** ListFunctionsResponse
+    , ListFunctionsResponse
+    , listFunctionsResponse
+    , lfrNextPageToken
+    , lfrFunctions
+
+    -- ** LocationMetadata
+    , LocationMetadata
+    , locationMetadata
+    , lmAddtional
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- ** AuditLogConfig
+    , AuditLogConfig
+    , auditLogConfig
+    , alcLogType
+    , alcExemptedMembers
+
+    -- ** CloudFunction
+    , CloudFunction
+    , cloudFunction
+    , cfRuntime
+    , cfStatus
+    , cfSourceArchiveURL
+    , cfVersionId
+    , cfSourceUploadURL
+    , cfEntryPoint
+    , cfHTTPSTrigger
+    , cfNetwork
+    , cfMaxInstances
+    , cfEventTrigger
+    , cfUpdateTime
+    , cfName
+    , cfSourceRepository
+    , cfAvailableMemoryMb
+    , cfLabels
+    , cfServiceAccountEmail
+    , cfEnvironmentVariables
+    , cfTimeout
+    , cfVPCConnector
+    , cfDescription
+
+    -- ** OperationMetadataV1Beta2Request
+    , OperationMetadataV1Beta2Request
+    , operationMetadataV1Beta2Request
+    , omvbrAddtional
+
+    -- ** CloudFunctionLabels
+    , CloudFunctionLabels
+    , cloudFunctionLabels
+    , cflAddtional
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** CallFunctionRequest
+    , CallFunctionRequest
+    , callFunctionRequest
+    , cfrData
+
+    -- ** Binding
+    , Binding
+    , binding
+    , bMembers
+    , bRole
+    , bCondition
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudFunctions.Operations.Get
+import           Network.Google.Resource.CloudFunctions.Operations.List
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Call
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Create
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Delete
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateDownloadURL
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateUploadURL
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Get
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GetIAMPolicy
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.List
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Patch
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.SetIAMPolicy
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.TestIAMPermissions
+import           Network.Google.Resource.CloudFunctions.Projects.Locations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Functions API service.
+type CloudFunctionsAPI =
+     OperationsListResource :<|> OperationsGetResource
+       :<|> ProjectsLocationsFunctionsListResource
+       :<|> ProjectsLocationsFunctionsCallResource
+       :<|>
+       ProjectsLocationsFunctionsGenerateUploadURLResource
+       :<|> ProjectsLocationsFunctionsGetIAMPolicyResource
+       :<|> ProjectsLocationsFunctionsPatchResource
+       :<|> ProjectsLocationsFunctionsGetResource
+       :<|> ProjectsLocationsFunctionsCreateResource
+       :<|>
+       ProjectsLocationsFunctionsGenerateDownloadURLResource
+       :<|> ProjectsLocationsFunctionsSetIAMPolicyResource
+       :<|>
+       ProjectsLocationsFunctionsTestIAMPermissionsResource
+       :<|> ProjectsLocationsFunctionsDeleteResource
+       :<|> ProjectsLocationsListResource
diff --git a/gen/Network/Google/CloudFunctions/Types.hs b/gen/Network/Google/CloudFunctions/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudFunctions/Types.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudFunctions.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.CloudFunctions.Types
+    (
+    -- * Service Configuration
+      cloudFunctionsService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * AuditConfig
+    , AuditConfig
+    , auditConfig
+    , acService
+    , acAuditLogConfigs
+
+    -- * OperationMetadataV1Type
+    , OperationMetadataV1Type (..)
+
+    -- * OperationMetadataV1Beta2
+    , OperationMetadataV1Beta2
+    , operationMetadataV1Beta2
+    , omvbVersionId
+    , omvbUpdateTime
+    , omvbType
+    , omvbTarget
+    , omvbRequest
+
+    -- * Expr
+    , Expr
+    , expr
+    , eLocation
+    , eExpression
+    , eTitle
+    , eDescription
+
+    -- * ListLocationsResponse
+    , ListLocationsResponse
+    , listLocationsResponse
+    , llrNextPageToken
+    , llrLocations
+
+    -- * ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- * GenerateUploadURLRequest
+    , GenerateUploadURLRequest
+    , generateUploadURLRequest
+
+    -- * Location
+    , Location
+    , location
+    , lName
+    , lMetadata
+    , lDisplayName
+    , lLabels
+    , lLocationId
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * GenerateDownloadURLRequest
+    , GenerateDownloadURLRequest
+    , generateDownloadURLRequest
+    , gdurVersionId
+
+    -- * Retry
+    , Retry
+    , retry
+
+    -- * GenerateUploadURLResponse
+    , GenerateUploadURLResponse
+    , generateUploadURLResponse
+    , guurUploadURL
+
+    -- * FailurePolicy
+    , FailurePolicy
+    , failurePolicy
+    , fpRetry
+
+    -- * CallFunctionResponse
+    , CallFunctionResponse
+    , callFunctionResponse
+    , cfrExecutionId
+    , cfrError
+    , cfrResult
+
+    -- * HTTPSTrigger
+    , HTTPSTrigger
+    , httpsTrigger
+    , htURL
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * CloudFunctionEnvironmentVariables
+    , CloudFunctionEnvironmentVariables
+    , cloudFunctionEnvironmentVariables
+    , cfevAddtional
+
+    -- * OperationMetadataV1Request
+    , OperationMetadataV1Request
+    , operationMetadataV1Request
+    , omvrAddtional
+
+    -- * SetIAMPolicyRequest
+    , SetIAMPolicyRequest
+    , setIAMPolicyRequest
+    , siprUpdateMask
+    , siprPolicy
+
+    -- * EventTrigger
+    , EventTrigger
+    , eventTrigger
+    , etService
+    , etFailurePolicy
+    , etEventType
+    , etResource
+
+    -- * SourceRepository
+    , SourceRepository
+    , sourceRepository
+    , srURL
+    , srDeployedURL
+
+    -- * OperationMetadataV1
+    , OperationMetadataV1
+    , operationMetadataV1
+    , omvVersionId
+    , omvUpdateTime
+    , omvType
+    , omvTarget
+    , omvRequest
+
+    -- * CloudFunctionStatus
+    , CloudFunctionStatus (..)
+
+    -- * OperationMetadataV1Beta2Type
+    , OperationMetadataV1Beta2Type (..)
+
+    -- * GenerateDownloadURLResponse
+    , GenerateDownloadURLResponse
+    , generateDownloadURLResponse
+    , gdurDownloadURL
+
+    -- * AuditLogConfigLogType
+    , AuditLogConfigLogType (..)
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * TestIAMPermissionsRequest
+    , TestIAMPermissionsRequest
+    , testIAMPermissionsRequest
+    , tiprPermissions
+
+    -- * TestIAMPermissionsResponse
+    , TestIAMPermissionsResponse
+    , testIAMPermissionsResponse
+    , tiamprPermissions
+
+    -- * Policy
+    , Policy
+    , policy
+    , pAuditConfigs
+    , pEtag
+    , pVersion
+    , pBindings
+
+    -- * LocationLabels
+    , LocationLabels
+    , locationLabels
+    , llAddtional
+
+    -- * ListFunctionsResponse
+    , ListFunctionsResponse
+    , listFunctionsResponse
+    , lfrNextPageToken
+    , lfrFunctions
+
+    -- * LocationMetadata
+    , LocationMetadata
+    , locationMetadata
+    , lmAddtional
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- * AuditLogConfig
+    , AuditLogConfig
+    , auditLogConfig
+    , alcLogType
+    , alcExemptedMembers
+
+    -- * CloudFunction
+    , CloudFunction
+    , cloudFunction
+    , cfRuntime
+    , cfStatus
+    , cfSourceArchiveURL
+    , cfVersionId
+    , cfSourceUploadURL
+    , cfEntryPoint
+    , cfHTTPSTrigger
+    , cfNetwork
+    , cfMaxInstances
+    , cfEventTrigger
+    , cfUpdateTime
+    , cfName
+    , cfSourceRepository
+    , cfAvailableMemoryMb
+    , cfLabels
+    , cfServiceAccountEmail
+    , cfEnvironmentVariables
+    , cfTimeout
+    , cfVPCConnector
+    , cfDescription
+
+    -- * OperationMetadataV1Beta2Request
+    , OperationMetadataV1Beta2Request
+    , operationMetadataV1Beta2Request
+    , omvbrAddtional
+
+    -- * CloudFunctionLabels
+    , CloudFunctionLabels
+    , cloudFunctionLabels
+    , cflAddtional
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * CallFunctionRequest
+    , CallFunctionRequest
+    , callFunctionRequest
+    , cfrData
+
+    -- * Binding
+    , Binding
+    , binding
+    , bMembers
+    , bRole
+    , bCondition
+    ) where
+
+import           Network.Google.CloudFunctions.Types.Product
+import           Network.Google.CloudFunctions.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Cloud Functions API. This contains the host and root path used as a starting point for constructing service requests.
+cloudFunctionsService :: ServiceConfig
+cloudFunctionsService
+  = defaultService (ServiceId "cloudfunctions:v1")
+      "cloudfunctions.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
diff --git a/gen/Network/Google/CloudFunctions/Types/Product.hs b/gen/Network/Google/CloudFunctions/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudFunctions/Types/Product.hs
@@ -0,0 +1,2217 @@
+{-# 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.CloudFunctions.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.CloudFunctions.Types.Product where
+
+import           Network.Google.CloudFunctions.Types.Sum
+import           Network.Google.Prelude
+
+-- | 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])
+
+-- | Specifies the audit configuration for a service. The configuration
+-- determines which permission types are logged, and what identities, if
+-- any, are exempted from logging. An AuditConfig must have one or more
+-- AuditLogConfigs. If there are AuditConfigs for both \`allServices\` and
+-- a specific service, the union of the two AuditConfigs is used for that
+-- service: the log_types specified in each AuditConfig are enabled, and
+-- the exempted_members in each AuditLogConfig are exempted. Example Policy
+-- with multiple AuditConfigs: { \"audit_configs\": [ { \"service\":
+-- \"allServices\" \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\",
+-- \"exempted_members\": [ \"user:foo\'gmail.com\" ] }, { \"log_type\":
+-- \"DATA_WRITE\", }, { \"log_type\": \"ADMIN_READ\", } ] }, { \"service\":
+-- \"fooservice.googleapis.com\" \"audit_log_configs\": [ { \"log_type\":
+-- \"DATA_READ\", }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\":
+-- [ \"user:bar\'gmail.com\" ] } ] } ] } For fooservice, this policy
+-- enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts
+-- foo\'gmail.com from DATA_READ logging, and bar\'gmail.com from
+-- DATA_WRITE logging.
+--
+-- /See:/ 'auditConfig' smart constructor.
+data AuditConfig = AuditConfig'
+    { _acService         :: !(Maybe Text)
+    , _acAuditLogConfigs :: !(Maybe [AuditLogConfig])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AuditConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acService'
+--
+-- * 'acAuditLogConfigs'
+auditConfig
+    :: AuditConfig
+auditConfig =
+    AuditConfig'
+    { _acService = Nothing
+    , _acAuditLogConfigs = Nothing
+    }
+
+-- | Specifies a service that will be enabled for audit logging. For example,
+-- \`storage.googleapis.com\`, \`cloudsql.googleapis.com\`. \`allServices\`
+-- is a special value that covers all services.
+acService :: Lens' AuditConfig (Maybe Text)
+acService
+  = lens _acService (\ s a -> s{_acService = a})
+
+-- | The configuration for logging of each type of permission.
+acAuditLogConfigs :: Lens' AuditConfig [AuditLogConfig]
+acAuditLogConfigs
+  = lens _acAuditLogConfigs
+      (\ s a -> s{_acAuditLogConfigs = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AuditConfig where
+        parseJSON
+          = withObject "AuditConfig"
+              (\ o ->
+                 AuditConfig' <$>
+                   (o .:? "service") <*>
+                     (o .:? "auditLogConfigs" .!= mempty))
+
+instance ToJSON AuditConfig where
+        toJSON AuditConfig'{..}
+          = object
+              (catMaybes
+                 [("service" .=) <$> _acService,
+                  ("auditLogConfigs" .=) <$> _acAuditLogConfigs])
+
+-- | Metadata describing an Operation
+--
+-- /See:/ 'operationMetadataV1Beta2' smart constructor.
+data OperationMetadataV1Beta2 = OperationMetadataV1Beta2'
+    { _omvbVersionId  :: !(Maybe (Textual Int64))
+    , _omvbUpdateTime :: !(Maybe DateTime')
+    , _omvbType       :: !(Maybe OperationMetadataV1Beta2Type)
+    , _omvbTarget     :: !(Maybe Text)
+    , _omvbRequest    :: !(Maybe OperationMetadataV1Beta2Request)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadataV1Beta2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omvbVersionId'
+--
+-- * 'omvbUpdateTime'
+--
+-- * 'omvbType'
+--
+-- * 'omvbTarget'
+--
+-- * 'omvbRequest'
+operationMetadataV1Beta2
+    :: OperationMetadataV1Beta2
+operationMetadataV1Beta2 =
+    OperationMetadataV1Beta2'
+    { _omvbVersionId = Nothing
+    , _omvbUpdateTime = Nothing
+    , _omvbType = Nothing
+    , _omvbTarget = Nothing
+    , _omvbRequest = Nothing
+    }
+
+-- | Version id of the function created or updated by an API call. This field
+-- is only populated for Create and Update operations.
+omvbVersionId :: Lens' OperationMetadataV1Beta2 (Maybe Int64)
+omvbVersionId
+  = lens _omvbVersionId
+      (\ s a -> s{_omvbVersionId = a})
+      . mapping _Coerce
+
+-- | The last update timestamp of the operation.
+omvbUpdateTime :: Lens' OperationMetadataV1Beta2 (Maybe UTCTime)
+omvbUpdateTime
+  = lens _omvbUpdateTime
+      (\ s a -> s{_omvbUpdateTime = a})
+      . mapping _DateTime
+
+-- | Type of operation.
+omvbType :: Lens' OperationMetadataV1Beta2 (Maybe OperationMetadataV1Beta2Type)
+omvbType = lens _omvbType (\ s a -> s{_omvbType = a})
+
+-- | Target of the operation - for example
+-- projects\/project-1\/locations\/region-1\/functions\/function-1
+omvbTarget :: Lens' OperationMetadataV1Beta2 (Maybe Text)
+omvbTarget
+  = lens _omvbTarget (\ s a -> s{_omvbTarget = a})
+
+-- | The original request that started the operation.
+omvbRequest :: Lens' OperationMetadataV1Beta2 (Maybe OperationMetadataV1Beta2Request)
+omvbRequest
+  = lens _omvbRequest (\ s a -> s{_omvbRequest = a})
+
+instance FromJSON OperationMetadataV1Beta2 where
+        parseJSON
+          = withObject "OperationMetadataV1Beta2"
+              (\ o ->
+                 OperationMetadataV1Beta2' <$>
+                   (o .:? "versionId") <*> (o .:? "updateTime") <*>
+                     (o .:? "type")
+                     <*> (o .:? "target")
+                     <*> (o .:? "request"))
+
+instance ToJSON OperationMetadataV1Beta2 where
+        toJSON OperationMetadataV1Beta2'{..}
+          = object
+              (catMaybes
+                 [("versionId" .=) <$> _omvbVersionId,
+                  ("updateTime" .=) <$> _omvbUpdateTime,
+                  ("type" .=) <$> _omvbType,
+                  ("target" .=) <$> _omvbTarget,
+                  ("request" .=) <$> _omvbRequest])
+
+-- | Represents an expression text. Example: title: \"User account presence\"
+-- description: \"Determines whether the request has a user account\"
+-- expression: \"size(request.user) > 0\"
+--
+-- /See:/ 'expr' smart constructor.
+data Expr = Expr'
+    { _eLocation    :: !(Maybe Text)
+    , _eExpression  :: !(Maybe Text)
+    , _eTitle       :: !(Maybe Text)
+    , _eDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Expr' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eLocation'
+--
+-- * 'eExpression'
+--
+-- * 'eTitle'
+--
+-- * 'eDescription'
+expr
+    :: Expr
+expr =
+    Expr'
+    { _eLocation = Nothing
+    , _eExpression = Nothing
+    , _eTitle = Nothing
+    , _eDescription = Nothing
+    }
+
+-- | An optional string indicating the location of the expression for error
+-- reporting, e.g. a file name and a position in the file.
+eLocation :: Lens' Expr (Maybe Text)
+eLocation
+  = lens _eLocation (\ s a -> s{_eLocation = a})
+
+-- | Textual representation of an expression in Common Expression Language
+-- syntax. The application context of the containing message determines
+-- which well-known feature set of CEL is supported.
+eExpression :: Lens' Expr (Maybe Text)
+eExpression
+  = lens _eExpression (\ s a -> s{_eExpression = a})
+
+-- | An optional title for the expression, i.e. a short string describing its
+-- purpose. This can be used e.g. in UIs which allow to enter the
+-- expression.
+eTitle :: Lens' Expr (Maybe Text)
+eTitle = lens _eTitle (\ s a -> s{_eTitle = a})
+
+-- | An optional description of the expression. This is a longer text which
+-- describes the expression, e.g. when hovered over it in a UI.
+eDescription :: Lens' Expr (Maybe Text)
+eDescription
+  = lens _eDescription (\ s a -> s{_eDescription = a})
+
+instance FromJSON Expr where
+        parseJSON
+          = withObject "Expr"
+              (\ o ->
+                 Expr' <$>
+                   (o .:? "location") <*> (o .:? "expression") <*>
+                     (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON Expr where
+        toJSON Expr'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _eLocation,
+                  ("expression" .=) <$> _eExpression,
+                  ("title" .=) <$> _eTitle,
+                  ("description" .=) <$> _eDescription])
+
+-- | The response message for Locations.ListLocations.
+--
+-- /See:/ 'listLocationsResponse' smart constructor.
+data ListLocationsResponse = ListLocationsResponse'
+    { _llrNextPageToken :: !(Maybe Text)
+    , _llrLocations     :: !(Maybe [Location])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListLocationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llrNextPageToken'
+--
+-- * 'llrLocations'
+listLocationsResponse
+    :: ListLocationsResponse
+listLocationsResponse =
+    ListLocationsResponse'
+    { _llrNextPageToken = Nothing
+    , _llrLocations = Nothing
+    }
+
+-- | The standard List next-page token.
+llrNextPageToken :: Lens' ListLocationsResponse (Maybe Text)
+llrNextPageToken
+  = lens _llrNextPageToken
+      (\ s a -> s{_llrNextPageToken = a})
+
+-- | A list of locations that matches the specified filter in the request.
+llrLocations :: Lens' ListLocationsResponse [Location]
+llrLocations
+  = lens _llrLocations (\ s a -> s{_llrLocations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListLocationsResponse where
+        parseJSON
+          = withObject "ListLocationsResponse"
+              (\ o ->
+                 ListLocationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "locations" .!= mempty))
+
+instance ToJSON ListLocationsResponse where
+        toJSON ListLocationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _llrNextPageToken,
+                  ("locations" .=) <$> _llrLocations])
+
+-- | The response message for Operations.ListOperations.
+--
+-- /See:/ 'listOperationsResponse' smart constructor.
+data ListOperationsResponse = ListOperationsResponse'
+    { _lorNextPageToken :: !(Maybe Text)
+    , _lorOperations    :: !(Maybe [Operation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOperationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lorNextPageToken'
+--
+-- * 'lorOperations'
+listOperationsResponse
+    :: ListOperationsResponse
+listOperationsResponse =
+    ListOperationsResponse'
+    { _lorNextPageToken = Nothing
+    , _lorOperations = Nothing
+    }
+
+-- | The standard List next-page token.
+lorNextPageToken :: Lens' ListOperationsResponse (Maybe Text)
+lorNextPageToken
+  = lens _lorNextPageToken
+      (\ s a -> s{_lorNextPageToken = a})
+
+-- | A list of operations that matches the specified filter in the request.
+lorOperations :: Lens' ListOperationsResponse [Operation]
+lorOperations
+  = lens _lorOperations
+      (\ s a -> s{_lorOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListOperationsResponse where
+        parseJSON
+          = withObject "ListOperationsResponse"
+              (\ o ->
+                 ListOperationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON ListOperationsResponse where
+        toJSON ListOperationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lorNextPageToken,
+                  ("operations" .=) <$> _lorOperations])
+
+-- | Request of \`GenerateSourceUploadUrl\` method.
+--
+-- /See:/ 'generateUploadURLRequest' smart constructor.
+data GenerateUploadURLRequest =
+    GenerateUploadURLRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GenerateUploadURLRequest' with the minimum fields required to make a request.
+--
+generateUploadURLRequest
+    :: GenerateUploadURLRequest
+generateUploadURLRequest = GenerateUploadURLRequest'
+
+instance FromJSON GenerateUploadURLRequest where
+        parseJSON
+          = withObject "GenerateUploadURLRequest"
+              (\ o -> pure GenerateUploadURLRequest')
+
+instance ToJSON GenerateUploadURLRequest where
+        toJSON = const emptyObject
+
+-- | A resource that represents Google Cloud Platform location.
+--
+-- /See:/ 'location' smart constructor.
+data Location = Location'
+    { _lName        :: !(Maybe Text)
+    , _lMetadata    :: !(Maybe LocationMetadata)
+    , _lDisplayName :: !(Maybe Text)
+    , _lLabels      :: !(Maybe LocationLabels)
+    , _lLocationId  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Location' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lName'
+--
+-- * 'lMetadata'
+--
+-- * 'lDisplayName'
+--
+-- * 'lLabels'
+--
+-- * 'lLocationId'
+location
+    :: Location
+location =
+    Location'
+    { _lName = Nothing
+    , _lMetadata = Nothing
+    , _lDisplayName = Nothing
+    , _lLabels = Nothing
+    , _lLocationId = Nothing
+    }
+
+-- | Resource name for the location, which may vary between implementations.
+-- For example: \`\"projects\/example-project\/locations\/us-east1\"\`
+lName :: Lens' Location (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a})
+
+-- | Service-specific metadata. For example the available capacity at the
+-- given location.
+lMetadata :: Lens' Location (Maybe LocationMetadata)
+lMetadata
+  = lens _lMetadata (\ s a -> s{_lMetadata = a})
+
+-- | The friendly name for this location, typically a nearby city name. For
+-- example, \"Tokyo\".
+lDisplayName :: Lens' Location (Maybe Text)
+lDisplayName
+  = lens _lDisplayName (\ s a -> s{_lDisplayName = a})
+
+-- | Cross-service attributes for the location. For example
+-- {\"cloud.googleapis.com\/region\": \"us-east1\"}
+lLabels :: Lens' Location (Maybe LocationLabels)
+lLabels = lens _lLabels (\ s a -> s{_lLabels = a})
+
+-- | The canonical id for this location. For example: \`\"us-east1\"\`.
+lLocationId :: Lens' Location (Maybe Text)
+lLocationId
+  = lens _lLocationId (\ s a -> s{_lLocationId = a})
+
+instance FromJSON Location where
+        parseJSON
+          = withObject "Location"
+              (\ o ->
+                 Location' <$>
+                   (o .:? "name") <*> (o .:? "metadata") <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "locationId"))
+
+instance ToJSON Location where
+        toJSON Location'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _lName,
+                  ("metadata" .=) <$> _lMetadata,
+                  ("displayName" .=) <$> _lDisplayName,
+                  ("labels" .=) <$> _lLabels,
+                  ("locationId" .=) <$> _lLocationId])
+
+-- | 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])
+
+-- | Request of \`GenerateDownloadUrl\` method.
+--
+-- /See:/ 'generateDownloadURLRequest' smart constructor.
+newtype GenerateDownloadURLRequest = GenerateDownloadURLRequest'
+    { _gdurVersionId :: Maybe (Textual Word64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GenerateDownloadURLRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdurVersionId'
+generateDownloadURLRequest
+    :: GenerateDownloadURLRequest
+generateDownloadURLRequest =
+    GenerateDownloadURLRequest'
+    { _gdurVersionId = Nothing
+    }
+
+-- | The optional version of function. If not set, default, current version
+-- is used.
+gdurVersionId :: Lens' GenerateDownloadURLRequest (Maybe Word64)
+gdurVersionId
+  = lens _gdurVersionId
+      (\ s a -> s{_gdurVersionId = a})
+      . mapping _Coerce
+
+instance FromJSON GenerateDownloadURLRequest where
+        parseJSON
+          = withObject "GenerateDownloadURLRequest"
+              (\ o ->
+                 GenerateDownloadURLRequest' <$> (o .:? "versionId"))
+
+instance ToJSON GenerateDownloadURLRequest where
+        toJSON GenerateDownloadURLRequest'{..}
+          = object
+              (catMaybes [("versionId" .=) <$> _gdurVersionId])
+
+-- | Describes the retry policy in case of function\'s execution failure. A
+-- function execution will be retried on any failure. A failed execution
+-- will be retried up to 7 days with an exponential backoff (capped at 10
+-- seconds). Retried execution is charged as any other execution.
+--
+-- /See:/ 'retry' smart constructor.
+data Retry =
+    Retry'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Retry' with the minimum fields required to make a request.
+--
+retry
+    :: Retry
+retry = Retry'
+
+instance FromJSON Retry where
+        parseJSON = withObject "Retry" (\ o -> pure Retry')
+
+instance ToJSON Retry where
+        toJSON = const emptyObject
+
+-- | Response of \`GenerateSourceUploadUrl\` method.
+--
+-- /See:/ 'generateUploadURLResponse' smart constructor.
+newtype GenerateUploadURLResponse = GenerateUploadURLResponse'
+    { _guurUploadURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GenerateUploadURLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'guurUploadURL'
+generateUploadURLResponse
+    :: GenerateUploadURLResponse
+generateUploadURLResponse =
+    GenerateUploadURLResponse'
+    { _guurUploadURL = Nothing
+    }
+
+-- | The generated Google Cloud Storage signed URL that should be used for a
+-- function source code upload. The uploaded file should be a zip archive
+-- which contains a function.
+guurUploadURL :: Lens' GenerateUploadURLResponse (Maybe Text)
+guurUploadURL
+  = lens _guurUploadURL
+      (\ s a -> s{_guurUploadURL = a})
+
+instance FromJSON GenerateUploadURLResponse where
+        parseJSON
+          = withObject "GenerateUploadURLResponse"
+              (\ o ->
+                 GenerateUploadURLResponse' <$> (o .:? "uploadUrl"))
+
+instance ToJSON GenerateUploadURLResponse where
+        toJSON GenerateUploadURLResponse'{..}
+          = object
+              (catMaybes [("uploadUrl" .=) <$> _guurUploadURL])
+
+-- | Describes the policy in case of function\'s execution failure. If empty,
+-- then defaults to ignoring failures (i.e. not retrying them).
+--
+-- /See:/ 'failurePolicy' smart constructor.
+newtype FailurePolicy = FailurePolicy'
+    { _fpRetry :: Maybe Retry
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FailurePolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fpRetry'
+failurePolicy
+    :: FailurePolicy
+failurePolicy =
+    FailurePolicy'
+    { _fpRetry = Nothing
+    }
+
+-- | If specified, then the function will be retried in case of a failure.
+fpRetry :: Lens' FailurePolicy (Maybe Retry)
+fpRetry = lens _fpRetry (\ s a -> s{_fpRetry = a})
+
+instance FromJSON FailurePolicy where
+        parseJSON
+          = withObject "FailurePolicy"
+              (\ o -> FailurePolicy' <$> (o .:? "retry"))
+
+instance ToJSON FailurePolicy where
+        toJSON FailurePolicy'{..}
+          = object (catMaybes [("retry" .=) <$> _fpRetry])
+
+-- | Response of \`CallFunction\` method.
+--
+-- /See:/ 'callFunctionResponse' smart constructor.
+data CallFunctionResponse = CallFunctionResponse'
+    { _cfrExecutionId :: !(Maybe Text)
+    , _cfrError       :: !(Maybe Text)
+    , _cfrResult      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CallFunctionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfrExecutionId'
+--
+-- * 'cfrError'
+--
+-- * 'cfrResult'
+callFunctionResponse
+    :: CallFunctionResponse
+callFunctionResponse =
+    CallFunctionResponse'
+    { _cfrExecutionId = Nothing
+    , _cfrError = Nothing
+    , _cfrResult = Nothing
+    }
+
+-- | Execution id of function invocation.
+cfrExecutionId :: Lens' CallFunctionResponse (Maybe Text)
+cfrExecutionId
+  = lens _cfrExecutionId
+      (\ s a -> s{_cfrExecutionId = a})
+
+-- | Either system or user-function generated error. Set if execution was not
+-- successful.
+cfrError :: Lens' CallFunctionResponse (Maybe Text)
+cfrError = lens _cfrError (\ s a -> s{_cfrError = a})
+
+-- | Result populated for successful execution of synchronous function. Will
+-- not be populated if function does not return a result through context.
+cfrResult :: Lens' CallFunctionResponse (Maybe Text)
+cfrResult
+  = lens _cfrResult (\ s a -> s{_cfrResult = a})
+
+instance FromJSON CallFunctionResponse where
+        parseJSON
+          = withObject "CallFunctionResponse"
+              (\ o ->
+                 CallFunctionResponse' <$>
+                   (o .:? "executionId") <*> (o .:? "error") <*>
+                     (o .:? "result"))
+
+instance ToJSON CallFunctionResponse where
+        toJSON CallFunctionResponse'{..}
+          = object
+              (catMaybes
+                 [("executionId" .=) <$> _cfrExecutionId,
+                  ("error" .=) <$> _cfrError,
+                  ("result" .=) <$> _cfrResult])
+
+-- | Describes HttpsTrigger, could be used to connect web hooks to function.
+--
+-- /See:/ 'httpsTrigger' smart constructor.
+newtype HTTPSTrigger = HTTPSTrigger'
+    { _htURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPSTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'htURL'
+httpsTrigger
+    :: HTTPSTrigger
+httpsTrigger =
+    HTTPSTrigger'
+    { _htURL = Nothing
+    }
+
+-- | Output only. The deployed url for the function.
+htURL :: Lens' HTTPSTrigger (Maybe Text)
+htURL = lens _htURL (\ s a -> s{_htURL = a})
+
+instance FromJSON HTTPSTrigger where
+        parseJSON
+          = withObject "HTTPSTrigger"
+              (\ o -> HTTPSTrigger' <$> (o .:? "url"))
+
+instance ToJSON HTTPSTrigger where
+        toJSON HTTPSTrigger'{..}
+          = object (catMaybes [("url" .=) <$> _htURL])
+
+--
+-- /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
+
+-- | Environment variables that shall be available during function execution.
+--
+-- /See:/ 'cloudFunctionEnvironmentVariables' smart constructor.
+newtype CloudFunctionEnvironmentVariables = CloudFunctionEnvironmentVariables'
+    { _cfevAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFunctionEnvironmentVariables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfevAddtional'
+cloudFunctionEnvironmentVariables
+    :: HashMap Text Text -- ^ 'cfevAddtional'
+    -> CloudFunctionEnvironmentVariables
+cloudFunctionEnvironmentVariables pCfevAddtional_ =
+    CloudFunctionEnvironmentVariables'
+    { _cfevAddtional = _Coerce # pCfevAddtional_
+    }
+
+cfevAddtional :: Lens' CloudFunctionEnvironmentVariables (HashMap Text Text)
+cfevAddtional
+  = lens _cfevAddtional
+      (\ s a -> s{_cfevAddtional = a})
+      . _Coerce
+
+instance FromJSON CloudFunctionEnvironmentVariables
+         where
+        parseJSON
+          = withObject "CloudFunctionEnvironmentVariables"
+              (\ o ->
+                 CloudFunctionEnvironmentVariables' <$>
+                   (parseJSONObject o))
+
+instance ToJSON CloudFunctionEnvironmentVariables
+         where
+        toJSON = toJSON . _cfevAddtional
+
+-- | The original request that started the operation.
+--
+-- /See:/ 'operationMetadataV1Request' smart constructor.
+newtype OperationMetadataV1Request = OperationMetadataV1Request'
+    { _omvrAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadataV1Request' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omvrAddtional'
+operationMetadataV1Request
+    :: HashMap Text JSONValue -- ^ 'omvrAddtional'
+    -> OperationMetadataV1Request
+operationMetadataV1Request pOmvrAddtional_ =
+    OperationMetadataV1Request'
+    { _omvrAddtional = _Coerce # pOmvrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+omvrAddtional :: Lens' OperationMetadataV1Request (HashMap Text JSONValue)
+omvrAddtional
+  = lens _omvrAddtional
+      (\ s a -> s{_omvrAddtional = a})
+      . _Coerce
+
+instance FromJSON OperationMetadataV1Request where
+        parseJSON
+          = withObject "OperationMetadataV1Request"
+              (\ o ->
+                 OperationMetadataV1Request' <$> (parseJSONObject o))
+
+instance ToJSON OperationMetadataV1Request where
+        toJSON = toJSON . _omvrAddtional
+
+-- | Request message for \`SetIamPolicy\` method.
+--
+-- /See:/ 'setIAMPolicyRequest' smart constructor.
+data SetIAMPolicyRequest = SetIAMPolicyRequest'
+    { _siprUpdateMask :: !(Maybe GFieldMask)
+    , _siprPolicy     :: !(Maybe Policy)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetIAMPolicyRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siprUpdateMask'
+--
+-- * 'siprPolicy'
+setIAMPolicyRequest
+    :: SetIAMPolicyRequest
+setIAMPolicyRequest =
+    SetIAMPolicyRequest'
+    { _siprUpdateMask = Nothing
+    , _siprPolicy = Nothing
+    }
+
+-- | OPTIONAL: A FieldMask specifying which fields of the policy to modify.
+-- Only the fields in the mask will be modified. If no mask is provided,
+-- the following default mask is used: paths: \"bindings, etag\" This field
+-- is only used by Cloud IAM.
+siprUpdateMask :: Lens' SetIAMPolicyRequest (Maybe GFieldMask)
+siprUpdateMask
+  = lens _siprUpdateMask
+      (\ s a -> s{_siprUpdateMask = a})
+
+-- | REQUIRED: The complete policy to be applied to the \`resource\`. The
+-- size of the policy is limited to a few 10s of KB. An empty policy is a
+-- valid policy but certain Cloud Platform services (such as Projects)
+-- might reject them.
+siprPolicy :: Lens' SetIAMPolicyRequest (Maybe Policy)
+siprPolicy
+  = lens _siprPolicy (\ s a -> s{_siprPolicy = a})
+
+instance FromJSON SetIAMPolicyRequest where
+        parseJSON
+          = withObject "SetIAMPolicyRequest"
+              (\ o ->
+                 SetIAMPolicyRequest' <$>
+                   (o .:? "updateMask") <*> (o .:? "policy"))
+
+instance ToJSON SetIAMPolicyRequest where
+        toJSON SetIAMPolicyRequest'{..}
+          = object
+              (catMaybes
+                 [("updateMask" .=) <$> _siprUpdateMask,
+                  ("policy" .=) <$> _siprPolicy])
+
+-- | Describes EventTrigger, used to request events be sent from another
+-- service.
+--
+-- /See:/ 'eventTrigger' smart constructor.
+data EventTrigger = EventTrigger'
+    { _etService       :: !(Maybe Text)
+    , _etFailurePolicy :: !(Maybe FailurePolicy)
+    , _etEventType     :: !(Maybe Text)
+    , _etResource      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etService'
+--
+-- * 'etFailurePolicy'
+--
+-- * 'etEventType'
+--
+-- * 'etResource'
+eventTrigger
+    :: EventTrigger
+eventTrigger =
+    EventTrigger'
+    { _etService = Nothing
+    , _etFailurePolicy = Nothing
+    , _etEventType = Nothing
+    , _etResource = Nothing
+    }
+
+-- | The hostname of the service that should be observed. If no string is
+-- provided, the default service implementing the API will be used. For
+-- example, \`storage.googleapis.com\` is the default for all event types
+-- in the \`google.storage\` namespace.
+etService :: Lens' EventTrigger (Maybe Text)
+etService
+  = lens _etService (\ s a -> s{_etService = a})
+
+-- | Specifies policy for failed executions.
+etFailurePolicy :: Lens' EventTrigger (Maybe FailurePolicy)
+etFailurePolicy
+  = lens _etFailurePolicy
+      (\ s a -> s{_etFailurePolicy = a})
+
+-- | Required. The type of event to observe. For example:
+-- \`providers\/cloud.storage\/eventTypes\/object.change\` and
+-- \`providers\/cloud.pubsub\/eventTypes\/topic.publish\`. Event types
+-- match pattern \`providers\/*\/eventTypes\/*.*\`. The pattern contains:
+-- 1. namespace: For example, \`cloud.storage\` and
+-- \`google.firebase.analytics\`. 2. resource type: The type of resource on
+-- which event occurs. For example, the Google Cloud Storage API includes
+-- the type \`object\`. 3. action: The action that generates the event. For
+-- example, action for a Google Cloud Storage Object is \'change\'. These
+-- parts are lower case.
+etEventType :: Lens' EventTrigger (Maybe Text)
+etEventType
+  = lens _etEventType (\ s a -> s{_etEventType = a})
+
+-- | Required. The resource(s) from which to observe events, for example,
+-- \`projects\/_\/buckets\/myBucket\`. Not all syntactically correct values
+-- are accepted by all services. For example: 1. The authorization model
+-- must support it. Google Cloud Functions only allows EventTriggers to be
+-- deployed that observe resources in the same project as the
+-- \`CloudFunction\`. 2. The resource type must match the pattern expected
+-- for an \`event_type\`. For example, an \`EventTrigger\` that has an
+-- \`event_type\` of \"google.pubsub.topic.publish\" should have a resource
+-- that matches Google Cloud Pub\/Sub topics. Additionally, some services
+-- may support short names when creating an \`EventTrigger\`. These will
+-- always be returned in the normalized \"long\" format. See each
+-- *service\'s* documentation for supported formats.
+etResource :: Lens' EventTrigger (Maybe Text)
+etResource
+  = lens _etResource (\ s a -> s{_etResource = a})
+
+instance FromJSON EventTrigger where
+        parseJSON
+          = withObject "EventTrigger"
+              (\ o ->
+                 EventTrigger' <$>
+                   (o .:? "service") <*> (o .:? "failurePolicy") <*>
+                     (o .:? "eventType")
+                     <*> (o .:? "resource"))
+
+instance ToJSON EventTrigger where
+        toJSON EventTrigger'{..}
+          = object
+              (catMaybes
+                 [("service" .=) <$> _etService,
+                  ("failurePolicy" .=) <$> _etFailurePolicy,
+                  ("eventType" .=) <$> _etEventType,
+                  ("resource" .=) <$> _etResource])
+
+-- | Describes SourceRepository, used to represent parameters related to
+-- source repository where a function is hosted.
+--
+-- /See:/ 'sourceRepository' smart constructor.
+data SourceRepository = SourceRepository'
+    { _srURL         :: !(Maybe Text)
+    , _srDeployedURL :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceRepository' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srURL'
+--
+-- * 'srDeployedURL'
+sourceRepository
+    :: SourceRepository
+sourceRepository =
+    SourceRepository'
+    { _srURL = Nothing
+    , _srDeployedURL = Nothing
+    }
+
+-- | The URL pointing to the hosted repository where the function is defined.
+-- There are supported Cloud Source Repository URLs in the following
+-- formats: To refer to a specific commit:
+-- \`https:\/\/source.developers.google.com\/projects\/*\/repos\/*\/revisions\/*\/paths\/*\`
+-- To refer to a moveable alias (branch):
+-- \`https:\/\/source.developers.google.com\/projects\/*\/repos\/*\/moveable-aliases\/*\/paths\/*\`
+-- In particular, to refer to HEAD use \`master\` moveable alias. To refer
+-- to a specific fixed alias (tag):
+-- \`https:\/\/source.developers.google.com\/projects\/*\/repos\/*\/fixed-aliases\/*\/paths\/*\`
+-- You may omit \`paths\/*\` if you want to use the main directory.
+srURL :: Lens' SourceRepository (Maybe Text)
+srURL = lens _srURL (\ s a -> s{_srURL = a})
+
+-- | Output only. The URL pointing to the hosted repository where the
+-- function were defined at the time of deployment. It always points to a
+-- specific commit in the format described above.
+srDeployedURL :: Lens' SourceRepository (Maybe Text)
+srDeployedURL
+  = lens _srDeployedURL
+      (\ s a -> s{_srDeployedURL = a})
+
+instance FromJSON SourceRepository where
+        parseJSON
+          = withObject "SourceRepository"
+              (\ o ->
+                 SourceRepository' <$>
+                   (o .:? "url") <*> (o .:? "deployedUrl"))
+
+instance ToJSON SourceRepository where
+        toJSON SourceRepository'{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _srURL,
+                  ("deployedUrl" .=) <$> _srDeployedURL])
+
+-- | Metadata describing an Operation
+--
+-- /See:/ 'operationMetadataV1' smart constructor.
+data OperationMetadataV1 = OperationMetadataV1'
+    { _omvVersionId  :: !(Maybe (Textual Int64))
+    , _omvUpdateTime :: !(Maybe DateTime')
+    , _omvType       :: !(Maybe OperationMetadataV1Type)
+    , _omvTarget     :: !(Maybe Text)
+    , _omvRequest    :: !(Maybe OperationMetadataV1Request)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadataV1' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omvVersionId'
+--
+-- * 'omvUpdateTime'
+--
+-- * 'omvType'
+--
+-- * 'omvTarget'
+--
+-- * 'omvRequest'
+operationMetadataV1
+    :: OperationMetadataV1
+operationMetadataV1 =
+    OperationMetadataV1'
+    { _omvVersionId = Nothing
+    , _omvUpdateTime = Nothing
+    , _omvType = Nothing
+    , _omvTarget = Nothing
+    , _omvRequest = Nothing
+    }
+
+-- | Version id of the function created or updated by an API call. This field
+-- is only populated for Create and Update operations.
+omvVersionId :: Lens' OperationMetadataV1 (Maybe Int64)
+omvVersionId
+  = lens _omvVersionId (\ s a -> s{_omvVersionId = a})
+      . mapping _Coerce
+
+-- | The last update timestamp of the operation.
+omvUpdateTime :: Lens' OperationMetadataV1 (Maybe UTCTime)
+omvUpdateTime
+  = lens _omvUpdateTime
+      (\ s a -> s{_omvUpdateTime = a})
+      . mapping _DateTime
+
+-- | Type of operation.
+omvType :: Lens' OperationMetadataV1 (Maybe OperationMetadataV1Type)
+omvType = lens _omvType (\ s a -> s{_omvType = a})
+
+-- | Target of the operation - for example
+-- projects\/project-1\/locations\/region-1\/functions\/function-1
+omvTarget :: Lens' OperationMetadataV1 (Maybe Text)
+omvTarget
+  = lens _omvTarget (\ s a -> s{_omvTarget = a})
+
+-- | The original request that started the operation.
+omvRequest :: Lens' OperationMetadataV1 (Maybe OperationMetadataV1Request)
+omvRequest
+  = lens _omvRequest (\ s a -> s{_omvRequest = a})
+
+instance FromJSON OperationMetadataV1 where
+        parseJSON
+          = withObject "OperationMetadataV1"
+              (\ o ->
+                 OperationMetadataV1' <$>
+                   (o .:? "versionId") <*> (o .:? "updateTime") <*>
+                     (o .:? "type")
+                     <*> (o .:? "target")
+                     <*> (o .:? "request"))
+
+instance ToJSON OperationMetadataV1 where
+        toJSON OperationMetadataV1'{..}
+          = object
+              (catMaybes
+                 [("versionId" .=) <$> _omvVersionId,
+                  ("updateTime" .=) <$> _omvUpdateTime,
+                  ("type" .=) <$> _omvType,
+                  ("target" .=) <$> _omvTarget,
+                  ("request" .=) <$> _omvRequest])
+
+-- | Response of \`GenerateDownloadUrl\` method.
+--
+-- /See:/ 'generateDownloadURLResponse' smart constructor.
+newtype GenerateDownloadURLResponse = GenerateDownloadURLResponse'
+    { _gdurDownloadURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GenerateDownloadURLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdurDownloadURL'
+generateDownloadURLResponse
+    :: GenerateDownloadURLResponse
+generateDownloadURLResponse =
+    GenerateDownloadURLResponse'
+    { _gdurDownloadURL = Nothing
+    }
+
+-- | The generated Google Cloud Storage signed URL that should be used for
+-- function source code download.
+gdurDownloadURL :: Lens' GenerateDownloadURLResponse (Maybe Text)
+gdurDownloadURL
+  = lens _gdurDownloadURL
+      (\ s a -> s{_gdurDownloadURL = a})
+
+instance FromJSON GenerateDownloadURLResponse where
+        parseJSON
+          = withObject "GenerateDownloadURLResponse"
+              (\ o ->
+                 GenerateDownloadURLResponse' <$>
+                   (o .:? "downloadUrl"))
+
+instance ToJSON GenerateDownloadURLResponse where
+        toJSON GenerateDownloadURLResponse'{..}
+          = object
+              (catMaybes [("downloadUrl" .=) <$> _gdurDownloadURL])
+
+-- | Request message for \`TestIamPermissions\` method.
+--
+-- /See:/ 'testIAMPermissionsRequest' smart constructor.
+newtype TestIAMPermissionsRequest = TestIAMPermissionsRequest'
+    { _tiprPermissions :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TestIAMPermissionsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tiprPermissions'
+testIAMPermissionsRequest
+    :: TestIAMPermissionsRequest
+testIAMPermissionsRequest =
+    TestIAMPermissionsRequest'
+    { _tiprPermissions = Nothing
+    }
+
+-- | The set of permissions to check for the \`resource\`. Permissions with
+-- wildcards (such as \'*\' or \'storage.*\') are not allowed. For more
+-- information see [IAM
+-- Overview](https:\/\/cloud.google.com\/iam\/docs\/overview#permissions).
+tiprPermissions :: Lens' TestIAMPermissionsRequest [Text]
+tiprPermissions
+  = lens _tiprPermissions
+      (\ s a -> s{_tiprPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TestIAMPermissionsRequest where
+        parseJSON
+          = withObject "TestIAMPermissionsRequest"
+              (\ o ->
+                 TestIAMPermissionsRequest' <$>
+                   (o .:? "permissions" .!= mempty))
+
+instance ToJSON TestIAMPermissionsRequest where
+        toJSON TestIAMPermissionsRequest'{..}
+          = object
+              (catMaybes [("permissions" .=) <$> _tiprPermissions])
+
+-- | Response message for \`TestIamPermissions\` method.
+--
+-- /See:/ 'testIAMPermissionsResponse' smart constructor.
+newtype TestIAMPermissionsResponse = TestIAMPermissionsResponse'
+    { _tiamprPermissions :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TestIAMPermissionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tiamprPermissions'
+testIAMPermissionsResponse
+    :: TestIAMPermissionsResponse
+testIAMPermissionsResponse =
+    TestIAMPermissionsResponse'
+    { _tiamprPermissions = Nothing
+    }
+
+-- | A subset of \`TestPermissionsRequest.permissions\` that the caller is
+-- allowed.
+tiamprPermissions :: Lens' TestIAMPermissionsResponse [Text]
+tiamprPermissions
+  = lens _tiamprPermissions
+      (\ s a -> s{_tiamprPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TestIAMPermissionsResponse where
+        parseJSON
+          = withObject "TestIAMPermissionsResponse"
+              (\ o ->
+                 TestIAMPermissionsResponse' <$>
+                   (o .:? "permissions" .!= mempty))
+
+instance ToJSON TestIAMPermissionsResponse where
+        toJSON TestIAMPermissionsResponse'{..}
+          = object
+              (catMaybes
+                 [("permissions" .=) <$> _tiamprPermissions])
+
+-- | Defines an Identity and Access Management (IAM) policy. It is used to
+-- specify access control policies for Cloud Platform resources. A
+-- \`Policy\` consists of a list of \`bindings\`. A \`binding\` binds a
+-- list of \`members\` to a \`role\`, where the members can be user
+-- accounts, Google groups, Google domains, and service accounts. A
+-- \`role\` is a named list of permissions defined by IAM. **JSON Example**
+-- { \"bindings\": [ { \"role\": \"roles\/owner\", \"members\": [
+-- \"user:mike\'example.com\", \"group:admins\'example.com\",
+-- \"domain:google.com\",
+-- \"serviceAccount:my-other-app\'appspot.gserviceaccount.com\" ] }, {
+-- \"role\": \"roles\/viewer\", \"members\": [\"user:sean\'example.com\"] }
+-- ] } **YAML Example** bindings: - members: - user:mike\'example.com -
+-- group:admins\'example.com - domain:google.com -
+-- serviceAccount:my-other-app\'appspot.gserviceaccount.com role:
+-- roles\/owner - members: - user:sean\'example.com role: roles\/viewer For
+-- a description of IAM and its features, see the [IAM developer\'s
+-- guide](https:\/\/cloud.google.com\/iam\/docs).
+--
+-- /See:/ 'policy' smart constructor.
+data Policy = Policy'
+    { _pAuditConfigs :: !(Maybe [AuditConfig])
+    , _pEtag         :: !(Maybe Bytes)
+    , _pVersion      :: !(Maybe (Textual Int32))
+    , _pBindings     :: !(Maybe [Binding])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Policy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pAuditConfigs'
+--
+-- * 'pEtag'
+--
+-- * 'pVersion'
+--
+-- * 'pBindings'
+policy
+    :: Policy
+policy =
+    Policy'
+    { _pAuditConfigs = Nothing
+    , _pEtag = Nothing
+    , _pVersion = Nothing
+    , _pBindings = Nothing
+    }
+
+-- | Specifies cloud audit logging configuration for this policy.
+pAuditConfigs :: Lens' Policy [AuditConfig]
+pAuditConfigs
+  = lens _pAuditConfigs
+      (\ s a -> s{_pAuditConfigs = a})
+      . _Default
+      . _Coerce
+
+-- | \`etag\` is used for optimistic concurrency control as a way to help
+-- prevent simultaneous updates of a policy from overwriting each other. It
+-- is strongly suggested that systems make use of the \`etag\` in the
+-- read-modify-write cycle to perform policy updates in order to avoid race
+-- conditions: An \`etag\` is returned in the response to \`getIamPolicy\`,
+-- and systems are expected to put that etag in the request to
+-- \`setIamPolicy\` to ensure that their change will be applied to the same
+-- version of the policy. If no \`etag\` is provided in the call to
+-- \`setIamPolicy\`, then the existing policy is overwritten blindly.
+pEtag :: Lens' Policy (Maybe ByteString)
+pEtag
+  = lens _pEtag (\ s a -> s{_pEtag = a}) .
+      mapping _Bytes
+
+-- | Deprecated.
+pVersion :: Lens' Policy (Maybe Int32)
+pVersion
+  = lens _pVersion (\ s a -> s{_pVersion = a}) .
+      mapping _Coerce
+
+-- | Associates a list of \`members\` to a \`role\`. \`bindings\` with no
+-- members will result in an error.
+pBindings :: Lens' Policy [Binding]
+pBindings
+  = lens _pBindings (\ s a -> s{_pBindings = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Policy where
+        parseJSON
+          = withObject "Policy"
+              (\ o ->
+                 Policy' <$>
+                   (o .:? "auditConfigs" .!= mempty) <*> (o .:? "etag")
+                     <*> (o .:? "version")
+                     <*> (o .:? "bindings" .!= mempty))
+
+instance ToJSON Policy where
+        toJSON Policy'{..}
+          = object
+              (catMaybes
+                 [("auditConfigs" .=) <$> _pAuditConfigs,
+                  ("etag" .=) <$> _pEtag, ("version" .=) <$> _pVersion,
+                  ("bindings" .=) <$> _pBindings])
+
+-- | Cross-service attributes for the location. For example
+-- {\"cloud.googleapis.com\/region\": \"us-east1\"}
+--
+-- /See:/ 'locationLabels' smart constructor.
+newtype LocationLabels = LocationLabels'
+    { _llAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocationLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llAddtional'
+locationLabels
+    :: HashMap Text Text -- ^ 'llAddtional'
+    -> LocationLabels
+locationLabels pLlAddtional_ =
+    LocationLabels'
+    { _llAddtional = _Coerce # pLlAddtional_
+    }
+
+llAddtional :: Lens' LocationLabels (HashMap Text Text)
+llAddtional
+  = lens _llAddtional (\ s a -> s{_llAddtional = a}) .
+      _Coerce
+
+instance FromJSON LocationLabels where
+        parseJSON
+          = withObject "LocationLabels"
+              (\ o -> LocationLabels' <$> (parseJSONObject o))
+
+instance ToJSON LocationLabels where
+        toJSON = toJSON . _llAddtional
+
+-- | Response for the \`ListFunctions\` method.
+--
+-- /See:/ 'listFunctionsResponse' smart constructor.
+data ListFunctionsResponse = ListFunctionsResponse'
+    { _lfrNextPageToken :: !(Maybe Text)
+    , _lfrFunctions     :: !(Maybe [CloudFunction])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListFunctionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfrNextPageToken'
+--
+-- * 'lfrFunctions'
+listFunctionsResponse
+    :: ListFunctionsResponse
+listFunctionsResponse =
+    ListFunctionsResponse'
+    { _lfrNextPageToken = Nothing
+    , _lfrFunctions = Nothing
+    }
+
+-- | If not empty, indicates that there may be more functions that match the
+-- request; this value should be passed in a new
+-- google.cloud.functions.v1.ListFunctionsRequest to get more functions.
+lfrNextPageToken :: Lens' ListFunctionsResponse (Maybe Text)
+lfrNextPageToken
+  = lens _lfrNextPageToken
+      (\ s a -> s{_lfrNextPageToken = a})
+
+-- | The functions that match the request.
+lfrFunctions :: Lens' ListFunctionsResponse [CloudFunction]
+lfrFunctions
+  = lens _lfrFunctions (\ s a -> s{_lfrFunctions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListFunctionsResponse where
+        parseJSON
+          = withObject "ListFunctionsResponse"
+              (\ o ->
+                 ListFunctionsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "functions" .!= mempty))
+
+instance ToJSON ListFunctionsResponse where
+        toJSON ListFunctionsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lfrNextPageToken,
+                  ("functions" .=) <$> _lfrFunctions])
+
+-- | Service-specific metadata. For example the available capacity at the
+-- given location.
+--
+-- /See:/ 'locationMetadata' smart constructor.
+newtype LocationMetadata = LocationMetadata'
+    { _lmAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmAddtional'
+locationMetadata
+    :: HashMap Text JSONValue -- ^ 'lmAddtional'
+    -> LocationMetadata
+locationMetadata pLmAddtional_ =
+    LocationMetadata'
+    { _lmAddtional = _Coerce # pLmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+lmAddtional :: Lens' LocationMetadata (HashMap Text JSONValue)
+lmAddtional
+  = lens _lmAddtional (\ s a -> s{_lmAddtional = a}) .
+      _Coerce
+
+instance FromJSON LocationMetadata where
+        parseJSON
+          = withObject "LocationMetadata"
+              (\ o -> LocationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON LocationMetadata where
+        toJSON = toJSON . _lmAddtional
+
+-- | 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
+
+-- | Provides the configuration for logging a type of permissions. Example: {
+-- \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\",
+-- \"exempted_members\": [ \"user:foo\'gmail.com\" ] }, { \"log_type\":
+-- \"DATA_WRITE\", } ] } This enables \'DATA_READ\' and \'DATA_WRITE\'
+-- logging, while exempting foo\'gmail.com from DATA_READ logging.
+--
+-- /See:/ 'auditLogConfig' smart constructor.
+data AuditLogConfig = AuditLogConfig'
+    { _alcLogType         :: !(Maybe AuditLogConfigLogType)
+    , _alcExemptedMembers :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AuditLogConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alcLogType'
+--
+-- * 'alcExemptedMembers'
+auditLogConfig
+    :: AuditLogConfig
+auditLogConfig =
+    AuditLogConfig'
+    { _alcLogType = Nothing
+    , _alcExemptedMembers = Nothing
+    }
+
+-- | The log type that this config enables.
+alcLogType :: Lens' AuditLogConfig (Maybe AuditLogConfigLogType)
+alcLogType
+  = lens _alcLogType (\ s a -> s{_alcLogType = a})
+
+-- | Specifies the identities that do not cause logging for this type of
+-- permission. Follows the same format of Binding.members.
+alcExemptedMembers :: Lens' AuditLogConfig [Text]
+alcExemptedMembers
+  = lens _alcExemptedMembers
+      (\ s a -> s{_alcExemptedMembers = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AuditLogConfig where
+        parseJSON
+          = withObject "AuditLogConfig"
+              (\ o ->
+                 AuditLogConfig' <$>
+                   (o .:? "logType") <*>
+                     (o .:? "exemptedMembers" .!= mempty))
+
+instance ToJSON AuditLogConfig where
+        toJSON AuditLogConfig'{..}
+          = object
+              (catMaybes
+                 [("logType" .=) <$> _alcLogType,
+                  ("exemptedMembers" .=) <$> _alcExemptedMembers])
+
+-- | Describes a Cloud Function that contains user computation executed in
+-- response to an event. It encapsulate function and triggers
+-- configurations. LINT.IfChange
+--
+-- /See:/ 'cloudFunction' smart constructor.
+data CloudFunction = CloudFunction'
+    { _cfRuntime              :: !(Maybe Text)
+    , _cfStatus               :: !(Maybe CloudFunctionStatus)
+    , _cfSourceArchiveURL     :: !(Maybe Text)
+    , _cfVersionId            :: !(Maybe (Textual Int64))
+    , _cfSourceUploadURL      :: !(Maybe Text)
+    , _cfEntryPoint           :: !(Maybe Text)
+    , _cfHTTPSTrigger         :: !(Maybe HTTPSTrigger)
+    , _cfNetwork              :: !(Maybe Text)
+    , _cfMaxInstances         :: !(Maybe (Textual Int32))
+    , _cfEventTrigger         :: !(Maybe EventTrigger)
+    , _cfUpdateTime           :: !(Maybe DateTime')
+    , _cfName                 :: !(Maybe Text)
+    , _cfSourceRepository     :: !(Maybe SourceRepository)
+    , _cfAvailableMemoryMb    :: !(Maybe (Textual Int32))
+    , _cfLabels               :: !(Maybe CloudFunctionLabels)
+    , _cfServiceAccountEmail  :: !(Maybe Text)
+    , _cfEnvironmentVariables :: !(Maybe CloudFunctionEnvironmentVariables)
+    , _cfTimeout              :: !(Maybe GDuration)
+    , _cfVPCConnector         :: !(Maybe Text)
+    , _cfDescription          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFunction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfRuntime'
+--
+-- * 'cfStatus'
+--
+-- * 'cfSourceArchiveURL'
+--
+-- * 'cfVersionId'
+--
+-- * 'cfSourceUploadURL'
+--
+-- * 'cfEntryPoint'
+--
+-- * 'cfHTTPSTrigger'
+--
+-- * 'cfNetwork'
+--
+-- * 'cfMaxInstances'
+--
+-- * 'cfEventTrigger'
+--
+-- * 'cfUpdateTime'
+--
+-- * 'cfName'
+--
+-- * 'cfSourceRepository'
+--
+-- * 'cfAvailableMemoryMb'
+--
+-- * 'cfLabels'
+--
+-- * 'cfServiceAccountEmail'
+--
+-- * 'cfEnvironmentVariables'
+--
+-- * 'cfTimeout'
+--
+-- * 'cfVPCConnector'
+--
+-- * 'cfDescription'
+cloudFunction
+    :: CloudFunction
+cloudFunction =
+    CloudFunction'
+    { _cfRuntime = Nothing
+    , _cfStatus = Nothing
+    , _cfSourceArchiveURL = Nothing
+    , _cfVersionId = Nothing
+    , _cfSourceUploadURL = Nothing
+    , _cfEntryPoint = Nothing
+    , _cfHTTPSTrigger = Nothing
+    , _cfNetwork = Nothing
+    , _cfMaxInstances = Nothing
+    , _cfEventTrigger = Nothing
+    , _cfUpdateTime = Nothing
+    , _cfName = Nothing
+    , _cfSourceRepository = Nothing
+    , _cfAvailableMemoryMb = Nothing
+    , _cfLabels = Nothing
+    , _cfServiceAccountEmail = Nothing
+    , _cfEnvironmentVariables = Nothing
+    , _cfTimeout = Nothing
+    , _cfVPCConnector = Nothing
+    , _cfDescription = Nothing
+    }
+
+-- | The runtime in which the function is going to run. If empty, defaults to
+-- Node.js 6.
+cfRuntime :: Lens' CloudFunction (Maybe Text)
+cfRuntime
+  = lens _cfRuntime (\ s a -> s{_cfRuntime = a})
+
+-- | Output only. Status of the function deployment.
+cfStatus :: Lens' CloudFunction (Maybe CloudFunctionStatus)
+cfStatus = lens _cfStatus (\ s a -> s{_cfStatus = a})
+
+-- | The Google Cloud Storage URL, starting with gs:\/\/, pointing to the zip
+-- archive which contains the function.
+cfSourceArchiveURL :: Lens' CloudFunction (Maybe Text)
+cfSourceArchiveURL
+  = lens _cfSourceArchiveURL
+      (\ s a -> s{_cfSourceArchiveURL = a})
+
+-- | Output only. The version identifier of the Cloud Function. Each
+-- deployment attempt results in a new version of a function being created.
+cfVersionId :: Lens' CloudFunction (Maybe Int64)
+cfVersionId
+  = lens _cfVersionId (\ s a -> s{_cfVersionId = a}) .
+      mapping _Coerce
+
+-- | The Google Cloud Storage signed URL used for source uploading, generated
+-- by google.cloud.functions.v1.GenerateUploadUrl
+cfSourceUploadURL :: Lens' CloudFunction (Maybe Text)
+cfSourceUploadURL
+  = lens _cfSourceUploadURL
+      (\ s a -> s{_cfSourceUploadURL = a})
+
+-- | The name of the function (as defined in source code) that will be
+-- executed. Defaults to the resource name suffix, if not specified. For
+-- backward compatibility, if function with given name is not found, then
+-- the system will try to use function named \"function\". For Node.js this
+-- is name of a function exported by the module specified in
+-- \`source_location\`.
+cfEntryPoint :: Lens' CloudFunction (Maybe Text)
+cfEntryPoint
+  = lens _cfEntryPoint (\ s a -> s{_cfEntryPoint = a})
+
+-- | An HTTPS endpoint type of source that can be triggered via URL.
+cfHTTPSTrigger :: Lens' CloudFunction (Maybe HTTPSTrigger)
+cfHTTPSTrigger
+  = lens _cfHTTPSTrigger
+      (\ s a -> s{_cfHTTPSTrigger = a})
+
+-- | The VPC Network that this cloud function can connect to. It can be
+-- either the fully-qualified URI, or the short name of the network
+-- resource. If the short network name is used, the network must belong to
+-- the same project. Otherwise, it must belong to a project within the same
+-- organization. The format of this field is either
+-- \`projects\/{project}\/global\/networks\/{network}\` or \`{network}\`,
+-- where {project} is a project id where the network is defined, and
+-- {network} is the short name of the network. This field is mutually
+-- exclusive with \`vpc_connector\` and will be replaced by it. See [the
+-- VPC documentation](https:\/\/cloud.google.com\/compute\/docs\/vpc) for
+-- more information on connecting Cloud projects. This feature is currently
+-- in alpha, available only for whitelisted users.
+cfNetwork :: Lens' CloudFunction (Maybe Text)
+cfNetwork
+  = lens _cfNetwork (\ s a -> s{_cfNetwork = a})
+
+-- | The limit on the maximum number of function instances that may coexist
+-- at a given time. This feature is currently in alpha, available only for
+-- whitelisted users.
+cfMaxInstances :: Lens' CloudFunction (Maybe Int32)
+cfMaxInstances
+  = lens _cfMaxInstances
+      (\ s a -> s{_cfMaxInstances = a})
+      . mapping _Coerce
+
+-- | A source that fires events in response to a condition in another
+-- service.
+cfEventTrigger :: Lens' CloudFunction (Maybe EventTrigger)
+cfEventTrigger
+  = lens _cfEventTrigger
+      (\ s a -> s{_cfEventTrigger = a})
+
+-- | Output only. The last update timestamp of a Cloud Function.
+cfUpdateTime :: Lens' CloudFunction (Maybe UTCTime)
+cfUpdateTime
+  = lens _cfUpdateTime (\ s a -> s{_cfUpdateTime = a})
+      . mapping _DateTime
+
+-- | A user-defined name of the function. Function names must be unique
+-- globally and match pattern \`projects\/*\/locations\/*\/functions\/*\`
+cfName :: Lens' CloudFunction (Maybe Text)
+cfName = lens _cfName (\ s a -> s{_cfName = a})
+
+-- | **Beta Feature** The source repository where a function is hosted.
+cfSourceRepository :: Lens' CloudFunction (Maybe SourceRepository)
+cfSourceRepository
+  = lens _cfSourceRepository
+      (\ s a -> s{_cfSourceRepository = a})
+
+-- | The amount of memory in MB available for a function. Defaults to 256MB.
+cfAvailableMemoryMb :: Lens' CloudFunction (Maybe Int32)
+cfAvailableMemoryMb
+  = lens _cfAvailableMemoryMb
+      (\ s a -> s{_cfAvailableMemoryMb = a})
+      . mapping _Coerce
+
+-- | Labels associated with this Cloud Function.
+cfLabels :: Lens' CloudFunction (Maybe CloudFunctionLabels)
+cfLabels = lens _cfLabels (\ s a -> s{_cfLabels = a})
+
+-- | Output only. The email of the function\'s service account.
+cfServiceAccountEmail :: Lens' CloudFunction (Maybe Text)
+cfServiceAccountEmail
+  = lens _cfServiceAccountEmail
+      (\ s a -> s{_cfServiceAccountEmail = a})
+
+-- | Environment variables that shall be available during function execution.
+cfEnvironmentVariables :: Lens' CloudFunction (Maybe CloudFunctionEnvironmentVariables)
+cfEnvironmentVariables
+  = lens _cfEnvironmentVariables
+      (\ s a -> s{_cfEnvironmentVariables = a})
+
+-- | The function execution timeout. Execution is considered failed and can
+-- be terminated if the function is not completed at the end of the timeout
+-- period. Defaults to 60 seconds.
+cfTimeout :: Lens' CloudFunction (Maybe Scientific)
+cfTimeout
+  = lens _cfTimeout (\ s a -> s{_cfTimeout = a}) .
+      mapping _GDuration
+
+-- | The VPC Network Connector that this cloud function can connect to. It
+-- can be either the fully-qualified URI, or the short name of the network
+-- connector resource. The format of this field is
+-- \`projects\/*\/locations\/*\/connectors\/*\` This field is mutually
+-- exclusive with \`network\` field and will eventually replace it. See
+-- [the VPC documentation](https:\/\/cloud.google.com\/compute\/docs\/vpc)
+-- for more information on connecting Cloud projects. This feature is
+-- currently in alpha, available only for whitelisted users.
+cfVPCConnector :: Lens' CloudFunction (Maybe Text)
+cfVPCConnector
+  = lens _cfVPCConnector
+      (\ s a -> s{_cfVPCConnector = a})
+
+-- | User-provided description of a function.
+cfDescription :: Lens' CloudFunction (Maybe Text)
+cfDescription
+  = lens _cfDescription
+      (\ s a -> s{_cfDescription = a})
+
+instance FromJSON CloudFunction where
+        parseJSON
+          = withObject "CloudFunction"
+              (\ o ->
+                 CloudFunction' <$>
+                   (o .:? "runtime") <*> (o .:? "status") <*>
+                     (o .:? "sourceArchiveUrl")
+                     <*> (o .:? "versionId")
+                     <*> (o .:? "sourceUploadUrl")
+                     <*> (o .:? "entryPoint")
+                     <*> (o .:? "httpsTrigger")
+                     <*> (o .:? "network")
+                     <*> (o .:? "maxInstances")
+                     <*> (o .:? "eventTrigger")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "name")
+                     <*> (o .:? "sourceRepository")
+                     <*> (o .:? "availableMemoryMb")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "serviceAccountEmail")
+                     <*> (o .:? "environmentVariables")
+                     <*> (o .:? "timeout")
+                     <*> (o .:? "vpcConnector")
+                     <*> (o .:? "description"))
+
+instance ToJSON CloudFunction where
+        toJSON CloudFunction'{..}
+          = object
+              (catMaybes
+                 [("runtime" .=) <$> _cfRuntime,
+                  ("status" .=) <$> _cfStatus,
+                  ("sourceArchiveUrl" .=) <$> _cfSourceArchiveURL,
+                  ("versionId" .=) <$> _cfVersionId,
+                  ("sourceUploadUrl" .=) <$> _cfSourceUploadURL,
+                  ("entryPoint" .=) <$> _cfEntryPoint,
+                  ("httpsTrigger" .=) <$> _cfHTTPSTrigger,
+                  ("network" .=) <$> _cfNetwork,
+                  ("maxInstances" .=) <$> _cfMaxInstances,
+                  ("eventTrigger" .=) <$> _cfEventTrigger,
+                  ("updateTime" .=) <$> _cfUpdateTime,
+                  ("name" .=) <$> _cfName,
+                  ("sourceRepository" .=) <$> _cfSourceRepository,
+                  ("availableMemoryMb" .=) <$> _cfAvailableMemoryMb,
+                  ("labels" .=) <$> _cfLabels,
+                  ("serviceAccountEmail" .=) <$>
+                    _cfServiceAccountEmail,
+                  ("environmentVariables" .=) <$>
+                    _cfEnvironmentVariables,
+                  ("timeout" .=) <$> _cfTimeout,
+                  ("vpcConnector" .=) <$> _cfVPCConnector,
+                  ("description" .=) <$> _cfDescription])
+
+-- | The original request that started the operation.
+--
+-- /See:/ 'operationMetadataV1Beta2Request' smart constructor.
+newtype OperationMetadataV1Beta2Request = OperationMetadataV1Beta2Request'
+    { _omvbrAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadataV1Beta2Request' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omvbrAddtional'
+operationMetadataV1Beta2Request
+    :: HashMap Text JSONValue -- ^ 'omvbrAddtional'
+    -> OperationMetadataV1Beta2Request
+operationMetadataV1Beta2Request pOmvbrAddtional_ =
+    OperationMetadataV1Beta2Request'
+    { _omvbrAddtional = _Coerce # pOmvbrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+omvbrAddtional :: Lens' OperationMetadataV1Beta2Request (HashMap Text JSONValue)
+omvbrAddtional
+  = lens _omvbrAddtional
+      (\ s a -> s{_omvbrAddtional = a})
+      . _Coerce
+
+instance FromJSON OperationMetadataV1Beta2Request
+         where
+        parseJSON
+          = withObject "OperationMetadataV1Beta2Request"
+              (\ o ->
+                 OperationMetadataV1Beta2Request' <$>
+                   (parseJSONObject o))
+
+instance ToJSON OperationMetadataV1Beta2Request where
+        toJSON = toJSON . _omvbrAddtional
+
+-- | Labels associated with this Cloud Function.
+--
+-- /See:/ 'cloudFunctionLabels' smart constructor.
+newtype CloudFunctionLabels = CloudFunctionLabels'
+    { _cflAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFunctionLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cflAddtional'
+cloudFunctionLabels
+    :: HashMap Text Text -- ^ 'cflAddtional'
+    -> CloudFunctionLabels
+cloudFunctionLabels pCflAddtional_ =
+    CloudFunctionLabels'
+    { _cflAddtional = _Coerce # pCflAddtional_
+    }
+
+cflAddtional :: Lens' CloudFunctionLabels (HashMap Text Text)
+cflAddtional
+  = lens _cflAddtional (\ s a -> s{_cflAddtional = a})
+      . _Coerce
+
+instance FromJSON CloudFunctionLabels where
+        parseJSON
+          = withObject "CloudFunctionLabels"
+              (\ o -> CloudFunctionLabels' <$> (parseJSONObject o))
+
+instance ToJSON CloudFunctionLabels where
+        toJSON = toJSON . _cflAddtional
+
+-- | 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
+
+-- | Request for the \`CallFunction\` method.
+--
+-- /See:/ 'callFunctionRequest' smart constructor.
+newtype CallFunctionRequest = CallFunctionRequest'
+    { _cfrData :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CallFunctionRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfrData'
+callFunctionRequest
+    :: CallFunctionRequest
+callFunctionRequest =
+    CallFunctionRequest'
+    { _cfrData = Nothing
+    }
+
+-- | Input to be passed to the function.
+cfrData :: Lens' CallFunctionRequest (Maybe Text)
+cfrData = lens _cfrData (\ s a -> s{_cfrData = a})
+
+instance FromJSON CallFunctionRequest where
+        parseJSON
+          = withObject "CallFunctionRequest"
+              (\ o -> CallFunctionRequest' <$> (o .:? "data"))
+
+instance ToJSON CallFunctionRequest where
+        toJSON CallFunctionRequest'{..}
+          = object (catMaybes [("data" .=) <$> _cfrData])
+
+-- | Associates \`members\` with a \`role\`.
+--
+-- /See:/ 'binding' smart constructor.
+data Binding = Binding'
+    { _bMembers   :: !(Maybe [Text])
+    , _bRole      :: !(Maybe Text)
+    , _bCondition :: !(Maybe Expr)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Binding' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bMembers'
+--
+-- * 'bRole'
+--
+-- * 'bCondition'
+binding
+    :: Binding
+binding =
+    Binding'
+    { _bMembers = Nothing
+    , _bRole = Nothing
+    , _bCondition = Nothing
+    }
+
+-- | Specifies the identities requesting access for a Cloud Platform
+-- resource. \`members\` can have the following values: * \`allUsers\`: A
+-- special identifier that represents anyone who is on the internet; with
+-- or without a Google account. * \`allAuthenticatedUsers\`: A special
+-- identifier that represents anyone who is authenticated with a Google
+-- account or a service account. * \`user:{emailid}\`: An email address
+-- that represents a specific Google account. For example,
+-- \`alice\'gmail.com\` . * \`serviceAccount:{emailid}\`: An email address
+-- that represents a service account. For example,
+-- \`my-other-app\'appspot.gserviceaccount.com\`. * \`group:{emailid}\`: An
+-- email address that represents a Google group. For example,
+-- \`admins\'example.com\`. * \`domain:{domain}\`: A Google Apps domain
+-- name that represents all the users of that domain. For example,
+-- \`google.com\` or \`example.com\`.
+bMembers :: Lens' Binding [Text]
+bMembers
+  = lens _bMembers (\ s a -> s{_bMembers = a}) .
+      _Default
+      . _Coerce
+
+-- | Role that is assigned to \`members\`. For example, \`roles\/viewer\`,
+-- \`roles\/editor\`, or \`roles\/owner\`.
+bRole :: Lens' Binding (Maybe Text)
+bRole = lens _bRole (\ s a -> s{_bRole = a})
+
+-- | Unimplemented. The condition that is associated with this binding. NOTE:
+-- an unsatisfied condition will not allow user access via current binding.
+-- Different bindings, including their conditions, are examined
+-- independently.
+bCondition :: Lens' Binding (Maybe Expr)
+bCondition
+  = lens _bCondition (\ s a -> s{_bCondition = a})
+
+instance FromJSON Binding where
+        parseJSON
+          = withObject "Binding"
+              (\ o ->
+                 Binding' <$>
+                   (o .:? "members" .!= mempty) <*> (o .:? "role") <*>
+                     (o .:? "condition"))
+
+instance ToJSON Binding where
+        toJSON Binding'{..}
+          = object
+              (catMaybes
+                 [("members" .=) <$> _bMembers,
+                  ("role" .=) <$> _bRole,
+                  ("condition" .=) <$> _bCondition])
diff --git a/gen/Network/Google/CloudFunctions/Types/Sum.hs b/gen/Network/Google/CloudFunctions/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudFunctions/Types/Sum.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudFunctions.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.CloudFunctions.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Type of operation.
+data OperationMetadataV1Type
+    = OperationUnspecified
+      -- ^ @OPERATION_UNSPECIFIED@
+      -- Unknown operation type.
+    | CreateFunction
+      -- ^ @CREATE_FUNCTION@
+      -- Triggered by CreateFunction call
+    | UpdateFunction
+      -- ^ @UPDATE_FUNCTION@
+      -- Triggered by UpdateFunction call
+    | DeleteFunction
+      -- ^ @DELETE_FUNCTION@
+      -- Triggered by DeleteFunction call.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OperationMetadataV1Type
+
+instance FromHttpApiData OperationMetadataV1Type where
+    parseQueryParam = \case
+        "OPERATION_UNSPECIFIED" -> Right OperationUnspecified
+        "CREATE_FUNCTION" -> Right CreateFunction
+        "UPDATE_FUNCTION" -> Right UpdateFunction
+        "DELETE_FUNCTION" -> Right DeleteFunction
+        x -> Left ("Unable to parse OperationMetadataV1Type from: " <> x)
+
+instance ToHttpApiData OperationMetadataV1Type where
+    toQueryParam = \case
+        OperationUnspecified -> "OPERATION_UNSPECIFIED"
+        CreateFunction -> "CREATE_FUNCTION"
+        UpdateFunction -> "UPDATE_FUNCTION"
+        DeleteFunction -> "DELETE_FUNCTION"
+
+instance FromJSON OperationMetadataV1Type where
+    parseJSON = parseJSONText "OperationMetadataV1Type"
+
+instance ToJSON OperationMetadataV1Type where
+    toJSON = toJSONText
+
+-- | Output only. Status of the function deployment.
+data CloudFunctionStatus
+    = CloudFunctionStatusUnspecified
+      -- ^ @CLOUD_FUNCTION_STATUS_UNSPECIFIED@
+      -- Not specified. Invalid state.
+    | Active
+      -- ^ @ACTIVE@
+      -- Function has been succesfully deployed and is serving.
+    | Offline
+      -- ^ @OFFLINE@
+      -- Function deployment failed and the function isn’t serving.
+    | DeployInProgress
+      -- ^ @DEPLOY_IN_PROGRESS@
+      -- Function is being created or updated.
+    | DeleteInProgress
+      -- ^ @DELETE_IN_PROGRESS@
+      -- Function is being deleted.
+    | Unknown
+      -- ^ @UNKNOWN@
+      -- Function deployment failed and the function serving state is undefined.
+      -- The function should be updated or deleted to move it out of this state.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CloudFunctionStatus
+
+instance FromHttpApiData CloudFunctionStatus where
+    parseQueryParam = \case
+        "CLOUD_FUNCTION_STATUS_UNSPECIFIED" -> Right CloudFunctionStatusUnspecified
+        "ACTIVE" -> Right Active
+        "OFFLINE" -> Right Offline
+        "DEPLOY_IN_PROGRESS" -> Right DeployInProgress
+        "DELETE_IN_PROGRESS" -> Right DeleteInProgress
+        "UNKNOWN" -> Right Unknown
+        x -> Left ("Unable to parse CloudFunctionStatus from: " <> x)
+
+instance ToHttpApiData CloudFunctionStatus where
+    toQueryParam = \case
+        CloudFunctionStatusUnspecified -> "CLOUD_FUNCTION_STATUS_UNSPECIFIED"
+        Active -> "ACTIVE"
+        Offline -> "OFFLINE"
+        DeployInProgress -> "DEPLOY_IN_PROGRESS"
+        DeleteInProgress -> "DELETE_IN_PROGRESS"
+        Unknown -> "UNKNOWN"
+
+instance FromJSON CloudFunctionStatus where
+    parseJSON = parseJSONText "CloudFunctionStatus"
+
+instance ToJSON CloudFunctionStatus where
+    toJSON = toJSONText
+
+-- | Type of operation.
+data OperationMetadataV1Beta2Type
+    = OMVBTOperationUnspecified
+      -- ^ @OPERATION_UNSPECIFIED@
+      -- Unknown operation type.
+    | OMVBTCreateFunction
+      -- ^ @CREATE_FUNCTION@
+      -- Triggered by CreateFunction call
+    | OMVBTUpdateFunction
+      -- ^ @UPDATE_FUNCTION@
+      -- Triggered by UpdateFunction call
+    | OMVBTDeleteFunction
+      -- ^ @DELETE_FUNCTION@
+      -- Triggered by DeleteFunction call.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OperationMetadataV1Beta2Type
+
+instance FromHttpApiData OperationMetadataV1Beta2Type where
+    parseQueryParam = \case
+        "OPERATION_UNSPECIFIED" -> Right OMVBTOperationUnspecified
+        "CREATE_FUNCTION" -> Right OMVBTCreateFunction
+        "UPDATE_FUNCTION" -> Right OMVBTUpdateFunction
+        "DELETE_FUNCTION" -> Right OMVBTDeleteFunction
+        x -> Left ("Unable to parse OperationMetadataV1Beta2Type from: " <> x)
+
+instance ToHttpApiData OperationMetadataV1Beta2Type where
+    toQueryParam = \case
+        OMVBTOperationUnspecified -> "OPERATION_UNSPECIFIED"
+        OMVBTCreateFunction -> "CREATE_FUNCTION"
+        OMVBTUpdateFunction -> "UPDATE_FUNCTION"
+        OMVBTDeleteFunction -> "DELETE_FUNCTION"
+
+instance FromJSON OperationMetadataV1Beta2Type where
+    parseJSON = parseJSONText "OperationMetadataV1Beta2Type"
+
+instance ToJSON OperationMetadataV1Beta2Type where
+    toJSON = toJSONText
+
+-- | The log type that this config enables.
+data AuditLogConfigLogType
+    = LogTypeUnspecified
+      -- ^ @LOG_TYPE_UNSPECIFIED@
+      -- Default case. Should never be this.
+    | AdminRead
+      -- ^ @ADMIN_READ@
+      -- Admin reads. Example: CloudIAM getIamPolicy
+    | DataWrite
+      -- ^ @DATA_WRITE@
+      -- Data writes. Example: CloudSQL Users create
+    | DataRead
+      -- ^ @DATA_READ@
+      -- Data reads. Example: CloudSQL Users list
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AuditLogConfigLogType
+
+instance FromHttpApiData AuditLogConfigLogType where
+    parseQueryParam = \case
+        "LOG_TYPE_UNSPECIFIED" -> Right LogTypeUnspecified
+        "ADMIN_READ" -> Right AdminRead
+        "DATA_WRITE" -> Right DataWrite
+        "DATA_READ" -> Right DataRead
+        x -> Left ("Unable to parse AuditLogConfigLogType from: " <> x)
+
+instance ToHttpApiData AuditLogConfigLogType where
+    toQueryParam = \case
+        LogTypeUnspecified -> "LOG_TYPE_UNSPECIFIED"
+        AdminRead -> "ADMIN_READ"
+        DataWrite -> "DATA_WRITE"
+        DataRead -> "DATA_READ"
+
+instance FromJSON AuditLogConfigLogType where
+    parseJSON = parseJSONText "AuditLogConfigLogType"
+
+instance ToJSON AuditLogConfigLogType 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
diff --git a/gen/Network/Google/Resource/CloudFunctions/Operations/Get.hs b/gen/Network/Google/Resource/CloudFunctions/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Operations/Get.hs
@@ -0,0 +1,146 @@
+{-# 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.CloudFunctions.Operations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.operations.get@.
+module Network.Google.Resource.CloudFunctions.Operations.Get
+    (
+    -- * REST Resource
+      OperationsGetResource
+
+    -- * Creating a Request
+    , operationsGet
+    , OperationsGet
+
+    -- * Request Lenses
+    , ogXgafv
+    , ogUploadProtocol
+    , ogAccessToken
+    , ogUploadType
+    , ogName
+    , ogCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.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-platform"]
+        requestClient OperationsGet'{..}
+          = go _ogName _ogXgafv _ogUploadProtocol
+              _ogAccessToken
+              _ogUploadType
+              _ogCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Operations/List.hs b/gen/Network/Google/Resource/CloudFunctions/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Operations/List.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudFunctions.Operations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding allows API services to override the binding to use
+-- different resource name schemes, such as \`users\/*\/operations\`. To
+-- override the binding, API services can add a binding such as
+-- \`\"\/v1\/{name=users\/*}\/operations\"\` to their service
+-- configuration. For backwards compatibility, the default name includes
+-- the operations collection id, however overriding users must ensure the
+-- name binding is the parent resource, without the operations collection
+-- id.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.operations.list@.
+module Network.Google.Resource.CloudFunctions.Operations.List
+    (
+    -- * REST Resource
+      OperationsListResource
+
+    -- * Creating a Request
+    , operationsList
+    , OperationsList
+
+    -- * Request Lenses
+    , olXgafv
+    , olUploadProtocol
+    , olAccessToken
+    , olUploadType
+    , olName
+    , olFilter
+    , olPageToken
+    , olPageSize
+    , olCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.operations.list@ method which the
+-- 'OperationsList' request conforms to.
+type OperationsListResource =
+     "v1" :>
+       "operations" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "name" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListOperationsResponse
+
+-- | Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding allows API services to override the binding to use
+-- different resource name schemes, such as \`users\/*\/operations\`. To
+-- override the binding, API services can add a binding such as
+-- \`\"\/v1\/{name=users\/*}\/operations\"\` to their service
+-- configuration. For backwards compatibility, the default name includes
+-- the operations collection id, however overriding users must ensure the
+-- name binding is the parent resource, without the operations collection
+-- id.
+--
+-- /See:/ 'operationsList' smart constructor.
+data OperationsList = OperationsList'
+    { _olXgafv          :: !(Maybe Xgafv)
+    , _olUploadProtocol :: !(Maybe Text)
+    , _olAccessToken    :: !(Maybe Text)
+    , _olUploadType     :: !(Maybe Text)
+    , _olName           :: !(Maybe Text)
+    , _olFilter         :: !(Maybe Text)
+    , _olPageToken      :: !(Maybe Text)
+    , _olPageSize       :: !(Maybe (Textual Int32))
+    , _olCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'olXgafv'
+--
+-- * 'olUploadProtocol'
+--
+-- * 'olAccessToken'
+--
+-- * 'olUploadType'
+--
+-- * 'olName'
+--
+-- * 'olFilter'
+--
+-- * 'olPageToken'
+--
+-- * 'olPageSize'
+--
+-- * 'olCallback'
+operationsList
+    :: OperationsList
+operationsList =
+    OperationsList'
+    { _olXgafv = Nothing
+    , _olUploadProtocol = Nothing
+    , _olAccessToken = Nothing
+    , _olUploadType = Nothing
+    , _olName = Nothing
+    , _olFilter = Nothing
+    , _olPageToken = Nothing
+    , _olPageSize = Nothing
+    , _olCallback = Nothing
+    }
+
+-- | V1 error format.
+olXgafv :: Lens' OperationsList (Maybe Xgafv)
+olXgafv = lens _olXgafv (\ s a -> s{_olXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+olUploadProtocol :: Lens' OperationsList (Maybe Text)
+olUploadProtocol
+  = lens _olUploadProtocol
+      (\ s a -> s{_olUploadProtocol = a})
+
+-- | OAuth access token.
+olAccessToken :: Lens' OperationsList (Maybe Text)
+olAccessToken
+  = lens _olAccessToken
+      (\ s a -> s{_olAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+olUploadType :: Lens' OperationsList (Maybe Text)
+olUploadType
+  = lens _olUploadType (\ s a -> s{_olUploadType = a})
+
+-- | Must not be set.
+olName :: Lens' OperationsList (Maybe Text)
+olName = lens _olName (\ s a -> s{_olName = a})
+
+-- | Required. A filter for matching the requested operations.
+-- The supported formats of __filter__ are:
+-- To query for specific function: 'project:*,location:*,function:*'
+-- To query for all of the latest operations for a project:
+-- 'project:*,latest:true'
+olFilter :: Lens' OperationsList (Maybe Text)
+olFilter = lens _olFilter (\ s a -> s{_olFilter = a})
+
+-- | The standard list page token.
+olPageToken :: Lens' OperationsList (Maybe Text)
+olPageToken
+  = lens _olPageToken (\ s a -> s{_olPageToken = a})
+
+-- | The standard list page size.
+olPageSize :: Lens' OperationsList (Maybe Int32)
+olPageSize
+  = lens _olPageSize (\ s a -> s{_olPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+olCallback :: Lens' OperationsList (Maybe Text)
+olCallback
+  = lens _olCallback (\ s a -> s{_olCallback = a})
+
+instance GoogleRequest OperationsList where
+        type Rs OperationsList = ListOperationsResponse
+        type Scopes OperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsList'{..}
+          = go _olXgafv _olUploadProtocol _olAccessToken
+              _olUploadType
+              _olName
+              _olFilter
+              _olPageToken
+              _olPageSize
+              _olCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Call.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Call.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Call.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.CloudFunctions.Projects.Locations.Functions.Call
+-- 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)
+--
+-- Synchronously invokes a deployed Cloud Function. To be used for testing
+-- purposes as very limited traffic is allowed. For more information on the
+-- actual limits refer to [API Calls](
+-- https:\/\/cloud.google.com\/functions\/quotas#rate_limits).
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.call@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Call
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsCallResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsCall
+    , ProjectsLocationsFunctionsCall
+
+    -- * Request Lenses
+    , pXgafv
+    , pUploadProtocol
+    , pAccessToken
+    , pUploadType
+    , pPayload
+    , pName
+    , pCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.call@ method which the
+-- 'ProjectsLocationsFunctionsCall' request conforms to.
+type ProjectsLocationsFunctionsCallResource =
+     "v1" :>
+       CaptureMode "name" "call" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] CallFunctionRequest :>
+                       Post '[JSON] CallFunctionResponse
+
+-- | Synchronously invokes a deployed Cloud Function. To be used for testing
+-- purposes as very limited traffic is allowed. For more information on the
+-- actual limits refer to [API Calls](
+-- https:\/\/cloud.google.com\/functions\/quotas#rate_limits).
+--
+-- /See:/ 'projectsLocationsFunctionsCall' smart constructor.
+data ProjectsLocationsFunctionsCall = ProjectsLocationsFunctionsCall'
+    { _pXgafv          :: !(Maybe Xgafv)
+    , _pUploadProtocol :: !(Maybe Text)
+    , _pAccessToken    :: !(Maybe Text)
+    , _pUploadType     :: !(Maybe Text)
+    , _pPayload        :: !CallFunctionRequest
+    , _pName           :: !Text
+    , _pCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsCall' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pXgafv'
+--
+-- * 'pUploadProtocol'
+--
+-- * 'pAccessToken'
+--
+-- * 'pUploadType'
+--
+-- * 'pPayload'
+--
+-- * 'pName'
+--
+-- * 'pCallback'
+projectsLocationsFunctionsCall
+    :: CallFunctionRequest -- ^ 'pPayload'
+    -> Text -- ^ 'pName'
+    -> ProjectsLocationsFunctionsCall
+projectsLocationsFunctionsCall pPPayload_ pPName_ =
+    ProjectsLocationsFunctionsCall'
+    { _pXgafv = Nothing
+    , _pUploadProtocol = Nothing
+    , _pAccessToken = Nothing
+    , _pUploadType = Nothing
+    , _pPayload = pPPayload_
+    , _pName = pPName_
+    , _pCallback = Nothing
+    }
+
+-- | V1 error format.
+pXgafv :: Lens' ProjectsLocationsFunctionsCall (Maybe Xgafv)
+pXgafv = lens _pXgafv (\ s a -> s{_pXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pUploadProtocol :: Lens' ProjectsLocationsFunctionsCall (Maybe Text)
+pUploadProtocol
+  = lens _pUploadProtocol
+      (\ s a -> s{_pUploadProtocol = a})
+
+-- | OAuth access token.
+pAccessToken :: Lens' ProjectsLocationsFunctionsCall (Maybe Text)
+pAccessToken
+  = lens _pAccessToken (\ s a -> s{_pAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pUploadType :: Lens' ProjectsLocationsFunctionsCall (Maybe Text)
+pUploadType
+  = lens _pUploadType (\ s a -> s{_pUploadType = a})
+
+-- | Multipart request metadata.
+pPayload :: Lens' ProjectsLocationsFunctionsCall CallFunctionRequest
+pPayload = lens _pPayload (\ s a -> s{_pPayload = a})
+
+-- | The name of the function to be called.
+pName :: Lens' ProjectsLocationsFunctionsCall Text
+pName = lens _pName (\ s a -> s{_pName = a})
+
+-- | JSONP
+pCallback :: Lens' ProjectsLocationsFunctionsCall (Maybe Text)
+pCallback
+  = lens _pCallback (\ s a -> s{_pCallback = a})
+
+instance GoogleRequest ProjectsLocationsFunctionsCall
+         where
+        type Rs ProjectsLocationsFunctionsCall =
+             CallFunctionResponse
+        type Scopes ProjectsLocationsFunctionsCall =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsFunctionsCall'{..}
+          = go _pName _pXgafv _pUploadProtocol _pAccessToken
+              _pUploadType
+              _pCallback
+              (Just AltJSON)
+              _pPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsCallResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Create.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Create.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.CloudFunctions.Projects.Locations.Functions.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 new function. If a function with the given name already exists
+-- in the specified project, the long running operation will return
+-- \`ALREADY_EXISTS\` error.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.create@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Create
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsCreateResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsCreate
+    , ProjectsLocationsFunctionsCreate
+
+    -- * Request Lenses
+    , plfcXgafv
+    , plfcUploadProtocol
+    , plfcLocation
+    , plfcAccessToken
+    , plfcUploadType
+    , plfcPayload
+    , plfcCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.create@ method which the
+-- 'ProjectsLocationsFunctionsCreate' request conforms to.
+type ProjectsLocationsFunctionsCreateResource =
+     "v1" :>
+       Capture "location" Text :>
+         "functions" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CloudFunction :>
+                         Post '[JSON] Operation
+
+-- | Creates a new function. If a function with the given name already exists
+-- in the specified project, the long running operation will return
+-- \`ALREADY_EXISTS\` error.
+--
+-- /See:/ 'projectsLocationsFunctionsCreate' smart constructor.
+data ProjectsLocationsFunctionsCreate = ProjectsLocationsFunctionsCreate'
+    { _plfcXgafv          :: !(Maybe Xgafv)
+    , _plfcUploadProtocol :: !(Maybe Text)
+    , _plfcLocation       :: !Text
+    , _plfcAccessToken    :: !(Maybe Text)
+    , _plfcUploadType     :: !(Maybe Text)
+    , _plfcPayload        :: !CloudFunction
+    , _plfcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfcXgafv'
+--
+-- * 'plfcUploadProtocol'
+--
+-- * 'plfcLocation'
+--
+-- * 'plfcAccessToken'
+--
+-- * 'plfcUploadType'
+--
+-- * 'plfcPayload'
+--
+-- * 'plfcCallback'
+projectsLocationsFunctionsCreate
+    :: Text -- ^ 'plfcLocation'
+    -> CloudFunction -- ^ 'plfcPayload'
+    -> ProjectsLocationsFunctionsCreate
+projectsLocationsFunctionsCreate pPlfcLocation_ pPlfcPayload_ =
+    ProjectsLocationsFunctionsCreate'
+    { _plfcXgafv = Nothing
+    , _plfcUploadProtocol = Nothing
+    , _plfcLocation = pPlfcLocation_
+    , _plfcAccessToken = Nothing
+    , _plfcUploadType = Nothing
+    , _plfcPayload = pPlfcPayload_
+    , _plfcCallback = Nothing
+    }
+
+-- | V1 error format.
+plfcXgafv :: Lens' ProjectsLocationsFunctionsCreate (Maybe Xgafv)
+plfcXgafv
+  = lens _plfcXgafv (\ s a -> s{_plfcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfcUploadProtocol :: Lens' ProjectsLocationsFunctionsCreate (Maybe Text)
+plfcUploadProtocol
+  = lens _plfcUploadProtocol
+      (\ s a -> s{_plfcUploadProtocol = a})
+
+-- | The project and location in which the function should be created,
+-- specified in the format \`projects\/*\/locations\/*\`
+plfcLocation :: Lens' ProjectsLocationsFunctionsCreate Text
+plfcLocation
+  = lens _plfcLocation (\ s a -> s{_plfcLocation = a})
+
+-- | OAuth access token.
+plfcAccessToken :: Lens' ProjectsLocationsFunctionsCreate (Maybe Text)
+plfcAccessToken
+  = lens _plfcAccessToken
+      (\ s a -> s{_plfcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfcUploadType :: Lens' ProjectsLocationsFunctionsCreate (Maybe Text)
+plfcUploadType
+  = lens _plfcUploadType
+      (\ s a -> s{_plfcUploadType = a})
+
+-- | Multipart request metadata.
+plfcPayload :: Lens' ProjectsLocationsFunctionsCreate CloudFunction
+plfcPayload
+  = lens _plfcPayload (\ s a -> s{_plfcPayload = a})
+
+-- | JSONP
+plfcCallback :: Lens' ProjectsLocationsFunctionsCreate (Maybe Text)
+plfcCallback
+  = lens _plfcCallback (\ s a -> s{_plfcCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsCreate where
+        type Rs ProjectsLocationsFunctionsCreate = Operation
+        type Scopes ProjectsLocationsFunctionsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsFunctionsCreate'{..}
+          = go _plfcLocation _plfcXgafv _plfcUploadProtocol
+              _plfcAccessToken
+              _plfcUploadType
+              _plfcCallback
+              (Just AltJSON)
+              _plfcPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Delete.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Delete.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.CloudFunctions.Projects.Locations.Functions.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 function with the given name from the specified project. If
+-- the given function is used by some trigger, the trigger will be updated
+-- to remove this function.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.delete@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Delete
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsDeleteResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsDelete
+    , ProjectsLocationsFunctionsDelete
+
+    -- * Request Lenses
+    , plfdXgafv
+    , plfdUploadProtocol
+    , plfdAccessToken
+    , plfdUploadType
+    , plfdName
+    , plfdCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.delete@ method which the
+-- 'ProjectsLocationsFunctionsDelete' request conforms to.
+type ProjectsLocationsFunctionsDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Operation
+
+-- | Deletes a function with the given name from the specified project. If
+-- the given function is used by some trigger, the trigger will be updated
+-- to remove this function.
+--
+-- /See:/ 'projectsLocationsFunctionsDelete' smart constructor.
+data ProjectsLocationsFunctionsDelete = ProjectsLocationsFunctionsDelete'
+    { _plfdXgafv          :: !(Maybe Xgafv)
+    , _plfdUploadProtocol :: !(Maybe Text)
+    , _plfdAccessToken    :: !(Maybe Text)
+    , _plfdUploadType     :: !(Maybe Text)
+    , _plfdName           :: !Text
+    , _plfdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfdXgafv'
+--
+-- * 'plfdUploadProtocol'
+--
+-- * 'plfdAccessToken'
+--
+-- * 'plfdUploadType'
+--
+-- * 'plfdName'
+--
+-- * 'plfdCallback'
+projectsLocationsFunctionsDelete
+    :: Text -- ^ 'plfdName'
+    -> ProjectsLocationsFunctionsDelete
+projectsLocationsFunctionsDelete pPlfdName_ =
+    ProjectsLocationsFunctionsDelete'
+    { _plfdXgafv = Nothing
+    , _plfdUploadProtocol = Nothing
+    , _plfdAccessToken = Nothing
+    , _plfdUploadType = Nothing
+    , _plfdName = pPlfdName_
+    , _plfdCallback = Nothing
+    }
+
+-- | V1 error format.
+plfdXgafv :: Lens' ProjectsLocationsFunctionsDelete (Maybe Xgafv)
+plfdXgafv
+  = lens _plfdXgafv (\ s a -> s{_plfdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfdUploadProtocol :: Lens' ProjectsLocationsFunctionsDelete (Maybe Text)
+plfdUploadProtocol
+  = lens _plfdUploadProtocol
+      (\ s a -> s{_plfdUploadProtocol = a})
+
+-- | OAuth access token.
+plfdAccessToken :: Lens' ProjectsLocationsFunctionsDelete (Maybe Text)
+plfdAccessToken
+  = lens _plfdAccessToken
+      (\ s a -> s{_plfdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfdUploadType :: Lens' ProjectsLocationsFunctionsDelete (Maybe Text)
+plfdUploadType
+  = lens _plfdUploadType
+      (\ s a -> s{_plfdUploadType = a})
+
+-- | The name of the function which should be deleted.
+plfdName :: Lens' ProjectsLocationsFunctionsDelete Text
+plfdName = lens _plfdName (\ s a -> s{_plfdName = a})
+
+-- | JSONP
+plfdCallback :: Lens' ProjectsLocationsFunctionsDelete (Maybe Text)
+plfdCallback
+  = lens _plfdCallback (\ s a -> s{_plfdCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsDelete where
+        type Rs ProjectsLocationsFunctionsDelete = Operation
+        type Scopes ProjectsLocationsFunctionsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsFunctionsDelete'{..}
+          = go _plfdName _plfdXgafv _plfdUploadProtocol
+              _plfdAccessToken
+              _plfdUploadType
+              _plfdCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GenerateDownloadURL.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GenerateDownloadURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GenerateDownloadURL.hs
@@ -0,0 +1,176 @@
+{-# 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.CloudFunctions.Projects.Locations.Functions.GenerateDownloadURL
+-- 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 a signed URL for downloading deployed function source code. The
+-- URL is only valid for a limited period and should be used within minutes
+-- after generation. For more information about the signed URL usage see:
+-- https:\/\/cloud.google.com\/storage\/docs\/access-control\/signed-urls
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.generateDownloadUrl@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateDownloadURL
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsGenerateDownloadURLResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsGenerateDownloadURL
+    , ProjectsLocationsFunctionsGenerateDownloadURL
+
+    -- * Request Lenses
+    , plfgduXgafv
+    , plfgduUploadProtocol
+    , plfgduAccessToken
+    , plfgduUploadType
+    , plfgduPayload
+    , plfgduName
+    , plfgduCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.generateDownloadUrl@ method which the
+-- 'ProjectsLocationsFunctionsGenerateDownloadURL' request conforms to.
+type ProjectsLocationsFunctionsGenerateDownloadURLResource
+     =
+     "v1" :>
+       CaptureMode "name" "generateDownloadUrl" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] GenerateDownloadURLRequest :>
+                       Post '[JSON] GenerateDownloadURLResponse
+
+-- | Returns a signed URL for downloading deployed function source code. The
+-- URL is only valid for a limited period and should be used within minutes
+-- after generation. For more information about the signed URL usage see:
+-- https:\/\/cloud.google.com\/storage\/docs\/access-control\/signed-urls
+--
+-- /See:/ 'projectsLocationsFunctionsGenerateDownloadURL' smart constructor.
+data ProjectsLocationsFunctionsGenerateDownloadURL = ProjectsLocationsFunctionsGenerateDownloadURL'
+    { _plfgduXgafv          :: !(Maybe Xgafv)
+    , _plfgduUploadProtocol :: !(Maybe Text)
+    , _plfgduAccessToken    :: !(Maybe Text)
+    , _plfgduUploadType     :: !(Maybe Text)
+    , _plfgduPayload        :: !GenerateDownloadURLRequest
+    , _plfgduName           :: !Text
+    , _plfgduCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsGenerateDownloadURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfgduXgafv'
+--
+-- * 'plfgduUploadProtocol'
+--
+-- * 'plfgduAccessToken'
+--
+-- * 'plfgduUploadType'
+--
+-- * 'plfgduPayload'
+--
+-- * 'plfgduName'
+--
+-- * 'plfgduCallback'
+projectsLocationsFunctionsGenerateDownloadURL
+    :: GenerateDownloadURLRequest -- ^ 'plfgduPayload'
+    -> Text -- ^ 'plfgduName'
+    -> ProjectsLocationsFunctionsGenerateDownloadURL
+projectsLocationsFunctionsGenerateDownloadURL pPlfgduPayload_ pPlfgduName_ =
+    ProjectsLocationsFunctionsGenerateDownloadURL'
+    { _plfgduXgafv = Nothing
+    , _plfgduUploadProtocol = Nothing
+    , _plfgduAccessToken = Nothing
+    , _plfgduUploadType = Nothing
+    , _plfgduPayload = pPlfgduPayload_
+    , _plfgduName = pPlfgduName_
+    , _plfgduCallback = Nothing
+    }
+
+-- | V1 error format.
+plfgduXgafv :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL (Maybe Xgafv)
+plfgduXgafv
+  = lens _plfgduXgafv (\ s a -> s{_plfgduXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfgduUploadProtocol :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL (Maybe Text)
+plfgduUploadProtocol
+  = lens _plfgduUploadProtocol
+      (\ s a -> s{_plfgduUploadProtocol = a})
+
+-- | OAuth access token.
+plfgduAccessToken :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL (Maybe Text)
+plfgduAccessToken
+  = lens _plfgduAccessToken
+      (\ s a -> s{_plfgduAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfgduUploadType :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL (Maybe Text)
+plfgduUploadType
+  = lens _plfgduUploadType
+      (\ s a -> s{_plfgduUploadType = a})
+
+-- | Multipart request metadata.
+plfgduPayload :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL GenerateDownloadURLRequest
+plfgduPayload
+  = lens _plfgduPayload
+      (\ s a -> s{_plfgduPayload = a})
+
+-- | The name of function for which source code Google Cloud Storage signed
+-- URL should be generated.
+plfgduName :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL Text
+plfgduName
+  = lens _plfgduName (\ s a -> s{_plfgduName = a})
+
+-- | JSONP
+plfgduCallback :: Lens' ProjectsLocationsFunctionsGenerateDownloadURL (Maybe Text)
+plfgduCallback
+  = lens _plfgduCallback
+      (\ s a -> s{_plfgduCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsGenerateDownloadURL where
+        type Rs ProjectsLocationsFunctionsGenerateDownloadURL
+             = GenerateDownloadURLResponse
+        type Scopes
+               ProjectsLocationsFunctionsGenerateDownloadURL
+             = '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient
+          ProjectsLocationsFunctionsGenerateDownloadURL'{..}
+          = go _plfgduName _plfgduXgafv _plfgduUploadProtocol
+              _plfgduAccessToken
+              _plfgduUploadType
+              _plfgduCallback
+              (Just AltJSON)
+              _plfgduPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsLocationsFunctionsGenerateDownloadURLResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GenerateUploadURL.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GenerateUploadURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GenerateUploadURL.hs
@@ -0,0 +1,192 @@
+{-# 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.CloudFunctions.Projects.Locations.Functions.GenerateUploadURL
+-- 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 a signed URL for uploading a function source code. For more
+-- information about the signed URL usage see:
+-- https:\/\/cloud.google.com\/storage\/docs\/access-control\/signed-urls.
+-- Once the function source code upload is complete, the used signed URL
+-- should be provided in CreateFunction or UpdateFunction request as a
+-- reference to the function source code. When uploading source code to the
+-- generated signed URL, please follow these restrictions: * Source file
+-- type should be a zip file. * Source file size should not exceed 100MB
+-- limit. When making a HTTP PUT request, these two headers need to be
+-- specified: * \`content-type: application\/zip\` *
+-- \`x-goog-content-length-range: 0,104857600\`
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.generateUploadUrl@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateUploadURL
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsGenerateUploadURLResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsGenerateUploadURL
+    , ProjectsLocationsFunctionsGenerateUploadURL
+
+    -- * Request Lenses
+    , plfguuParent
+    , plfguuXgafv
+    , plfguuUploadProtocol
+    , plfguuAccessToken
+    , plfguuUploadType
+    , plfguuPayload
+    , plfguuCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.generateUploadUrl@ method which the
+-- 'ProjectsLocationsFunctionsGenerateUploadURL' request conforms to.
+type ProjectsLocationsFunctionsGenerateUploadURLResource
+     =
+     "v1" :>
+       Capture "parent" Text :>
+         "functions:generateUploadUrl" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] GenerateUploadURLRequest :>
+                         Post '[JSON] GenerateUploadURLResponse
+
+-- | Returns a signed URL for uploading a function source code. For more
+-- information about the signed URL usage see:
+-- https:\/\/cloud.google.com\/storage\/docs\/access-control\/signed-urls.
+-- Once the function source code upload is complete, the used signed URL
+-- should be provided in CreateFunction or UpdateFunction request as a
+-- reference to the function source code. When uploading source code to the
+-- generated signed URL, please follow these restrictions: * Source file
+-- type should be a zip file. * Source file size should not exceed 100MB
+-- limit. When making a HTTP PUT request, these two headers need to be
+-- specified: * \`content-type: application\/zip\` *
+-- \`x-goog-content-length-range: 0,104857600\`
+--
+-- /See:/ 'projectsLocationsFunctionsGenerateUploadURL' smart constructor.
+data ProjectsLocationsFunctionsGenerateUploadURL = ProjectsLocationsFunctionsGenerateUploadURL'
+    { _plfguuParent         :: !Text
+    , _plfguuXgafv          :: !(Maybe Xgafv)
+    , _plfguuUploadProtocol :: !(Maybe Text)
+    , _plfguuAccessToken    :: !(Maybe Text)
+    , _plfguuUploadType     :: !(Maybe Text)
+    , _plfguuPayload        :: !GenerateUploadURLRequest
+    , _plfguuCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsGenerateUploadURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfguuParent'
+--
+-- * 'plfguuXgafv'
+--
+-- * 'plfguuUploadProtocol'
+--
+-- * 'plfguuAccessToken'
+--
+-- * 'plfguuUploadType'
+--
+-- * 'plfguuPayload'
+--
+-- * 'plfguuCallback'
+projectsLocationsFunctionsGenerateUploadURL
+    :: Text -- ^ 'plfguuParent'
+    -> GenerateUploadURLRequest -- ^ 'plfguuPayload'
+    -> ProjectsLocationsFunctionsGenerateUploadURL
+projectsLocationsFunctionsGenerateUploadURL pPlfguuParent_ pPlfguuPayload_ =
+    ProjectsLocationsFunctionsGenerateUploadURL'
+    { _plfguuParent = pPlfguuParent_
+    , _plfguuXgafv = Nothing
+    , _plfguuUploadProtocol = Nothing
+    , _plfguuAccessToken = Nothing
+    , _plfguuUploadType = Nothing
+    , _plfguuPayload = pPlfguuPayload_
+    , _plfguuCallback = Nothing
+    }
+
+-- | The project and location in which the Google Cloud Storage signed URL
+-- should be generated, specified in the format
+-- \`projects\/*\/locations\/*\`.
+plfguuParent :: Lens' ProjectsLocationsFunctionsGenerateUploadURL Text
+plfguuParent
+  = lens _plfguuParent (\ s a -> s{_plfguuParent = a})
+
+-- | V1 error format.
+plfguuXgafv :: Lens' ProjectsLocationsFunctionsGenerateUploadURL (Maybe Xgafv)
+plfguuXgafv
+  = lens _plfguuXgafv (\ s a -> s{_plfguuXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfguuUploadProtocol :: Lens' ProjectsLocationsFunctionsGenerateUploadURL (Maybe Text)
+plfguuUploadProtocol
+  = lens _plfguuUploadProtocol
+      (\ s a -> s{_plfguuUploadProtocol = a})
+
+-- | OAuth access token.
+plfguuAccessToken :: Lens' ProjectsLocationsFunctionsGenerateUploadURL (Maybe Text)
+plfguuAccessToken
+  = lens _plfguuAccessToken
+      (\ s a -> s{_plfguuAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfguuUploadType :: Lens' ProjectsLocationsFunctionsGenerateUploadURL (Maybe Text)
+plfguuUploadType
+  = lens _plfguuUploadType
+      (\ s a -> s{_plfguuUploadType = a})
+
+-- | Multipart request metadata.
+plfguuPayload :: Lens' ProjectsLocationsFunctionsGenerateUploadURL GenerateUploadURLRequest
+plfguuPayload
+  = lens _plfguuPayload
+      (\ s a -> s{_plfguuPayload = a})
+
+-- | JSONP
+plfguuCallback :: Lens' ProjectsLocationsFunctionsGenerateUploadURL (Maybe Text)
+plfguuCallback
+  = lens _plfguuCallback
+      (\ s a -> s{_plfguuCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsGenerateUploadURL where
+        type Rs ProjectsLocationsFunctionsGenerateUploadURL =
+             GenerateUploadURLResponse
+        type Scopes
+               ProjectsLocationsFunctionsGenerateUploadURL
+             = '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient
+          ProjectsLocationsFunctionsGenerateUploadURL'{..}
+          = go _plfguuParent _plfguuXgafv _plfguuUploadProtocol
+              _plfguuAccessToken
+              _plfguuUploadType
+              _plfguuCallback
+              (Just AltJSON)
+              _plfguuPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsLocationsFunctionsGenerateUploadURLResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Get.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Get.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.CloudFunctions.Projects.Locations.Functions.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)
+--
+-- Returns a function with the given name from the requested project.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.get@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Get
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsGetResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsGet
+    , ProjectsLocationsFunctionsGet
+
+    -- * Request Lenses
+    , plfgXgafv
+    , plfgUploadProtocol
+    , plfgAccessToken
+    , plfgUploadType
+    , plfgName
+    , plfgCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.get@ method which the
+-- 'ProjectsLocationsFunctionsGet' request conforms to.
+type ProjectsLocationsFunctionsGetResource =
+     "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] CloudFunction
+
+-- | Returns a function with the given name from the requested project.
+--
+-- /See:/ 'projectsLocationsFunctionsGet' smart constructor.
+data ProjectsLocationsFunctionsGet = ProjectsLocationsFunctionsGet'
+    { _plfgXgafv          :: !(Maybe Xgafv)
+    , _plfgUploadProtocol :: !(Maybe Text)
+    , _plfgAccessToken    :: !(Maybe Text)
+    , _plfgUploadType     :: !(Maybe Text)
+    , _plfgName           :: !Text
+    , _plfgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfgXgafv'
+--
+-- * 'plfgUploadProtocol'
+--
+-- * 'plfgAccessToken'
+--
+-- * 'plfgUploadType'
+--
+-- * 'plfgName'
+--
+-- * 'plfgCallback'
+projectsLocationsFunctionsGet
+    :: Text -- ^ 'plfgName'
+    -> ProjectsLocationsFunctionsGet
+projectsLocationsFunctionsGet pPlfgName_ =
+    ProjectsLocationsFunctionsGet'
+    { _plfgXgafv = Nothing
+    , _plfgUploadProtocol = Nothing
+    , _plfgAccessToken = Nothing
+    , _plfgUploadType = Nothing
+    , _plfgName = pPlfgName_
+    , _plfgCallback = Nothing
+    }
+
+-- | V1 error format.
+plfgXgafv :: Lens' ProjectsLocationsFunctionsGet (Maybe Xgafv)
+plfgXgafv
+  = lens _plfgXgafv (\ s a -> s{_plfgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfgUploadProtocol :: Lens' ProjectsLocationsFunctionsGet (Maybe Text)
+plfgUploadProtocol
+  = lens _plfgUploadProtocol
+      (\ s a -> s{_plfgUploadProtocol = a})
+
+-- | OAuth access token.
+plfgAccessToken :: Lens' ProjectsLocationsFunctionsGet (Maybe Text)
+plfgAccessToken
+  = lens _plfgAccessToken
+      (\ s a -> s{_plfgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfgUploadType :: Lens' ProjectsLocationsFunctionsGet (Maybe Text)
+plfgUploadType
+  = lens _plfgUploadType
+      (\ s a -> s{_plfgUploadType = a})
+
+-- | The name of the function which details should be obtained.
+plfgName :: Lens' ProjectsLocationsFunctionsGet Text
+plfgName = lens _plfgName (\ s a -> s{_plfgName = a})
+
+-- | JSONP
+plfgCallback :: Lens' ProjectsLocationsFunctionsGet (Maybe Text)
+plfgCallback
+  = lens _plfgCallback (\ s a -> s{_plfgCallback = a})
+
+instance GoogleRequest ProjectsLocationsFunctionsGet
+         where
+        type Rs ProjectsLocationsFunctionsGet = CloudFunction
+        type Scopes ProjectsLocationsFunctionsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsFunctionsGet'{..}
+          = go _plfgName _plfgXgafv _plfgUploadProtocol
+              _plfgAccessToken
+              _plfgUploadType
+              _plfgCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GetIAMPolicy.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GetIAMPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/GetIAMPolicy.hs
@@ -0,0 +1,156 @@
+{-# 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.CloudFunctions.Projects.Locations.Functions.GetIAMPolicy
+-- 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 access control policy for a resource. Returns an empty policy
+-- if the resource exists and does not have a policy set.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.getIamPolicy@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GetIAMPolicy
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsGetIAMPolicyResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsGetIAMPolicy
+    , ProjectsLocationsFunctionsGetIAMPolicy
+
+    -- * Request Lenses
+    , plfgipXgafv
+    , plfgipUploadProtocol
+    , plfgipAccessToken
+    , plfgipUploadType
+    , plfgipResource
+    , plfgipCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.getIamPolicy@ method which the
+-- 'ProjectsLocationsFunctionsGetIAMPolicy' request conforms to.
+type ProjectsLocationsFunctionsGetIAMPolicyResource =
+     "v1" :>
+       CaptureMode "resource" "getIamPolicy" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Policy
+
+-- | Gets the access control policy for a resource. Returns an empty policy
+-- if the resource exists and does not have a policy set.
+--
+-- /See:/ 'projectsLocationsFunctionsGetIAMPolicy' smart constructor.
+data ProjectsLocationsFunctionsGetIAMPolicy = ProjectsLocationsFunctionsGetIAMPolicy'
+    { _plfgipXgafv          :: !(Maybe Xgafv)
+    , _plfgipUploadProtocol :: !(Maybe Text)
+    , _plfgipAccessToken    :: !(Maybe Text)
+    , _plfgipUploadType     :: !(Maybe Text)
+    , _plfgipResource       :: !Text
+    , _plfgipCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsGetIAMPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfgipXgafv'
+--
+-- * 'plfgipUploadProtocol'
+--
+-- * 'plfgipAccessToken'
+--
+-- * 'plfgipUploadType'
+--
+-- * 'plfgipResource'
+--
+-- * 'plfgipCallback'
+projectsLocationsFunctionsGetIAMPolicy
+    :: Text -- ^ 'plfgipResource'
+    -> ProjectsLocationsFunctionsGetIAMPolicy
+projectsLocationsFunctionsGetIAMPolicy pPlfgipResource_ =
+    ProjectsLocationsFunctionsGetIAMPolicy'
+    { _plfgipXgafv = Nothing
+    , _plfgipUploadProtocol = Nothing
+    , _plfgipAccessToken = Nothing
+    , _plfgipUploadType = Nothing
+    , _plfgipResource = pPlfgipResource_
+    , _plfgipCallback = Nothing
+    }
+
+-- | V1 error format.
+plfgipXgafv :: Lens' ProjectsLocationsFunctionsGetIAMPolicy (Maybe Xgafv)
+plfgipXgafv
+  = lens _plfgipXgafv (\ s a -> s{_plfgipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfgipUploadProtocol :: Lens' ProjectsLocationsFunctionsGetIAMPolicy (Maybe Text)
+plfgipUploadProtocol
+  = lens _plfgipUploadProtocol
+      (\ s a -> s{_plfgipUploadProtocol = a})
+
+-- | OAuth access token.
+plfgipAccessToken :: Lens' ProjectsLocationsFunctionsGetIAMPolicy (Maybe Text)
+plfgipAccessToken
+  = lens _plfgipAccessToken
+      (\ s a -> s{_plfgipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfgipUploadType :: Lens' ProjectsLocationsFunctionsGetIAMPolicy (Maybe Text)
+plfgipUploadType
+  = lens _plfgipUploadType
+      (\ s a -> s{_plfgipUploadType = a})
+
+-- | REQUIRED: The resource for which the policy is being requested. See the
+-- operation documentation for the appropriate value for this field.
+plfgipResource :: Lens' ProjectsLocationsFunctionsGetIAMPolicy Text
+plfgipResource
+  = lens _plfgipResource
+      (\ s a -> s{_plfgipResource = a})
+
+-- | JSONP
+plfgipCallback :: Lens' ProjectsLocationsFunctionsGetIAMPolicy (Maybe Text)
+plfgipCallback
+  = lens _plfgipCallback
+      (\ s a -> s{_plfgipCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsGetIAMPolicy where
+        type Rs ProjectsLocationsFunctionsGetIAMPolicy =
+             Policy
+        type Scopes ProjectsLocationsFunctionsGetIAMPolicy =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient
+          ProjectsLocationsFunctionsGetIAMPolicy'{..}
+          = go _plfgipResource _plfgipXgafv
+              _plfgipUploadProtocol
+              _plfgipAccessToken
+              _plfgipUploadType
+              _plfgipCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsGetIAMPolicyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/List.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/List.hs
@@ -0,0 +1,181 @@
+{-# 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.CloudFunctions.Projects.Locations.Functions.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 a list of functions that belong to the requested project.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.list@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.List
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsListResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsList
+    , ProjectsLocationsFunctionsList
+
+    -- * Request Lenses
+    , plflParent
+    , plflXgafv
+    , plflUploadProtocol
+    , plflAccessToken
+    , plflUploadType
+    , plflPageToken
+    , plflPageSize
+    , plflCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.list@ method which the
+-- 'ProjectsLocationsFunctionsList' request conforms to.
+type ProjectsLocationsFunctionsListResource =
+     "v1" :>
+       Capture "parent" Text :>
+         "functions" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListFunctionsResponse
+
+-- | Returns a list of functions that belong to the requested project.
+--
+-- /See:/ 'projectsLocationsFunctionsList' smart constructor.
+data ProjectsLocationsFunctionsList = ProjectsLocationsFunctionsList'
+    { _plflParent         :: !Text
+    , _plflXgafv          :: !(Maybe Xgafv)
+    , _plflUploadProtocol :: !(Maybe Text)
+    , _plflAccessToken    :: !(Maybe Text)
+    , _plflUploadType     :: !(Maybe Text)
+    , _plflPageToken      :: !(Maybe Text)
+    , _plflPageSize       :: !(Maybe (Textual Int32))
+    , _plflCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plflParent'
+--
+-- * 'plflXgafv'
+--
+-- * 'plflUploadProtocol'
+--
+-- * 'plflAccessToken'
+--
+-- * 'plflUploadType'
+--
+-- * 'plflPageToken'
+--
+-- * 'plflPageSize'
+--
+-- * 'plflCallback'
+projectsLocationsFunctionsList
+    :: Text -- ^ 'plflParent'
+    -> ProjectsLocationsFunctionsList
+projectsLocationsFunctionsList pPlflParent_ =
+    ProjectsLocationsFunctionsList'
+    { _plflParent = pPlflParent_
+    , _plflXgafv = Nothing
+    , _plflUploadProtocol = Nothing
+    , _plflAccessToken = Nothing
+    , _plflUploadType = Nothing
+    , _plflPageToken = Nothing
+    , _plflPageSize = Nothing
+    , _plflCallback = Nothing
+    }
+
+-- | The project and location from which the function should be listed,
+-- specified in the format \`projects\/*\/locations\/*\` If you want to
+-- list functions in all locations, use \"-\" in place of a location.
+plflParent :: Lens' ProjectsLocationsFunctionsList Text
+plflParent
+  = lens _plflParent (\ s a -> s{_plflParent = a})
+
+-- | V1 error format.
+plflXgafv :: Lens' ProjectsLocationsFunctionsList (Maybe Xgafv)
+plflXgafv
+  = lens _plflXgafv (\ s a -> s{_plflXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plflUploadProtocol :: Lens' ProjectsLocationsFunctionsList (Maybe Text)
+plflUploadProtocol
+  = lens _plflUploadProtocol
+      (\ s a -> s{_plflUploadProtocol = a})
+
+-- | OAuth access token.
+plflAccessToken :: Lens' ProjectsLocationsFunctionsList (Maybe Text)
+plflAccessToken
+  = lens _plflAccessToken
+      (\ s a -> s{_plflAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plflUploadType :: Lens' ProjectsLocationsFunctionsList (Maybe Text)
+plflUploadType
+  = lens _plflUploadType
+      (\ s a -> s{_plflUploadType = a})
+
+-- | The value returned by the last \`ListFunctionsResponse\`; indicates that
+-- this is a continuation of a prior \`ListFunctions\` call, and that the
+-- system should return the next page of data.
+plflPageToken :: Lens' ProjectsLocationsFunctionsList (Maybe Text)
+plflPageToken
+  = lens _plflPageToken
+      (\ s a -> s{_plflPageToken = a})
+
+-- | Maximum number of functions to return per call.
+plflPageSize :: Lens' ProjectsLocationsFunctionsList (Maybe Int32)
+plflPageSize
+  = lens _plflPageSize (\ s a -> s{_plflPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+plflCallback :: Lens' ProjectsLocationsFunctionsList (Maybe Text)
+plflCallback
+  = lens _plflCallback (\ s a -> s{_plflCallback = a})
+
+instance GoogleRequest ProjectsLocationsFunctionsList
+         where
+        type Rs ProjectsLocationsFunctionsList =
+             ListFunctionsResponse
+        type Scopes ProjectsLocationsFunctionsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsFunctionsList'{..}
+          = go _plflParent _plflXgafv _plflUploadProtocol
+              _plflAccessToken
+              _plflUploadType
+              _plflPageToken
+              _plflPageSize
+              _plflCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Patch.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/Patch.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.CloudFunctions.Projects.Locations.Functions.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates existing function.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.patch@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Patch
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsPatchResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsPatch
+    , ProjectsLocationsFunctionsPatch
+
+    -- * Request Lenses
+    , plfpXgafv
+    , plfpUploadProtocol
+    , plfpUpdateMask
+    , plfpAccessToken
+    , plfpUploadType
+    , plfpPayload
+    , plfpName
+    , plfpCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.patch@ method which the
+-- 'ProjectsLocationsFunctionsPatch' request conforms to.
+type ProjectsLocationsFunctionsPatchResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] CloudFunction :>
+                         Patch '[JSON] Operation
+
+-- | Updates existing function.
+--
+-- /See:/ 'projectsLocationsFunctionsPatch' smart constructor.
+data ProjectsLocationsFunctionsPatch = ProjectsLocationsFunctionsPatch'
+    { _plfpXgafv          :: !(Maybe Xgafv)
+    , _plfpUploadProtocol :: !(Maybe Text)
+    , _plfpUpdateMask     :: !(Maybe GFieldMask)
+    , _plfpAccessToken    :: !(Maybe Text)
+    , _plfpUploadType     :: !(Maybe Text)
+    , _plfpPayload        :: !CloudFunction
+    , _plfpName           :: !Text
+    , _plfpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfpXgafv'
+--
+-- * 'plfpUploadProtocol'
+--
+-- * 'plfpUpdateMask'
+--
+-- * 'plfpAccessToken'
+--
+-- * 'plfpUploadType'
+--
+-- * 'plfpPayload'
+--
+-- * 'plfpName'
+--
+-- * 'plfpCallback'
+projectsLocationsFunctionsPatch
+    :: CloudFunction -- ^ 'plfpPayload'
+    -> Text -- ^ 'plfpName'
+    -> ProjectsLocationsFunctionsPatch
+projectsLocationsFunctionsPatch pPlfpPayload_ pPlfpName_ =
+    ProjectsLocationsFunctionsPatch'
+    { _plfpXgafv = Nothing
+    , _plfpUploadProtocol = Nothing
+    , _plfpUpdateMask = Nothing
+    , _plfpAccessToken = Nothing
+    , _plfpUploadType = Nothing
+    , _plfpPayload = pPlfpPayload_
+    , _plfpName = pPlfpName_
+    , _plfpCallback = Nothing
+    }
+
+-- | V1 error format.
+plfpXgafv :: Lens' ProjectsLocationsFunctionsPatch (Maybe Xgafv)
+plfpXgafv
+  = lens _plfpXgafv (\ s a -> s{_plfpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfpUploadProtocol :: Lens' ProjectsLocationsFunctionsPatch (Maybe Text)
+plfpUploadProtocol
+  = lens _plfpUploadProtocol
+      (\ s a -> s{_plfpUploadProtocol = a})
+
+-- | Required list of fields to be updated in this request.
+plfpUpdateMask :: Lens' ProjectsLocationsFunctionsPatch (Maybe GFieldMask)
+plfpUpdateMask
+  = lens _plfpUpdateMask
+      (\ s a -> s{_plfpUpdateMask = a})
+
+-- | OAuth access token.
+plfpAccessToken :: Lens' ProjectsLocationsFunctionsPatch (Maybe Text)
+plfpAccessToken
+  = lens _plfpAccessToken
+      (\ s a -> s{_plfpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfpUploadType :: Lens' ProjectsLocationsFunctionsPatch (Maybe Text)
+plfpUploadType
+  = lens _plfpUploadType
+      (\ s a -> s{_plfpUploadType = a})
+
+-- | Multipart request metadata.
+plfpPayload :: Lens' ProjectsLocationsFunctionsPatch CloudFunction
+plfpPayload
+  = lens _plfpPayload (\ s a -> s{_plfpPayload = a})
+
+-- | A user-defined name of the function. Function names must be unique
+-- globally and match pattern \`projects\/*\/locations\/*\/functions\/*\`
+plfpName :: Lens' ProjectsLocationsFunctionsPatch Text
+plfpName = lens _plfpName (\ s a -> s{_plfpName = a})
+
+-- | JSONP
+plfpCallback :: Lens' ProjectsLocationsFunctionsPatch (Maybe Text)
+plfpCallback
+  = lens _plfpCallback (\ s a -> s{_plfpCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsPatch where
+        type Rs ProjectsLocationsFunctionsPatch = Operation
+        type Scopes ProjectsLocationsFunctionsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsFunctionsPatch'{..}
+          = go _plfpName _plfpXgafv _plfpUploadProtocol
+              _plfpUpdateMask
+              _plfpAccessToken
+              _plfpUploadType
+              _plfpCallback
+              (Just AltJSON)
+              _plfpPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/SetIAMPolicy.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/SetIAMPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/SetIAMPolicy.hs
@@ -0,0 +1,171 @@
+{-# 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.CloudFunctions.Projects.Locations.Functions.SetIAMPolicy
+-- 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)
+--
+-- Sets the access control policy on the specified resource. Replaces any
+-- existing policy.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.setIamPolicy@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.SetIAMPolicy
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsSetIAMPolicyResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsSetIAMPolicy
+    , ProjectsLocationsFunctionsSetIAMPolicy
+
+    -- * Request Lenses
+    , plfsipXgafv
+    , plfsipUploadProtocol
+    , plfsipAccessToken
+    , plfsipUploadType
+    , plfsipPayload
+    , plfsipResource
+    , plfsipCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.setIamPolicy@ method which the
+-- 'ProjectsLocationsFunctionsSetIAMPolicy' request conforms to.
+type ProjectsLocationsFunctionsSetIAMPolicyResource =
+     "v1" :>
+       CaptureMode "resource" "setIamPolicy" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] SetIAMPolicyRequest :>
+                       Post '[JSON] Policy
+
+-- | Sets the access control policy on the specified resource. Replaces any
+-- existing policy.
+--
+-- /See:/ 'projectsLocationsFunctionsSetIAMPolicy' smart constructor.
+data ProjectsLocationsFunctionsSetIAMPolicy = ProjectsLocationsFunctionsSetIAMPolicy'
+    { _plfsipXgafv          :: !(Maybe Xgafv)
+    , _plfsipUploadProtocol :: !(Maybe Text)
+    , _plfsipAccessToken    :: !(Maybe Text)
+    , _plfsipUploadType     :: !(Maybe Text)
+    , _plfsipPayload        :: !SetIAMPolicyRequest
+    , _plfsipResource       :: !Text
+    , _plfsipCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsSetIAMPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plfsipXgafv'
+--
+-- * 'plfsipUploadProtocol'
+--
+-- * 'plfsipAccessToken'
+--
+-- * 'plfsipUploadType'
+--
+-- * 'plfsipPayload'
+--
+-- * 'plfsipResource'
+--
+-- * 'plfsipCallback'
+projectsLocationsFunctionsSetIAMPolicy
+    :: SetIAMPolicyRequest -- ^ 'plfsipPayload'
+    -> Text -- ^ 'plfsipResource'
+    -> ProjectsLocationsFunctionsSetIAMPolicy
+projectsLocationsFunctionsSetIAMPolicy pPlfsipPayload_ pPlfsipResource_ =
+    ProjectsLocationsFunctionsSetIAMPolicy'
+    { _plfsipXgafv = Nothing
+    , _plfsipUploadProtocol = Nothing
+    , _plfsipAccessToken = Nothing
+    , _plfsipUploadType = Nothing
+    , _plfsipPayload = pPlfsipPayload_
+    , _plfsipResource = pPlfsipResource_
+    , _plfsipCallback = Nothing
+    }
+
+-- | V1 error format.
+plfsipXgafv :: Lens' ProjectsLocationsFunctionsSetIAMPolicy (Maybe Xgafv)
+plfsipXgafv
+  = lens _plfsipXgafv (\ s a -> s{_plfsipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plfsipUploadProtocol :: Lens' ProjectsLocationsFunctionsSetIAMPolicy (Maybe Text)
+plfsipUploadProtocol
+  = lens _plfsipUploadProtocol
+      (\ s a -> s{_plfsipUploadProtocol = a})
+
+-- | OAuth access token.
+plfsipAccessToken :: Lens' ProjectsLocationsFunctionsSetIAMPolicy (Maybe Text)
+plfsipAccessToken
+  = lens _plfsipAccessToken
+      (\ s a -> s{_plfsipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plfsipUploadType :: Lens' ProjectsLocationsFunctionsSetIAMPolicy (Maybe Text)
+plfsipUploadType
+  = lens _plfsipUploadType
+      (\ s a -> s{_plfsipUploadType = a})
+
+-- | Multipart request metadata.
+plfsipPayload :: Lens' ProjectsLocationsFunctionsSetIAMPolicy SetIAMPolicyRequest
+plfsipPayload
+  = lens _plfsipPayload
+      (\ s a -> s{_plfsipPayload = a})
+
+-- | REQUIRED: The resource for which the policy is being specified. See the
+-- operation documentation for the appropriate value for this field.
+plfsipResource :: Lens' ProjectsLocationsFunctionsSetIAMPolicy Text
+plfsipResource
+  = lens _plfsipResource
+      (\ s a -> s{_plfsipResource = a})
+
+-- | JSONP
+plfsipCallback :: Lens' ProjectsLocationsFunctionsSetIAMPolicy (Maybe Text)
+plfsipCallback
+  = lens _plfsipCallback
+      (\ s a -> s{_plfsipCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsSetIAMPolicy where
+        type Rs ProjectsLocationsFunctionsSetIAMPolicy =
+             Policy
+        type Scopes ProjectsLocationsFunctionsSetIAMPolicy =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient
+          ProjectsLocationsFunctionsSetIAMPolicy'{..}
+          = go _plfsipResource _plfsipXgafv
+              _plfsipUploadProtocol
+              _plfsipAccessToken
+              _plfsipUploadType
+              _plfsipCallback
+              (Just AltJSON)
+              _plfsipPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsLocationsFunctionsSetIAMPolicyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/TestIAMPermissions.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/TestIAMPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/Functions/TestIAMPermissions.hs
@@ -0,0 +1,183 @@
+{-# 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.CloudFunctions.Projects.Locations.Functions.TestIAMPermissions
+-- 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 permissions that a caller has on the specified resource. If the
+-- resource does not exist, this will return an empty set of permissions,
+-- not a NOT_FOUND error. Note: This operation is designed to be used for
+-- building permission-aware UIs and command-line tools, not for
+-- authorization checking. This operation may \"fail open\" without
+-- warning.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.functions.testIamPermissions@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.TestIAMPermissions
+    (
+    -- * REST Resource
+      ProjectsLocationsFunctionsTestIAMPermissionsResource
+
+    -- * Creating a Request
+    , projectsLocationsFunctionsTestIAMPermissions
+    , ProjectsLocationsFunctionsTestIAMPermissions
+
+    -- * Request Lenses
+    , plftipXgafv
+    , plftipUploadProtocol
+    , plftipAccessToken
+    , plftipUploadType
+    , plftipPayload
+    , plftipResource
+    , plftipCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.functions.testIamPermissions@ method which the
+-- 'ProjectsLocationsFunctionsTestIAMPermissions' request conforms to.
+type ProjectsLocationsFunctionsTestIAMPermissionsResource
+     =
+     "v1" :>
+       CaptureMode "resource" "testIamPermissions" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] TestIAMPermissionsRequest :>
+                       Post '[JSON] TestIAMPermissionsResponse
+
+-- | Returns permissions that a caller has on the specified resource. If the
+-- resource does not exist, this will return an empty set of permissions,
+-- not a NOT_FOUND error. Note: This operation is designed to be used for
+-- building permission-aware UIs and command-line tools, not for
+-- authorization checking. This operation may \"fail open\" without
+-- warning.
+--
+-- /See:/ 'projectsLocationsFunctionsTestIAMPermissions' smart constructor.
+data ProjectsLocationsFunctionsTestIAMPermissions = ProjectsLocationsFunctionsTestIAMPermissions'
+    { _plftipXgafv          :: !(Maybe Xgafv)
+    , _plftipUploadProtocol :: !(Maybe Text)
+    , _plftipAccessToken    :: !(Maybe Text)
+    , _plftipUploadType     :: !(Maybe Text)
+    , _plftipPayload        :: !TestIAMPermissionsRequest
+    , _plftipResource       :: !Text
+    , _plftipCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsFunctionsTestIAMPermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plftipXgafv'
+--
+-- * 'plftipUploadProtocol'
+--
+-- * 'plftipAccessToken'
+--
+-- * 'plftipUploadType'
+--
+-- * 'plftipPayload'
+--
+-- * 'plftipResource'
+--
+-- * 'plftipCallback'
+projectsLocationsFunctionsTestIAMPermissions
+    :: TestIAMPermissionsRequest -- ^ 'plftipPayload'
+    -> Text -- ^ 'plftipResource'
+    -> ProjectsLocationsFunctionsTestIAMPermissions
+projectsLocationsFunctionsTestIAMPermissions pPlftipPayload_ pPlftipResource_ =
+    ProjectsLocationsFunctionsTestIAMPermissions'
+    { _plftipXgafv = Nothing
+    , _plftipUploadProtocol = Nothing
+    , _plftipAccessToken = Nothing
+    , _plftipUploadType = Nothing
+    , _plftipPayload = pPlftipPayload_
+    , _plftipResource = pPlftipResource_
+    , _plftipCallback = Nothing
+    }
+
+-- | V1 error format.
+plftipXgafv :: Lens' ProjectsLocationsFunctionsTestIAMPermissions (Maybe Xgafv)
+plftipXgafv
+  = lens _plftipXgafv (\ s a -> s{_plftipXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plftipUploadProtocol :: Lens' ProjectsLocationsFunctionsTestIAMPermissions (Maybe Text)
+plftipUploadProtocol
+  = lens _plftipUploadProtocol
+      (\ s a -> s{_plftipUploadProtocol = a})
+
+-- | OAuth access token.
+plftipAccessToken :: Lens' ProjectsLocationsFunctionsTestIAMPermissions (Maybe Text)
+plftipAccessToken
+  = lens _plftipAccessToken
+      (\ s a -> s{_plftipAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plftipUploadType :: Lens' ProjectsLocationsFunctionsTestIAMPermissions (Maybe Text)
+plftipUploadType
+  = lens _plftipUploadType
+      (\ s a -> s{_plftipUploadType = a})
+
+-- | Multipart request metadata.
+plftipPayload :: Lens' ProjectsLocationsFunctionsTestIAMPermissions TestIAMPermissionsRequest
+plftipPayload
+  = lens _plftipPayload
+      (\ s a -> s{_plftipPayload = a})
+
+-- | REQUIRED: The resource for which the policy detail is being requested.
+-- See the operation documentation for the appropriate value for this
+-- field.
+plftipResource :: Lens' ProjectsLocationsFunctionsTestIAMPermissions Text
+plftipResource
+  = lens _plftipResource
+      (\ s a -> s{_plftipResource = a})
+
+-- | JSONP
+plftipCallback :: Lens' ProjectsLocationsFunctionsTestIAMPermissions (Maybe Text)
+plftipCallback
+  = lens _plftipCallback
+      (\ s a -> s{_plftipCallback = a})
+
+instance GoogleRequest
+         ProjectsLocationsFunctionsTestIAMPermissions where
+        type Rs ProjectsLocationsFunctionsTestIAMPermissions
+             = TestIAMPermissionsResponse
+        type Scopes
+               ProjectsLocationsFunctionsTestIAMPermissions
+             = '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient
+          ProjectsLocationsFunctionsTestIAMPermissions'{..}
+          = go _plftipResource _plftipXgafv
+              _plftipUploadProtocol
+              _plftipAccessToken
+              _plftipUploadType
+              _plftipCallback
+              (Just AltJSON)
+              _plftipPayload
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           ProjectsLocationsFunctionsTestIAMPermissionsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/List.hs b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudFunctions/Projects/Locations/List.hs
@@ -0,0 +1,183 @@
+{-# 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.CloudFunctions.Projects.Locations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists information about the supported locations for this service.
+--
+-- /See:/ <https://cloud.google.com/functions Cloud Functions API Reference> for @cloudfunctions.projects.locations.list@.
+module Network.Google.Resource.CloudFunctions.Projects.Locations.List
+    (
+    -- * REST Resource
+      ProjectsLocationsListResource
+
+    -- * Creating a Request
+    , projectsLocationsList
+    , ProjectsLocationsList
+
+    -- * Request Lenses
+    , pllXgafv
+    , pllUploadProtocol
+    , pllAccessToken
+    , pllUploadType
+    , pllName
+    , pllFilter
+    , pllPageToken
+    , pllPageSize
+    , pllCallback
+    ) where
+
+import           Network.Google.CloudFunctions.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudfunctions.projects.locations.list@ method which the
+-- 'ProjectsLocationsList' request conforms to.
+type ProjectsLocationsListResource =
+     "v1" :>
+       Capture "name" Text :>
+         "locations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListLocationsResponse
+
+-- | Lists information about the supported locations for this service.
+--
+-- /See:/ 'projectsLocationsList' smart constructor.
+data ProjectsLocationsList = ProjectsLocationsList'
+    { _pllXgafv          :: !(Maybe Xgafv)
+    , _pllUploadProtocol :: !(Maybe Text)
+    , _pllAccessToken    :: !(Maybe Text)
+    , _pllUploadType     :: !(Maybe Text)
+    , _pllName           :: !Text
+    , _pllFilter         :: !(Maybe Text)
+    , _pllPageToken      :: !(Maybe Text)
+    , _pllPageSize       :: !(Maybe (Textual Int32))
+    , _pllCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pllXgafv'
+--
+-- * 'pllUploadProtocol'
+--
+-- * 'pllAccessToken'
+--
+-- * 'pllUploadType'
+--
+-- * 'pllName'
+--
+-- * 'pllFilter'
+--
+-- * 'pllPageToken'
+--
+-- * 'pllPageSize'
+--
+-- * 'pllCallback'
+projectsLocationsList
+    :: Text -- ^ 'pllName'
+    -> ProjectsLocationsList
+projectsLocationsList pPllName_ =
+    ProjectsLocationsList'
+    { _pllXgafv = Nothing
+    , _pllUploadProtocol = Nothing
+    , _pllAccessToken = Nothing
+    , _pllUploadType = Nothing
+    , _pllName = pPllName_
+    , _pllFilter = Nothing
+    , _pllPageToken = Nothing
+    , _pllPageSize = Nothing
+    , _pllCallback = Nothing
+    }
+
+-- | V1 error format.
+pllXgafv :: Lens' ProjectsLocationsList (Maybe Xgafv)
+pllXgafv = lens _pllXgafv (\ s a -> s{_pllXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pllUploadProtocol :: Lens' ProjectsLocationsList (Maybe Text)
+pllUploadProtocol
+  = lens _pllUploadProtocol
+      (\ s a -> s{_pllUploadProtocol = a})
+
+-- | OAuth access token.
+pllAccessToken :: Lens' ProjectsLocationsList (Maybe Text)
+pllAccessToken
+  = lens _pllAccessToken
+      (\ s a -> s{_pllAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pllUploadType :: Lens' ProjectsLocationsList (Maybe Text)
+pllUploadType
+  = lens _pllUploadType
+      (\ s a -> s{_pllUploadType = a})
+
+-- | The resource that owns the locations collection, if applicable.
+pllName :: Lens' ProjectsLocationsList Text
+pllName = lens _pllName (\ s a -> s{_pllName = a})
+
+-- | The standard list filter.
+pllFilter :: Lens' ProjectsLocationsList (Maybe Text)
+pllFilter
+  = lens _pllFilter (\ s a -> s{_pllFilter = a})
+
+-- | The standard list page token.
+pllPageToken :: Lens' ProjectsLocationsList (Maybe Text)
+pllPageToken
+  = lens _pllPageToken (\ s a -> s{_pllPageToken = a})
+
+-- | The standard list page size.
+pllPageSize :: Lens' ProjectsLocationsList (Maybe Int32)
+pllPageSize
+  = lens _pllPageSize (\ s a -> s{_pllPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+pllCallback :: Lens' ProjectsLocationsList (Maybe Text)
+pllCallback
+  = lens _pllCallback (\ s a -> s{_pllCallback = a})
+
+instance GoogleRequest ProjectsLocationsList where
+        type Rs ProjectsLocationsList = ListLocationsResponse
+        type Scopes ProjectsLocationsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsList'{..}
+          = go _pllName _pllXgafv _pllUploadProtocol
+              _pllAccessToken
+              _pllUploadType
+              _pllFilter
+              _pllPageToken
+              _pllPageSize
+              _pllCallback
+              (Just AltJSON)
+              cloudFunctionsService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsListResource)
+                      mempty
diff --git a/gogol-cloudfunctions.cabal b/gogol-cloudfunctions.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudfunctions.cabal
@@ -0,0 +1,60 @@
+name:                  gogol-cloudfunctions
+version:               0.4.0
+synopsis:              Google Cloud Functions 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:
+    Manages lightweight user-provided functions executed in response to
+    events.
+    .
+    /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.CloudFunctions
+        , Network.Google.CloudFunctions.Types
+        , Network.Google.Resource.CloudFunctions.Operations.Get
+        , Network.Google.Resource.CloudFunctions.Operations.List
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Call
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Create
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Delete
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateDownloadURL
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GenerateUploadURL
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Get
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.GetIAMPolicy
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.List
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.Patch
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.SetIAMPolicy
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.Functions.TestIAMPermissions
+        , Network.Google.Resource.CloudFunctions.Projects.Locations.List
+
+    other-modules:
+          Network.Google.CloudFunctions.Types.Product
+        , Network.Google.CloudFunctions.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
