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-cloudshell
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Cloud Shell.
+
+
+## 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-cloudshell` 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/CloudShell.hs b/gen/Network/Google/CloudShell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudShell.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudShell
+-- 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)
+--
+-- Allows users to start, configure, and connect to interactive shell
+-- sessions running in the cloud.
+--
+-- /See:/ <https://cloud.google.com/shell/docs/ Cloud Shell API Reference>
+module Network.Google.CloudShell
+    (
+    -- * Service Configuration
+      cloudShellService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * API Declaration
+    , CloudShellAPI
+
+    -- * Resources
+
+    -- ** cloudshell.operations.cancel
+    , module Network.Google.Resource.CloudShell.Operations.Cancel
+
+    -- ** cloudshell.operations.delete
+    , module Network.Google.Resource.CloudShell.Operations.Delete
+
+    -- ** cloudshell.operations.get
+    , module Network.Google.Resource.CloudShell.Operations.Get
+
+    -- ** cloudshell.operations.list
+    , module Network.Google.Resource.CloudShell.Operations.List
+
+    -- * Types
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- ** CancelOperationRequest
+    , CancelOperationRequest
+    , cancelOperationRequest
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** Environment
+    , Environment
+    , environment
+    , eState
+    , ePublicKeys
+    , eSSHUsername
+    , eName
+    , eId
+    , eSSHHost
+    , eDockerImage
+    , eSSHPort
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** PublicKey
+    , PublicKey
+    , publicKey
+    , pkFormat
+    , pkKey
+    , pkName
+
+    -- ** StartEnvironmentMetadataState
+    , StartEnvironmentMetadataState (..)
+
+    -- ** EnvironmentState
+    , EnvironmentState (..)
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** PublicKeyFormat
+    , PublicKeyFormat (..)
+
+    -- ** StartEnvironmentMetadata
+    , StartEnvironmentMetadata
+    , startEnvironmentMetadata
+    , semState
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- ** StartEnvironmentResponse
+    , StartEnvironmentResponse
+    , startEnvironmentResponse
+    , serEnvironment
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+    ) where
+
+import           Network.Google.CloudShell.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudShell.Operations.Cancel
+import           Network.Google.Resource.CloudShell.Operations.Delete
+import           Network.Google.Resource.CloudShell.Operations.Get
+import           Network.Google.Resource.CloudShell.Operations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Shell API service.
+type CloudShellAPI =
+     OperationsListResource :<|> OperationsGetResource
+       :<|> OperationsCancelResource
+       :<|> OperationsDeleteResource
diff --git a/gen/Network/Google/CloudShell/Types.hs b/gen/Network/Google/CloudShell/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudShell/Types.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudShell.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.CloudShell.Types
+    (
+    -- * Service Configuration
+      cloudShellService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- * CancelOperationRequest
+    , CancelOperationRequest
+    , cancelOperationRequest
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * Environment
+    , Environment
+    , environment
+    , eState
+    , ePublicKeys
+    , eSSHUsername
+    , eName
+    , eId
+    , eSSHHost
+    , eDockerImage
+    , eSSHPort
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * PublicKey
+    , PublicKey
+    , publicKey
+    , pkFormat
+    , pkKey
+    , pkName
+
+    -- * StartEnvironmentMetadataState
+    , StartEnvironmentMetadataState (..)
+
+    -- * EnvironmentState
+    , EnvironmentState (..)
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * PublicKeyFormat
+    , PublicKeyFormat (..)
+
+    -- * StartEnvironmentMetadata
+    , StartEnvironmentMetadata
+    , startEnvironmentMetadata
+    , semState
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omAddtional
+
+    -- * StartEnvironmentResponse
+    , StartEnvironmentResponse
+    , startEnvironmentResponse
+    , serEnvironment
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+    ) where
+
+import           Network.Google.CloudShell.Types.Product
+import           Network.Google.CloudShell.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Cloud Shell API. This contains the host and root path used as a starting point for constructing service requests.
+cloudShellService :: ServiceConfig
+cloudShellService
+  = defaultService (ServiceId "cloudshell:v1")
+      "cloudshell.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/CloudShell/Types/Product.hs b/gen/Network/Google/CloudShell/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudShell/Types/Product.hs
@@ -0,0 +1,676 @@
+{-# 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.CloudShell.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.CloudShell.Types.Product where
+
+import           Network.Google.CloudShell.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])
+
+-- | 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])
+
+-- | The request message for Operations.CancelOperation.
+--
+-- /See:/ 'cancelOperationRequest' smart constructor.
+data CancelOperationRequest =
+    CancelOperationRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelOperationRequest' with the minimum fields required to make a request.
+--
+cancelOperationRequest
+    :: CancelOperationRequest
+cancelOperationRequest = CancelOperationRequest'
+
+instance FromJSON CancelOperationRequest where
+        parseJSON
+          = withObject "CancelOperationRequest"
+              (\ o -> pure CancelOperationRequest')
+
+instance ToJSON CancelOperationRequest where
+        toJSON = const emptyObject
+
+-- | 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])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | A Cloud Shell environment, which is defined as the combination of a
+-- Docker image specifying what is installed on the environment and a home
+-- directory containing the user\'s data that will remain across sessions.
+-- Each user has a single environment with the ID \"default\".
+--
+-- /See:/ 'environment' smart constructor.
+data Environment = Environment'
+    { _eState       :: !(Maybe EnvironmentState)
+    , _ePublicKeys  :: !(Maybe [PublicKey])
+    , _eSSHUsername :: !(Maybe Text)
+    , _eName        :: !(Maybe Text)
+    , _eId          :: !(Maybe Text)
+    , _eSSHHost     :: !(Maybe Text)
+    , _eDockerImage :: !(Maybe Text)
+    , _eSSHPort     :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Environment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eState'
+--
+-- * 'ePublicKeys'
+--
+-- * 'eSSHUsername'
+--
+-- * 'eName'
+--
+-- * 'eId'
+--
+-- * 'eSSHHost'
+--
+-- * 'eDockerImage'
+--
+-- * 'eSSHPort'
+environment
+    :: Environment
+environment =
+    Environment'
+    { _eState = Nothing
+    , _ePublicKeys = Nothing
+    , _eSSHUsername = Nothing
+    , _eName = Nothing
+    , _eId = Nothing
+    , _eSSHHost = Nothing
+    , _eDockerImage = Nothing
+    , _eSSHPort = Nothing
+    }
+
+-- | Output only. Current execution state of this environment.
+eState :: Lens' Environment (Maybe EnvironmentState)
+eState = lens _eState (\ s a -> s{_eState = a})
+
+-- | Output only. Public keys associated with the environment. Clients can
+-- connect to this environment via SSH only if they possess a private key
+-- corresponding to at least one of these public keys. Keys can be added to
+-- or removed from the environment using the CreatePublicKey and
+-- DeletePublicKey methods.
+ePublicKeys :: Lens' Environment [PublicKey]
+ePublicKeys
+  = lens _ePublicKeys (\ s a -> s{_ePublicKeys = a}) .
+      _Default
+      . _Coerce
+
+-- | Output only. Username that clients should use when initiating SSH
+-- sessions with the environment.
+eSSHUsername :: Lens' Environment (Maybe Text)
+eSSHUsername
+  = lens _eSSHUsername (\ s a -> s{_eSSHUsername = a})
+
+-- | Output only. Full name of this resource, in the format
+-- \`users\/{owner_email}\/environments\/{environment_id}\`.
+-- \`{owner_email}\` is the email address of the user to whom this
+-- environment belongs, and \`{environment_id}\` is the identifier of this
+-- environment. For example,
+-- \`users\/someone\'example.com\/environments\/default\`.
+eName :: Lens' Environment (Maybe Text)
+eName = lens _eName (\ s a -> s{_eName = a})
+
+-- | Output only. The environment\'s identifier, which is always \"default\".
+eId :: Lens' Environment (Maybe Text)
+eId = lens _eId (\ s a -> s{_eId = a})
+
+-- | Output only. Host to which clients can connect to initiate SSH sessions
+-- with the environment.
+eSSHHost :: Lens' Environment (Maybe Text)
+eSSHHost = lens _eSSHHost (\ s a -> s{_eSSHHost = a})
+
+-- | Required. Full path to the Docker image used to run this environment,
+-- e.g. \"gcr.io\/dev-con\/cloud-devshell:latest\".
+eDockerImage :: Lens' Environment (Maybe Text)
+eDockerImage
+  = lens _eDockerImage (\ s a -> s{_eDockerImage = a})
+
+-- | Output only. Port to which clients can connect to initiate SSH sessions
+-- with the environment.
+eSSHPort :: Lens' Environment (Maybe Int32)
+eSSHPort
+  = lens _eSSHPort (\ s a -> s{_eSSHPort = a}) .
+      mapping _Coerce
+
+instance FromJSON Environment where
+        parseJSON
+          = withObject "Environment"
+              (\ o ->
+                 Environment' <$>
+                   (o .:? "state") <*> (o .:? "publicKeys" .!= mempty)
+                     <*> (o .:? "sshUsername")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id")
+                     <*> (o .:? "sshHost")
+                     <*> (o .:? "dockerImage")
+                     <*> (o .:? "sshPort"))
+
+instance ToJSON Environment where
+        toJSON Environment'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _eState,
+                  ("publicKeys" .=) <$> _ePublicKeys,
+                  ("sshUsername" .=) <$> _eSSHUsername,
+                  ("name" .=) <$> _eName, ("id" .=) <$> _eId,
+                  ("sshHost" .=) <$> _eSSHHost,
+                  ("dockerImage" .=) <$> _eDockerImage,
+                  ("sshPort" .=) <$> _eSSHPort])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | A public SSH key, corresponding to a private SSH key held by the client.
+--
+-- /See:/ 'publicKey' smart constructor.
+data PublicKey = PublicKey'
+    { _pkFormat :: !(Maybe PublicKeyFormat)
+    , _pkKey    :: !(Maybe Bytes)
+    , _pkName   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PublicKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pkFormat'
+--
+-- * 'pkKey'
+--
+-- * 'pkName'
+publicKey
+    :: PublicKey
+publicKey =
+    PublicKey'
+    { _pkFormat = Nothing
+    , _pkKey = Nothing
+    , _pkName = Nothing
+    }
+
+-- | Required. Format of this key\'s content.
+pkFormat :: Lens' PublicKey (Maybe PublicKeyFormat)
+pkFormat = lens _pkFormat (\ s a -> s{_pkFormat = a})
+
+-- | Required. Content of this key.
+pkKey :: Lens' PublicKey (Maybe ByteString)
+pkKey
+  = lens _pkKey (\ s a -> s{_pkKey = a}) .
+      mapping _Bytes
+
+-- | Output only. Full name of this resource, in the format
+-- \`users\/{owner_email}\/environments\/{environment_id}\/publicKeys\/{key_id}\`.
+-- \`{owner_email}\` is the email address of the user to whom the key
+-- belongs. \`{environment_id}\` is the identifier of the environment to
+-- which the key grants access. \`{key_id}\` is the unique identifier of
+-- the key. For example,
+-- \`users\/someone\'example.com\/environments\/default\/publicKeys\/myKey\`.
+pkName :: Lens' PublicKey (Maybe Text)
+pkName = lens _pkName (\ s a -> s{_pkName = a})
+
+instance FromJSON PublicKey where
+        parseJSON
+          = withObject "PublicKey"
+              (\ o ->
+                 PublicKey' <$>
+                   (o .:? "format") <*> (o .:? "key") <*>
+                     (o .:? "name"))
+
+instance ToJSON PublicKey where
+        toJSON PublicKey'{..}
+          = object
+              (catMaybes
+                 [("format" .=) <$> _pkFormat, ("key" .=) <$> _pkKey,
+                  ("name" .=) <$> _pkName])
+
+-- | Message included in the metadata field of operations returned from
+-- StartEnvironment.
+--
+-- /See:/ 'startEnvironmentMetadata' smart constructor.
+newtype StartEnvironmentMetadata = StartEnvironmentMetadata'
+    { _semState :: Maybe StartEnvironmentMetadataState
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartEnvironmentMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'semState'
+startEnvironmentMetadata
+    :: StartEnvironmentMetadata
+startEnvironmentMetadata =
+    StartEnvironmentMetadata'
+    { _semState = Nothing
+    }
+
+-- | Current state of the environment being started.
+semState :: Lens' StartEnvironmentMetadata (Maybe StartEnvironmentMetadataState)
+semState = lens _semState (\ s a -> s{_semState = a})
+
+instance FromJSON StartEnvironmentMetadata where
+        parseJSON
+          = withObject "StartEnvironmentMetadata"
+              (\ o ->
+                 StartEnvironmentMetadata' <$> (o .:? "state"))
+
+instance ToJSON StartEnvironmentMetadata where
+        toJSON StartEnvironmentMetadata'{..}
+          = object (catMaybes [("state" .=) <$> _semState])
+
+-- | 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
+
+-- | Message included in the response field of operations returned from
+-- StartEnvironment once the operation is complete.
+--
+-- /See:/ 'startEnvironmentResponse' smart constructor.
+newtype StartEnvironmentResponse = StartEnvironmentResponse'
+    { _serEnvironment :: Maybe Environment
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartEnvironmentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'serEnvironment'
+startEnvironmentResponse
+    :: StartEnvironmentResponse
+startEnvironmentResponse =
+    StartEnvironmentResponse'
+    { _serEnvironment = Nothing
+    }
+
+-- | Environment that was started.
+serEnvironment :: Lens' StartEnvironmentResponse (Maybe Environment)
+serEnvironment
+  = lens _serEnvironment
+      (\ s a -> s{_serEnvironment = a})
+
+instance FromJSON StartEnvironmentResponse where
+        parseJSON
+          = withObject "StartEnvironmentResponse"
+              (\ o ->
+                 StartEnvironmentResponse' <$> (o .:? "environment"))
+
+instance ToJSON StartEnvironmentResponse where
+        toJSON StartEnvironmentResponse'{..}
+          = object
+              (catMaybes [("environment" .=) <$> _serEnvironment])
+
+-- | 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
diff --git a/gen/Network/Google/CloudShell/Types/Sum.hs b/gen/Network/Google/CloudShell/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudShell/Types/Sum.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudShell.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.CloudShell.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Current state of the environment being started.
+data StartEnvironmentMetadataState
+    = StateUnspecified
+      -- ^ @STATE_UNSPECIFIED@
+      -- The environment\'s start state is unknown.
+    | Starting
+      -- ^ @STARTING@
+      -- The environment is in the process of being started, but no additional
+      -- details are available.
+    | UnarchivingDisk
+      -- ^ @UNARCHIVING_DISK@
+      -- Startup is waiting for the user\'s disk to be unarchived. This can
+      -- happen when the user returns to Cloud Shell after not having used it for
+      -- a while, and suggests that startup will take longer than normal.
+    | Finished
+      -- ^ @FINISHED@
+      -- Startup is complete and the user should be able to establish an SSH
+      -- connection to their environment.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable StartEnvironmentMetadataState
+
+instance FromHttpApiData StartEnvironmentMetadataState where
+    parseQueryParam = \case
+        "STATE_UNSPECIFIED" -> Right StateUnspecified
+        "STARTING" -> Right Starting
+        "UNARCHIVING_DISK" -> Right UnarchivingDisk
+        "FINISHED" -> Right Finished
+        x -> Left ("Unable to parse StartEnvironmentMetadataState from: " <> x)
+
+instance ToHttpApiData StartEnvironmentMetadataState where
+    toQueryParam = \case
+        StateUnspecified -> "STATE_UNSPECIFIED"
+        Starting -> "STARTING"
+        UnarchivingDisk -> "UNARCHIVING_DISK"
+        Finished -> "FINISHED"
+
+instance FromJSON StartEnvironmentMetadataState where
+    parseJSON = parseJSONText "StartEnvironmentMetadataState"
+
+instance ToJSON StartEnvironmentMetadataState where
+    toJSON = toJSONText
+
+-- | Output only. Current execution state of this environment.
+data EnvironmentState
+    = ESStateUnspecified
+      -- ^ @STATE_UNSPECIFIED@
+      -- The environment\'s states is unknown.
+    | ESDisabled
+      -- ^ @DISABLED@
+      -- The environment is not running and can\'t be connected to. Starting the
+      -- environment will transition it to the STARTING state.
+    | ESStarting
+      -- ^ @STARTING@
+      -- The environment is being started but is not yet ready to accept
+      -- connections.
+    | ESRunning
+      -- ^ @RUNNING@
+      -- The environment is running and ready to accept connections. It will
+      -- automatically transition back to DISABLED after a period of inactivity
+      -- or if another environment is started.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable EnvironmentState
+
+instance FromHttpApiData EnvironmentState where
+    parseQueryParam = \case
+        "STATE_UNSPECIFIED" -> Right ESStateUnspecified
+        "DISABLED" -> Right ESDisabled
+        "STARTING" -> Right ESStarting
+        "RUNNING" -> Right ESRunning
+        x -> Left ("Unable to parse EnvironmentState from: " <> x)
+
+instance ToHttpApiData EnvironmentState where
+    toQueryParam = \case
+        ESStateUnspecified -> "STATE_UNSPECIFIED"
+        ESDisabled -> "DISABLED"
+        ESStarting -> "STARTING"
+        ESRunning -> "RUNNING"
+
+instance FromJSON EnvironmentState where
+    parseJSON = parseJSONText "EnvironmentState"
+
+instance ToJSON EnvironmentState 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
+
+-- | Required. Format of this key\'s content.
+data PublicKeyFormat
+    = FormatUnspecified
+      -- ^ @FORMAT_UNSPECIFIED@
+      -- Unknown format. Do not use.
+    | SSHDss
+      -- ^ @SSH_DSS@
+      -- \`ssh-dss\` key format (see RFC4253).
+    | SSHRsa
+      -- ^ @SSH_RSA@
+      -- \`ssh-rsa\` key format (see RFC4253).
+    | EcdsaSHA2NISTP256
+      -- ^ @ECDSA_SHA2_NISTP256@
+      -- \`ecdsa-sha2-nistp256\` key format (see RFC5656).
+    | EcdsaSHA2NISTP384
+      -- ^ @ECDSA_SHA2_NISTP384@
+      -- \`ecdsa-sha2-nistp384\` key format (see RFC5656).
+    | EcdsaSHA2NISTP521
+      -- ^ @ECDSA_SHA2_NISTP521@
+      -- \`ecdsa-sha2-nistp521\` key format (see RFC5656).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable PublicKeyFormat
+
+instance FromHttpApiData PublicKeyFormat where
+    parseQueryParam = \case
+        "FORMAT_UNSPECIFIED" -> Right FormatUnspecified
+        "SSH_DSS" -> Right SSHDss
+        "SSH_RSA" -> Right SSHRsa
+        "ECDSA_SHA2_NISTP256" -> Right EcdsaSHA2NISTP256
+        "ECDSA_SHA2_NISTP384" -> Right EcdsaSHA2NISTP384
+        "ECDSA_SHA2_NISTP521" -> Right EcdsaSHA2NISTP521
+        x -> Left ("Unable to parse PublicKeyFormat from: " <> x)
+
+instance ToHttpApiData PublicKeyFormat where
+    toQueryParam = \case
+        FormatUnspecified -> "FORMAT_UNSPECIFIED"
+        SSHDss -> "SSH_DSS"
+        SSHRsa -> "SSH_RSA"
+        EcdsaSHA2NISTP256 -> "ECDSA_SHA2_NISTP256"
+        EcdsaSHA2NISTP384 -> "ECDSA_SHA2_NISTP384"
+        EcdsaSHA2NISTP521 -> "ECDSA_SHA2_NISTP521"
+
+instance FromJSON PublicKeyFormat where
+    parseJSON = parseJSONText "PublicKeyFormat"
+
+instance ToJSON PublicKeyFormat where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/CloudShell/Operations/Cancel.hs b/gen/Network/Google/Resource/CloudShell/Operations/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudShell/Operations/Cancel.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudShell.Operations.Cancel
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation. On successful cancellation, the operation is not deleted;
+-- instead, it becomes an operation with an Operation.error value with a
+-- google.rpc.Status.code of 1, corresponding to \`Code.CANCELLED\`.
+--
+-- /See:/ <https://cloud.google.com/shell/docs/ Cloud Shell API Reference> for @cloudshell.operations.cancel@.
+module Network.Google.Resource.CloudShell.Operations.Cancel
+    (
+    -- * REST Resource
+      OperationsCancelResource
+
+    -- * Creating a Request
+    , operationsCancel
+    , OperationsCancel
+
+    -- * Request Lenses
+    , ocXgafv
+    , ocUploadProtocol
+    , ocAccessToken
+    , ocUploadType
+    , ocPayload
+    , ocName
+    , ocCallback
+    ) where
+
+import           Network.Google.CloudShell.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudshell.operations.cancel@ method which the
+-- 'OperationsCancel' request conforms to.
+type OperationsCancelResource =
+     "v1" :>
+       CaptureMode "name" "cancel" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] CancelOperationRequest :>
+                       Post '[JSON] Empty
+
+-- | Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation. On successful cancellation, the operation is not deleted;
+-- instead, it becomes an operation with an Operation.error value with a
+-- google.rpc.Status.code of 1, corresponding to \`Code.CANCELLED\`.
+--
+-- /See:/ 'operationsCancel' smart constructor.
+data OperationsCancel = OperationsCancel'
+    { _ocXgafv          :: !(Maybe Xgafv)
+    , _ocUploadProtocol :: !(Maybe Text)
+    , _ocAccessToken    :: !(Maybe Text)
+    , _ocUploadType     :: !(Maybe Text)
+    , _ocPayload        :: !CancelOperationRequest
+    , _ocName           :: !Text
+    , _ocCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ocXgafv'
+--
+-- * 'ocUploadProtocol'
+--
+-- * 'ocAccessToken'
+--
+-- * 'ocUploadType'
+--
+-- * 'ocPayload'
+--
+-- * 'ocName'
+--
+-- * 'ocCallback'
+operationsCancel
+    :: CancelOperationRequest -- ^ 'ocPayload'
+    -> Text -- ^ 'ocName'
+    -> OperationsCancel
+operationsCancel pOcPayload_ pOcName_ =
+    OperationsCancel'
+    { _ocXgafv = Nothing
+    , _ocUploadProtocol = Nothing
+    , _ocAccessToken = Nothing
+    , _ocUploadType = Nothing
+    , _ocPayload = pOcPayload_
+    , _ocName = pOcName_
+    , _ocCallback = Nothing
+    }
+
+-- | V1 error format.
+ocXgafv :: Lens' OperationsCancel (Maybe Xgafv)
+ocXgafv = lens _ocXgafv (\ s a -> s{_ocXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ocUploadProtocol :: Lens' OperationsCancel (Maybe Text)
+ocUploadProtocol
+  = lens _ocUploadProtocol
+      (\ s a -> s{_ocUploadProtocol = a})
+
+-- | OAuth access token.
+ocAccessToken :: Lens' OperationsCancel (Maybe Text)
+ocAccessToken
+  = lens _ocAccessToken
+      (\ s a -> s{_ocAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ocUploadType :: Lens' OperationsCancel (Maybe Text)
+ocUploadType
+  = lens _ocUploadType (\ s a -> s{_ocUploadType = a})
+
+-- | Multipart request metadata.
+ocPayload :: Lens' OperationsCancel CancelOperationRequest
+ocPayload
+  = lens _ocPayload (\ s a -> s{_ocPayload = a})
+
+-- | The name of the operation resource to be cancelled.
+ocName :: Lens' OperationsCancel Text
+ocName = lens _ocName (\ s a -> s{_ocName = a})
+
+-- | JSONP
+ocCallback :: Lens' OperationsCancel (Maybe Text)
+ocCallback
+  = lens _ocCallback (\ s a -> s{_ocCallback = a})
+
+instance GoogleRequest OperationsCancel where
+        type Rs OperationsCancel = Empty
+        type Scopes OperationsCancel =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsCancel'{..}
+          = go _ocName _ocXgafv _ocUploadProtocol
+              _ocAccessToken
+              _ocUploadType
+              _ocCallback
+              (Just AltJSON)
+              _ocPayload
+              cloudShellService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OperationsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudShell/Operations/Delete.hs b/gen/Network/Google/Resource/CloudShell/Operations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudShell/Operations/Delete.hs
@@ -0,0 +1,149 @@
+{-# 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.CloudShell.Operations.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ <https://cloud.google.com/shell/docs/ Cloud Shell API Reference> for @cloudshell.operations.delete@.
+module Network.Google.Resource.CloudShell.Operations.Delete
+    (
+    -- * REST Resource
+      OperationsDeleteResource
+
+    -- * Creating a Request
+    , operationsDelete
+    , OperationsDelete
+
+    -- * Request Lenses
+    , odXgafv
+    , odUploadProtocol
+    , odAccessToken
+    , odUploadType
+    , odName
+    , odCallback
+    ) where
+
+import           Network.Google.CloudShell.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudshell.operations.delete@ method which the
+-- 'OperationsDelete' request conforms to.
+type OperationsDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ 'operationsDelete' smart constructor.
+data OperationsDelete = OperationsDelete'
+    { _odXgafv          :: !(Maybe Xgafv)
+    , _odUploadProtocol :: !(Maybe Text)
+    , _odAccessToken    :: !(Maybe Text)
+    , _odUploadType     :: !(Maybe Text)
+    , _odName           :: !Text
+    , _odCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'odXgafv'
+--
+-- * 'odUploadProtocol'
+--
+-- * 'odAccessToken'
+--
+-- * 'odUploadType'
+--
+-- * 'odName'
+--
+-- * 'odCallback'
+operationsDelete
+    :: Text -- ^ 'odName'
+    -> OperationsDelete
+operationsDelete pOdName_ =
+    OperationsDelete'
+    { _odXgafv = Nothing
+    , _odUploadProtocol = Nothing
+    , _odAccessToken = Nothing
+    , _odUploadType = Nothing
+    , _odName = pOdName_
+    , _odCallback = Nothing
+    }
+
+-- | V1 error format.
+odXgafv :: Lens' OperationsDelete (Maybe Xgafv)
+odXgafv = lens _odXgafv (\ s a -> s{_odXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+odUploadProtocol :: Lens' OperationsDelete (Maybe Text)
+odUploadProtocol
+  = lens _odUploadProtocol
+      (\ s a -> s{_odUploadProtocol = a})
+
+-- | OAuth access token.
+odAccessToken :: Lens' OperationsDelete (Maybe Text)
+odAccessToken
+  = lens _odAccessToken
+      (\ s a -> s{_odAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+odUploadType :: Lens' OperationsDelete (Maybe Text)
+odUploadType
+  = lens _odUploadType (\ s a -> s{_odUploadType = a})
+
+-- | The name of the operation resource to be deleted.
+odName :: Lens' OperationsDelete Text
+odName = lens _odName (\ s a -> s{_odName = a})
+
+-- | JSONP
+odCallback :: Lens' OperationsDelete (Maybe Text)
+odCallback
+  = lens _odCallback (\ s a -> s{_odCallback = a})
+
+instance GoogleRequest OperationsDelete where
+        type Rs OperationsDelete = Empty
+        type Scopes OperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient OperationsDelete'{..}
+          = go _odName _odXgafv _odUploadProtocol
+              _odAccessToken
+              _odUploadType
+              _odCallback
+              (Just AltJSON)
+              cloudShellService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OperationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudShell/Operations/Get.hs b/gen/Network/Google/Resource/CloudShell/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudShell/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.CloudShell.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/shell/docs/ Cloud Shell API Reference> for @cloudshell.operations.get@.
+module Network.Google.Resource.CloudShell.Operations.Get
+    (
+    -- * REST Resource
+      OperationsGetResource
+
+    -- * Creating a Request
+    , operationsGet
+    , OperationsGet
+
+    -- * Request Lenses
+    , ogXgafv
+    , ogUploadProtocol
+    , ogAccessToken
+    , ogUploadType
+    , ogName
+    , ogCallback
+    ) where
+
+import           Network.Google.CloudShell.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudshell.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)
+              cloudShellService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudShell/Operations/List.hs b/gen/Network/Google/Resource/CloudShell/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudShell/Operations/List.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudShell.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/shell/docs/ Cloud Shell API Reference> for @cloudshell.operations.list@.
+module Network.Google.Resource.CloudShell.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.CloudShell.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudshell.operations.list@ method which the
+-- 'OperationsList' request conforms to.
+type OperationsListResource =
+     "v1" :>
+       Capture "name" Text :>
+         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] 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           :: !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
+    :: Text -- ^ 'olName'
+    -> OperationsList
+operationsList pOlName_ =
+    OperationsList'
+    { _olXgafv = Nothing
+    , _olUploadProtocol = Nothing
+    , _olAccessToken = Nothing
+    , _olUploadType = Nothing
+    , _olName = pOlName_
+    , _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})
+
+-- | The name of the operation\'s parent resource.
+olName :: Lens' OperationsList Text
+olName = lens _olName (\ s a -> s{_olName = a})
+
+-- | The standard list filter.
+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 _olName _olXgafv _olUploadProtocol
+              _olAccessToken
+              _olUploadType
+              _olFilter
+              _olPageToken
+              _olPageSize
+              _olCallback
+              (Just AltJSON)
+              cloudShellService
+          where go
+                  = buildClient (Proxy :: Proxy OperationsListResource)
+                      mempty
diff --git a/gogol-cloudshell.cabal b/gogol-cloudshell.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudshell.cabal
@@ -0,0 +1,50 @@
+name:                  gogol-cloudshell
+version:               0.4.0
+synopsis:              Google Cloud Shell 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:
+    Allows users to start, configure, and connect to interactive shell
+    sessions running in the cloud.
+    .
+    /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.CloudShell
+        , Network.Google.CloudShell.Types
+        , Network.Google.Resource.CloudShell.Operations.Cancel
+        , Network.Google.Resource.CloudShell.Operations.Delete
+        , Network.Google.Resource.CloudShell.Operations.Get
+        , Network.Google.Resource.CloudShell.Operations.List
+
+    other-modules:
+          Network.Google.CloudShell.Types.Product
+        , Network.Google.CloudShell.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
