diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.0.1`
+`0.1.0`
 
 
 ## Description
@@ -18,9 +18,9 @@
 
 ## Contribute
 
-For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+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 `amazonka-gen` for more information.
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
 
 
 ## Licence
diff --git a/gen/Network/Google/Compute.hs b/gen/Network/Google/Compute.hs
--- a/gen/Network/Google/Compute.hs
+++ b/gen/Network/Google/Compute.hs
@@ -7,13 +7,13 @@
 
 -- |
 -- Module      : Network.Google.Compute
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- API for the Google Compute Engine service.
+-- Creates and runs virtual machines on Google Cloud Platform.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference>
 module Network.Google.Compute
@@ -21,6 +21,14 @@
     -- * Service Configuration
       computeService
 
+    -- * OAuth Scopes
+    , computeScope
+    , cloudPlatformScope
+    , storageReadOnlyScope
+    , storageReadWriteScope
+    , computeReadOnlyScope
+    , storageFullControlScope
+
     -- * API Declaration
     , ComputeAPI
 
@@ -110,6 +118,9 @@
     -- ** compute.disks.list
     , module Network.Google.Resource.Compute.Disks.List
 
+    -- ** compute.disks.resize
+    , module Network.Google.Resource.Compute.Disks.Resize
+
     -- ** compute.firewalls.delete
     , module Network.Google.Resource.Compute.Firewalls.Delete
 
@@ -230,6 +241,9 @@
     -- ** compute.images.get
     , module Network.Google.Resource.Compute.Images.Get
 
+    -- ** compute.images.getFromFamily
+    , module Network.Google.Resource.Compute.Images.GetFromFamily
+
     -- ** compute.images.insert
     , module Network.Google.Resource.Compute.Images.Insert
 
@@ -347,6 +361,9 @@
     -- ** compute.instances.setDiskAutoDelete
     , module Network.Google.Resource.Compute.Instances.SetDiskAutoDelete
 
+    -- ** compute.instances.setMachineType
+    , module Network.Google.Resource.Compute.Instances.SetMachineType
+
     -- ** compute.instances.setMetadata
     , module Network.Google.Resource.Compute.Instances.SetMetadata
 
@@ -449,6 +466,21 @@
     -- ** compute.sslCertificates.list
     , module Network.Google.Resource.Compute.SSLCertificates.List
 
+    -- ** compute.subnetworks.aggregatedList
+    , module Network.Google.Resource.Compute.Subnetworks.AggregatedList
+
+    -- ** compute.subnetworks.delete
+    , module Network.Google.Resource.Compute.Subnetworks.Delete
+
+    -- ** compute.subnetworks.get
+    , module Network.Google.Resource.Compute.Subnetworks.Get
+
+    -- ** compute.subnetworks.insert
+    , module Network.Google.Resource.Compute.Subnetworks.Insert
+
+    -- ** compute.subnetworks.list
+    , module Network.Google.Resource.Compute.Subnetworks.List
+
     -- ** compute.targetHttpProxies.delete
     , module Network.Google.Resource.Compute.TargetHTTPProxies.Delete
 
@@ -665,6 +697,11 @@
     , iglSelfLink
     , iglId
 
+    -- ** InstancesSetMachineTypeRequest
+    , InstancesSetMachineTypeRequest
+    , instancesSetMachineTypeRequest
+    , ismtrMachineType
+
     -- ** AutoscalerAggregatedListItems
     , AutoscalerAggregatedListItems
     , autoscalerAggregatedListItems
@@ -772,6 +809,13 @@
     , igmlSelfLink
     , igmlId
 
+    -- ** SubnetworksScopedListWarning
+    , SubnetworksScopedListWarning
+    , subnetworksScopedListWarning
+    , sslwData
+    , sslwCode
+    , sslwMessage
+
     -- ** AttachedDiskType
     , AttachedDiskType (..)
 
@@ -784,6 +828,7 @@
     , iSourceDiskId
     , iKind
     , iArchiveSizeBytes
+    , iFamily
     , iRawDisk
     , iSelfLink
     , iName
@@ -1022,6 +1067,12 @@
     , igmslwdiValue
     , igmslwdiKey
 
+    -- ** SubnetworksScopedList
+    , SubnetworksScopedList
+    , subnetworksScopedList
+    , sslSubnetworks
+    , sslWarning
+
     -- ** DisksScopedListWarningCode
     , DisksScopedListWarningCode (..)
 
@@ -1062,6 +1113,7 @@
     , oId
     , oOperationType
     , oRegion
+    , oDescription
     , oTargetLink
     , oClientOperationId
 
@@ -1131,6 +1183,7 @@
     , igmTargetPools
     , igmDescription
     , igmInstanceGroup
+    , igmNamedPorts
 
     -- ** TargetPoolsScopedListWarningCode
     , TargetPoolsScopedListWarningCode (..)
@@ -1266,6 +1319,7 @@
     , niNetwork
     , niName
     , niNetworkIP
+    , niSubnetwork
     , niAccessConfigs
 
     -- ** TargetPoolsRemoveHealthCheckRequest
@@ -1330,7 +1384,9 @@
     -- ** Network
     , Network
     , network
+    , nAutoCreateSubnetworks
     , nKind
+    , nSubnetworks
     , nIPv4Range
     , nSelfLink
     , nName
@@ -1383,7 +1439,6 @@
     , Zone
     , zone
     , zStatus
-    , zMaintenanceWindows
     , zKind
     , zSelfLink
     , zName
@@ -1471,14 +1526,6 @@
     , itDescription
     , itProperties
 
-    -- ** ZoneMaintenanceWindowsItem
-    , ZoneMaintenanceWindowsItem
-    , zoneMaintenanceWindowsItem
-    , zmwiBeginTime
-    , zmwiName
-    , zmwiEndTime
-    , zmwiDescription
-
     -- ** TargetVPNGateway
     , TargetVPNGateway
     , targetVPNGateway
@@ -1823,12 +1870,35 @@
     , machineTypeScratchDisksItem
     , mtsdiDiskGb
 
+    -- ** SubnetworksScopedListWarningDataItem
+    , SubnetworksScopedListWarningDataItem
+    , subnetworksScopedListWarningDataItem
+    , sslwdiValue
+    , sslwdiKey
+
     -- ** MachineTypesScopedList
     , MachineTypesScopedList
     , machineTypesScopedList
     , mtslMachineTypes
     , mtslWarning
 
+    -- ** SubnetworksScopedListWarningCode
+    , SubnetworksScopedListWarningCode (..)
+
+    -- ** Subnetwork
+    , Subnetwork
+    , subnetwork
+    , subKind
+    , subNetwork
+    , subGatewayAddress
+    , subSelfLink
+    , subName
+    , subCreationTimestamp
+    , subIPCIdRRange
+    , subId
+    , subRegion
+    , subDescription
+
     -- ** MachineTypeAggregatedList
     , MachineTypeAggregatedList
     , machineTypeAggregatedList
@@ -1939,6 +2009,20 @@
     , tislwCode
     , tislwMessage
 
+    -- ** SubnetworkAggregatedList
+    , SubnetworkAggregatedList
+    , subnetworkAggregatedList
+    , salNextPageToken
+    , salKind
+    , salItems
+    , salSelfLink
+    , salId
+
+    -- ** DisksResizeRequest
+    , DisksResizeRequest
+    , disksResizeRequest
+    , drrSizeGb
+
     -- ** AutoscalersScopedListWarningDataItem
     , AutoscalersScopedListWarningDataItem
     , autoscalersScopedListWarningDataItem
@@ -2016,6 +2100,7 @@
     , vpnTunnel
     , vtDetailedStatus
     , vtStatus
+    , vtLocalTrafficSelector
     , vtKind
     , vtPeerIP
     , vtTargetVPNGateway
@@ -2052,6 +2137,15 @@
     , vtslwdiValue
     , vtslwdiKey
 
+    -- ** SubnetworkList
+    , SubnetworkList
+    , subnetworkList
+    , slNextPageToken
+    , slKind
+    , slItems
+    , slSelfLink
+    , slId
+
     -- ** ForwardingRulesScopedListWarning
     , ForwardingRulesScopedListWarning
     , forwardingRulesScopedListWarning
@@ -2125,6 +2219,11 @@
     , insSelfLink
     , insId
 
+    -- ** SubnetworkAggregatedListItems
+    , SubnetworkAggregatedListItems
+    , subnetworkAggregatedListItems
+    , saliAddtional
+
     -- ** ManagedInstanceLastAttempt
     , ManagedInstanceLastAttempt
     , managedInstanceLastAttempt
@@ -2205,6 +2304,7 @@
     , iiSelfLink
     , iiName
     , iiCreationTimestamp
+    , iiSubnetwork
     , iiId
     , iiDescription
     , iiNamedPorts
@@ -2215,11 +2315,11 @@
     -- ** SnapshotList
     , SnapshotList
     , snapshotList
-    , slNextPageToken
-    , slKind
-    , slItems
-    , slSelfLink
-    , slId
+    , snaNextPageToken
+    , snaKind
+    , snaItems
+    , snaSelfLink
+    , snaId
 
     -- ** TestFailure
     , TestFailure
@@ -2304,6 +2404,7 @@
     , bsName
     , bsCreationTimestamp
     , bsId
+    , bsRegion
     , bsTimeoutSec
     , bsDescription
     , bsPortName
@@ -2438,6 +2539,7 @@
 import           Network.Google.Resource.Compute.Disks.Get
 import           Network.Google.Resource.Compute.Disks.Insert
 import           Network.Google.Resource.Compute.Disks.List
+import           Network.Google.Resource.Compute.Disks.Resize
 import           Network.Google.Resource.Compute.DiskTypes.AggregatedList
 import           Network.Google.Resource.Compute.DiskTypes.Get
 import           Network.Google.Resource.Compute.DiskTypes.List
@@ -2481,6 +2583,7 @@
 import           Network.Google.Resource.Compute.Images.Delete
 import           Network.Google.Resource.Compute.Images.Deprecate
 import           Network.Google.Resource.Compute.Images.Get
+import           Network.Google.Resource.Compute.Images.GetFromFamily
 import           Network.Google.Resource.Compute.Images.Insert
 import           Network.Google.Resource.Compute.Images.List
 import           Network.Google.Resource.Compute.InstanceGroupManagers.AbandonInstances
@@ -2516,6 +2619,7 @@
 import           Network.Google.Resource.Compute.Instances.List
 import           Network.Google.Resource.Compute.Instances.Reset
 import           Network.Google.Resource.Compute.Instances.SetDiskAutoDelete
+import           Network.Google.Resource.Compute.Instances.SetMachineType
 import           Network.Google.Resource.Compute.Instances.SetMetadata
 import           Network.Google.Resource.Compute.Instances.SetScheduling
 import           Network.Google.Resource.Compute.Instances.SetTags
@@ -2554,6 +2658,11 @@
 import           Network.Google.Resource.Compute.SSLCertificates.Get
 import           Network.Google.Resource.Compute.SSLCertificates.Insert
 import           Network.Google.Resource.Compute.SSLCertificates.List
+import           Network.Google.Resource.Compute.Subnetworks.AggregatedList
+import           Network.Google.Resource.Compute.Subnetworks.Delete
+import           Network.Google.Resource.Compute.Subnetworks.Get
+import           Network.Google.Resource.Compute.Subnetworks.Insert
+import           Network.Google.Resource.Compute.Subnetworks.List
 import           Network.Google.Resource.Compute.TargetHTTPProxies.Delete
 import           Network.Google.Resource.Compute.TargetHTTPProxies.Get
 import           Network.Google.Resource.Compute.TargetHTTPProxies.Insert
@@ -2612,6 +2721,7 @@
 type ComputeAPI =
      ImagesInsertResource :<|> ImagesListResource :<|>
        ImagesGetResource
+       :<|> ImagesGetFromFamilyResource
        :<|> ImagesDeprecateResource
        :<|> ImagesDeleteResource
        :<|> URLMapsInsertResource
@@ -2692,6 +2802,11 @@
        :<|> HTTPHealthChecksGetResource
        :<|> HTTPHealthChecksDeleteResource
        :<|> HTTPHealthChecksUpdateResource
+       :<|> SubnetworksAggregatedListResource
+       :<|> SubnetworksInsertResource
+       :<|> SubnetworksListResource
+       :<|> SubnetworksGetResource
+       :<|> SubnetworksDeleteResource
        :<|> SnapshotsListResource
        :<|> SnapshotsGetResource
        :<|> SnapshotsDeleteResource
@@ -2708,6 +2823,7 @@
        :<|> InstancesListResource
        :<|> InstancesStartResource
        :<|> InstancesGetResource
+       :<|> InstancesSetMachineTypeResource
        :<|> InstancesDeleteAccessConfigResource
        :<|> InstancesSetMetadataResource
        :<|> InstancesSetSchedulingResource
@@ -2761,6 +2877,7 @@
        :<|> TargetInstancesDeleteResource
        :<|> DisksAggregatedListResource
        :<|> DisksInsertResource
+       :<|> DisksResizeResource
        :<|> DisksListResource
        :<|> DisksGetResource
        :<|> DisksCreateSnapshotResource
diff --git a/gen/Network/Google/Compute/Types.hs b/gen/Network/Google/Compute/Types.hs
--- a/gen/Network/Google/Compute/Types.hs
+++ b/gen/Network/Google/Compute/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DataKinds          #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE NoImplicitPrelude  #-}
@@ -7,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Compute.Types
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,10 +22,10 @@
     -- * OAuth Scopes
     , computeScope
     , cloudPlatformScope
-    , devstorageReadOnlyScope
-    , devstorageReadWriteScope
-    , computeReadonlyScope
-    , devstorageFullControlScope
+    , storageReadOnlyScope
+    , storageReadWriteScope
+    , computeReadOnlyScope
+    , storageFullControlScope
 
     -- * TargetHTTPSProxyList
     , TargetHTTPSProxyList
@@ -93,6 +94,11 @@
     , iglSelfLink
     , iglId
 
+    -- * InstancesSetMachineTypeRequest
+    , InstancesSetMachineTypeRequest
+    , instancesSetMachineTypeRequest
+    , ismtrMachineType
+
     -- * AutoscalerAggregatedListItems
     , AutoscalerAggregatedListItems
     , autoscalerAggregatedListItems
@@ -200,6 +206,13 @@
     , igmlSelfLink
     , igmlId
 
+    -- * SubnetworksScopedListWarning
+    , SubnetworksScopedListWarning
+    , subnetworksScopedListWarning
+    , sslwData
+    , sslwCode
+    , sslwMessage
+
     -- * AttachedDiskType
     , AttachedDiskType (..)
 
@@ -212,6 +225,7 @@
     , iSourceDiskId
     , iKind
     , iArchiveSizeBytes
+    , iFamily
     , iRawDisk
     , iSelfLink
     , iName
@@ -450,6 +464,12 @@
     , igmslwdiValue
     , igmslwdiKey
 
+    -- * SubnetworksScopedList
+    , SubnetworksScopedList
+    , subnetworksScopedList
+    , sslSubnetworks
+    , sslWarning
+
     -- * DisksScopedListWarningCode
     , DisksScopedListWarningCode (..)
 
@@ -490,6 +510,7 @@
     , oId
     , oOperationType
     , oRegion
+    , oDescription
     , oTargetLink
     , oClientOperationId
 
@@ -559,6 +580,7 @@
     , igmTargetPools
     , igmDescription
     , igmInstanceGroup
+    , igmNamedPorts
 
     -- * TargetPoolsScopedListWarningCode
     , TargetPoolsScopedListWarningCode (..)
@@ -694,6 +716,7 @@
     , niNetwork
     , niName
     , niNetworkIP
+    , niSubnetwork
     , niAccessConfigs
 
     -- * TargetPoolsRemoveHealthCheckRequest
@@ -758,7 +781,9 @@
     -- * Network
     , Network
     , network
+    , nAutoCreateSubnetworks
     , nKind
+    , nSubnetworks
     , nIPv4Range
     , nSelfLink
     , nName
@@ -811,7 +836,6 @@
     , Zone
     , zone
     , zStatus
-    , zMaintenanceWindows
     , zKind
     , zSelfLink
     , zName
@@ -899,14 +923,6 @@
     , itDescription
     , itProperties
 
-    -- * ZoneMaintenanceWindowsItem
-    , ZoneMaintenanceWindowsItem
-    , zoneMaintenanceWindowsItem
-    , zmwiBeginTime
-    , zmwiName
-    , zmwiEndTime
-    , zmwiDescription
-
     -- * TargetVPNGateway
     , TargetVPNGateway
     , targetVPNGateway
@@ -1251,12 +1267,35 @@
     , machineTypeScratchDisksItem
     , mtsdiDiskGb
 
+    -- * SubnetworksScopedListWarningDataItem
+    , SubnetworksScopedListWarningDataItem
+    , subnetworksScopedListWarningDataItem
+    , sslwdiValue
+    , sslwdiKey
+
     -- * MachineTypesScopedList
     , MachineTypesScopedList
     , machineTypesScopedList
     , mtslMachineTypes
     , mtslWarning
 
+    -- * SubnetworksScopedListWarningCode
+    , SubnetworksScopedListWarningCode (..)
+
+    -- * Subnetwork
+    , Subnetwork
+    , subnetwork
+    , subKind
+    , subNetwork
+    , subGatewayAddress
+    , subSelfLink
+    , subName
+    , subCreationTimestamp
+    , subIPCIdRRange
+    , subId
+    , subRegion
+    , subDescription
+
     -- * MachineTypeAggregatedList
     , MachineTypeAggregatedList
     , machineTypeAggregatedList
@@ -1367,6 +1406,20 @@
     , tislwCode
     , tislwMessage
 
+    -- * SubnetworkAggregatedList
+    , SubnetworkAggregatedList
+    , subnetworkAggregatedList
+    , salNextPageToken
+    , salKind
+    , salItems
+    , salSelfLink
+    , salId
+
+    -- * DisksResizeRequest
+    , DisksResizeRequest
+    , disksResizeRequest
+    , drrSizeGb
+
     -- * AutoscalersScopedListWarningDataItem
     , AutoscalersScopedListWarningDataItem
     , autoscalersScopedListWarningDataItem
@@ -1444,6 +1497,7 @@
     , vpnTunnel
     , vtDetailedStatus
     , vtStatus
+    , vtLocalTrafficSelector
     , vtKind
     , vtPeerIP
     , vtTargetVPNGateway
@@ -1480,6 +1534,15 @@
     , vtslwdiValue
     , vtslwdiKey
 
+    -- * SubnetworkList
+    , SubnetworkList
+    , subnetworkList
+    , slNextPageToken
+    , slKind
+    , slItems
+    , slSelfLink
+    , slId
+
     -- * ForwardingRulesScopedListWarning
     , ForwardingRulesScopedListWarning
     , forwardingRulesScopedListWarning
@@ -1553,6 +1616,11 @@
     , insSelfLink
     , insId
 
+    -- * SubnetworkAggregatedListItems
+    , SubnetworkAggregatedListItems
+    , subnetworkAggregatedListItems
+    , saliAddtional
+
     -- * ManagedInstanceLastAttempt
     , ManagedInstanceLastAttempt
     , managedInstanceLastAttempt
@@ -1633,6 +1701,7 @@
     , iiSelfLink
     , iiName
     , iiCreationTimestamp
+    , iiSubnetwork
     , iiId
     , iiDescription
     , iiNamedPorts
@@ -1643,11 +1712,11 @@
     -- * SnapshotList
     , SnapshotList
     , snapshotList
-    , slNextPageToken
-    , slKind
-    , slItems
-    , slSelfLink
-    , slId
+    , snaNextPageToken
+    , snaKind
+    , snaItems
+    , snaSelfLink
+    , snaId
 
     -- * TestFailure
     , TestFailure
@@ -1732,6 +1801,7 @@
     , bsName
     , bsCreationTimestamp
     , bsId
+    , bsRegion
     , bsTimeoutSec
     , bsDescription
     , bsPortName
@@ -1844,31 +1914,31 @@
 import           Network.Google.Prelude
 
 -- | Default request referring to version 'v1' of the Compute Engine API. This contains the host and root path used as a starting point for constructing service requests.
-computeService :: Service
+computeService :: ServiceConfig
 computeService
   = defaultService (ServiceId "compute:v1")
       "www.googleapis.com"
 
 -- | View and manage your Google Compute Engine resources
-computeScope :: OAuthScope
-computeScope = "https://www.googleapis.com/auth/compute";
+computeScope :: Proxy '["https://www.googleapis.com/auth/compute"]
+computeScope = Proxy;
 
 -- | View and manage your data across Google Cloud Platform services
-cloudPlatformScope :: OAuthScope
-cloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
 
 -- | View your data in Google Cloud Storage
-devstorageReadOnlyScope :: OAuthScope
-devstorageReadOnlyScope = "https://www.googleapis.com/auth/devstorage.read_only";
+storageReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/devstorage.read_only"]
+storageReadOnlyScope = Proxy;
 
 -- | Manage your data in Google Cloud Storage
-devstorageReadWriteScope :: OAuthScope
-devstorageReadWriteScope = "https://www.googleapis.com/auth/devstorage.read_write";
+storageReadWriteScope :: Proxy '["https://www.googleapis.com/auth/devstorage.read_write"]
+storageReadWriteScope = Proxy;
 
 -- | View your Google Compute Engine resources
-computeReadonlyScope :: OAuthScope
-computeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly";
+computeReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/compute.readonly"]
+computeReadOnlyScope = Proxy;
 
 -- | Manage your data and permissions in Google Cloud Storage
-devstorageFullControlScope :: OAuthScope
-devstorageFullControlScope = "https://www.googleapis.com/auth/devstorage.full_control";
+storageFullControlScope :: Proxy '["https://www.googleapis.com/auth/devstorage.full_control"]
+storageFullControlScope = Proxy;
diff --git a/gen/Network/Google/Compute/Types/Product.hs b/gen/Network/Google/Compute/Types/Product.hs
--- a/gen/Network/Google/Compute/Types/Product.hs
+++ b/gen/Network/Google/Compute/Types/Product.hs
@@ -9,15808 +9,16937 @@
 
 -- |
 -- Module      : Network.Google.Compute.Types.Product
--- Copyright   : (c) 2015 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.Compute.Types.Product where
-
-import           Network.Google.Compute.Types.Sum
-import           Network.Google.Prelude
-
--- | Contains a list of TargetHttpsProxy resources.
---
--- /See:/ 'targetHTTPSProxyList' smart constructor.
-data TargetHTTPSProxyList = TargetHTTPSProxyList
-    { _thplNextPageToken :: !(Maybe Text)
-    , _thplKind          :: !Text
-    , _thplItems         :: !(Maybe [TargetHTTPSProxy])
-    , _thplSelfLink      :: !(Maybe Text)
-    , _thplId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetHTTPSProxyList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'thplNextPageToken'
---
--- * 'thplKind'
---
--- * 'thplItems'
---
--- * 'thplSelfLink'
---
--- * 'thplId'
-targetHTTPSProxyList
-    :: TargetHTTPSProxyList
-targetHTTPSProxyList =
-    TargetHTTPSProxyList
-    { _thplNextPageToken = Nothing
-    , _thplKind = "compute#targetHttpsProxyList"
-    , _thplItems = Nothing
-    , _thplSelfLink = Nothing
-    , _thplId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-thplNextPageToken :: Lens' TargetHTTPSProxyList (Maybe Text)
-thplNextPageToken
-  = lens _thplNextPageToken
-      (\ s a -> s{_thplNextPageToken = a})
-
--- | Type of resource.
-thplKind :: Lens' TargetHTTPSProxyList Text
-thplKind = lens _thplKind (\ s a -> s{_thplKind = a})
-
--- | A list of TargetHttpsProxy resources.
-thplItems :: Lens' TargetHTTPSProxyList [TargetHTTPSProxy]
-thplItems
-  = lens _thplItems (\ s a -> s{_thplItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-thplSelfLink :: Lens' TargetHTTPSProxyList (Maybe Text)
-thplSelfLink
-  = lens _thplSelfLink (\ s a -> s{_thplSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-thplId :: Lens' TargetHTTPSProxyList (Maybe Text)
-thplId = lens _thplId (\ s a -> s{_thplId = a})
-
-instance FromJSON TargetHTTPSProxyList where
-        parseJSON
-          = withObject "TargetHTTPSProxyList"
-              (\ o ->
-                 TargetHTTPSProxyList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#targetHttpsProxyList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetHTTPSProxyList where
-        toJSON TargetHTTPSProxyList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _thplNextPageToken,
-                  Just ("kind" .= _thplKind),
-                  ("items" .=) <$> _thplItems,
-                  ("selfLink" .=) <$> _thplSelfLink,
-                  ("id" .=) <$> _thplId])
-
---
--- /See:/ 'addressesScopedList' smart constructor.
-data AddressesScopedList = AddressesScopedList
-    { _aslAddresses :: !(Maybe [Address])
-    , _aslWarning   :: !(Maybe AddressesScopedListWarning)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddressesScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aslAddresses'
---
--- * 'aslWarning'
-addressesScopedList
-    :: AddressesScopedList
-addressesScopedList =
-    AddressesScopedList
-    { _aslAddresses = Nothing
-    , _aslWarning = Nothing
-    }
-
--- | [Output Only] List of addresses contained in this scope.
-aslAddresses :: Lens' AddressesScopedList [Address]
-aslAddresses
-  = lens _aslAddresses (\ s a -> s{_aslAddresses = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Informational warning which replaces the list of addresses
--- when the list is empty.
-aslWarning :: Lens' AddressesScopedList (Maybe AddressesScopedListWarning)
-aslWarning
-  = lens _aslWarning (\ s a -> s{_aslWarning = a})
-
-instance FromJSON AddressesScopedList where
-        parseJSON
-          = withObject "AddressesScopedList"
-              (\ o ->
-                 AddressesScopedList <$>
-                   (o .:? "addresses" .!= mempty) <*> (o .:? "warning"))
-
-instance ToJSON AddressesScopedList where
-        toJSON AddressesScopedList{..}
-          = object
-              (catMaybes
-                 [("addresses" .=) <$> _aslAddresses,
-                  ("warning" .=) <$> _aslWarning])
-
---
--- /See:/ 'operationWarningsItemDataItem' smart constructor.
-data OperationWarningsItemDataItem = OperationWarningsItemDataItem
-    { _owidiValue :: !(Maybe Text)
-    , _owidiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationWarningsItemDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'owidiValue'
---
--- * 'owidiKey'
-operationWarningsItemDataItem
-    :: OperationWarningsItemDataItem
-operationWarningsItemDataItem =
-    OperationWarningsItemDataItem
-    { _owidiValue = Nothing
-    , _owidiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-owidiValue :: Lens' OperationWarningsItemDataItem (Maybe Text)
-owidiValue
-  = lens _owidiValue (\ s a -> s{_owidiValue = a})
-
--- | [Output Only] A key for the warning data.
-owidiKey :: Lens' OperationWarningsItemDataItem (Maybe Text)
-owidiKey = lens _owidiKey (\ s a -> s{_owidiKey = a})
-
-instance FromJSON OperationWarningsItemDataItem where
-        parseJSON
-          = withObject "OperationWarningsItemDataItem"
-              (\ o ->
-                 OperationWarningsItemDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON OperationWarningsItemDataItem where
-        toJSON OperationWarningsItemDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _owidiValue,
-                  ("key" .=) <$> _owidiKey])
-
---
--- /See:/ 'instanceGroupManagersAbandonInstancesRequest' smart constructor.
-newtype InstanceGroupManagersAbandonInstancesRequest = InstanceGroupManagersAbandonInstancesRequest
-    { _igmairInstances :: Maybe [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersAbandonInstancesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmairInstances'
-instanceGroupManagersAbandonInstancesRequest
-    :: InstanceGroupManagersAbandonInstancesRequest
-instanceGroupManagersAbandonInstancesRequest =
-    InstanceGroupManagersAbandonInstancesRequest
-    { _igmairInstances = Nothing
-    }
-
--- | The URL for one or more instances to abandon from the managed instance
--- group.
-igmairInstances :: Lens' InstanceGroupManagersAbandonInstancesRequest [Text]
-igmairInstances
-  = lens _igmairInstances
-      (\ s a -> s{_igmairInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupManagersAbandonInstancesRequest where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersAbandonInstancesRequest"
-              (\ o ->
-                 InstanceGroupManagersAbandonInstancesRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON
-         InstanceGroupManagersAbandonInstancesRequest where
-        toJSON
-          InstanceGroupManagersAbandonInstancesRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _igmairInstances])
-
--- | [Output Only] A map of scoped machine type lists.
---
--- /See:/ 'machineTypeAggregatedListItems' smart constructor.
-newtype MachineTypeAggregatedListItems = MachineTypeAggregatedListItems
-    { _mtaliAddtional :: HashMap Text MachineTypesScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypeAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtaliAddtional'
-machineTypeAggregatedListItems
-    :: HashMap Text MachineTypesScopedList -- ^ 'mtaliAddtional'
-    -> MachineTypeAggregatedListItems
-machineTypeAggregatedListItems pMtaliAddtional_ =
-    MachineTypeAggregatedListItems
-    { _mtaliAddtional = _Coerce # pMtaliAddtional_
-    }
-
--- | [Output Only] Name of the scope containing this set of machine types.
-mtaliAddtional :: Lens' MachineTypeAggregatedListItems (HashMap Text MachineTypesScopedList)
-mtaliAddtional
-  = lens _mtaliAddtional
-      (\ s a -> s{_mtaliAddtional = a})
-      . _Coerce
-
-instance FromJSON MachineTypeAggregatedListItems
-         where
-        parseJSON
-          = withObject "MachineTypeAggregatedListItems"
-              (\ o ->
-                 MachineTypeAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON MachineTypeAggregatedListItems where
-        toJSON = toJSON . _mtaliAddtional
-
--- | [Output Only] A map of scoped disk type lists.
---
--- /See:/ 'diskTypeAggregatedListItems' smart constructor.
-newtype DiskTypeAggregatedListItems = DiskTypeAggregatedListItems
-    { _dtaliAddtional :: HashMap Text DiskTypesScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskTypeAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtaliAddtional'
-diskTypeAggregatedListItems
-    :: HashMap Text DiskTypesScopedList -- ^ 'dtaliAddtional'
-    -> DiskTypeAggregatedListItems
-diskTypeAggregatedListItems pDtaliAddtional_ =
-    DiskTypeAggregatedListItems
-    { _dtaliAddtional = _Coerce # pDtaliAddtional_
-    }
-
--- | [Output Only] Name of the scope containing this set of disk types.
-dtaliAddtional :: Lens' DiskTypeAggregatedListItems (HashMap Text DiskTypesScopedList)
-dtaliAddtional
-  = lens _dtaliAddtional
-      (\ s a -> s{_dtaliAddtional = a})
-      . _Coerce
-
-instance FromJSON DiskTypeAggregatedListItems where
-        parseJSON
-          = withObject "DiskTypeAggregatedListItems"
-              (\ o ->
-                 DiskTypeAggregatedListItems <$> (parseJSONObject o))
-
-instance ToJSON DiskTypeAggregatedListItems where
-        toJSON = toJSON . _dtaliAddtional
-
--- | Contains a list of Firewall resources.
---
--- /See:/ 'firewallList' smart constructor.
-data FirewallList = FirewallList
-    { _flNextPageToken :: !(Maybe Text)
-    , _flKind          :: !Text
-    , _flItems         :: !(Maybe [Firewall])
-    , _flSelfLink      :: !(Maybe Text)
-    , _flId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FirewallList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'flNextPageToken'
---
--- * 'flKind'
---
--- * 'flItems'
---
--- * 'flSelfLink'
---
--- * 'flId'
-firewallList
-    :: FirewallList
-firewallList =
-    FirewallList
-    { _flNextPageToken = Nothing
-    , _flKind = "compute#firewallList"
-    , _flItems = Nothing
-    , _flSelfLink = Nothing
-    , _flId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-flNextPageToken :: Lens' FirewallList (Maybe Text)
-flNextPageToken
-  = lens _flNextPageToken
-      (\ s a -> s{_flNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#firewallList for lists of
--- firewalls.
-flKind :: Lens' FirewallList Text
-flKind = lens _flKind (\ s a -> s{_flKind = a})
-
--- | [Output Only] A list of Firewall resources.
-flItems :: Lens' FirewallList [Firewall]
-flItems
-  = lens _flItems (\ s a -> s{_flItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-flSelfLink :: Lens' FirewallList (Maybe Text)
-flSelfLink
-  = lens _flSelfLink (\ s a -> s{_flSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-flId :: Lens' FirewallList (Maybe Text)
-flId = lens _flId (\ s a -> s{_flId = a})
-
-instance FromJSON FirewallList where
-        parseJSON
-          = withObject "FirewallList"
-              (\ o ->
-                 FirewallList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#firewallList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON FirewallList where
-        toJSON FirewallList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _flNextPageToken,
-                  Just ("kind" .= _flKind), ("items" .=) <$> _flItems,
-                  ("selfLink" .=) <$> _flSelfLink,
-                  ("id" .=) <$> _flId])
-
--- | [Output Only] Informational warning which replaces the list of instances
--- when the list is empty.
---
--- /See:/ 'instancesScopedListWarning' smart constructor.
-data InstancesScopedListWarning = InstancesScopedListWarning
-    { _islwData    :: !(Maybe [InstancesScopedListWarningDataItem])
-    , _islwCode    :: !(Maybe InstancesScopedListWarningCode)
-    , _islwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstancesScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'islwData'
---
--- * 'islwCode'
---
--- * 'islwMessage'
-instancesScopedListWarning
-    :: InstancesScopedListWarning
-instancesScopedListWarning =
-    InstancesScopedListWarning
-    { _islwData = Nothing
-    , _islwCode = Nothing
-    , _islwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-islwData :: Lens' InstancesScopedListWarning [InstancesScopedListWarningDataItem]
-islwData
-  = lens _islwData (\ s a -> s{_islwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-islwCode :: Lens' InstancesScopedListWarning (Maybe InstancesScopedListWarningCode)
-islwCode = lens _islwCode (\ s a -> s{_islwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-islwMessage :: Lens' InstancesScopedListWarning (Maybe Text)
-islwMessage
-  = lens _islwMessage (\ s a -> s{_islwMessage = a})
-
-instance FromJSON InstancesScopedListWarning where
-        parseJSON
-          = withObject "InstancesScopedListWarning"
-              (\ o ->
-                 InstancesScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON InstancesScopedListWarning where
-        toJSON InstancesScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _islwData,
-                  ("code" .=) <$> _islwCode,
-                  ("message" .=) <$> _islwMessage])
-
--- | A list of InstanceGroup resources.
---
--- /See:/ 'instanceGroupList' smart constructor.
-data InstanceGroupList = InstanceGroupList
-    { _iglNextPageToken :: !(Maybe Text)
-    , _iglKind          :: !Text
-    , _iglItems         :: !(Maybe [InstanceGroup])
-    , _iglSelfLink      :: !(Maybe Text)
-    , _iglId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iglNextPageToken'
---
--- * 'iglKind'
---
--- * 'iglItems'
---
--- * 'iglSelfLink'
---
--- * 'iglId'
-instanceGroupList
-    :: InstanceGroupList
-instanceGroupList =
-    InstanceGroupList
-    { _iglNextPageToken = Nothing
-    , _iglKind = "compute#instanceGroupList"
-    , _iglItems = Nothing
-    , _iglSelfLink = Nothing
-    , _iglId = Nothing
-    }
-
--- | [Output Only] A token that is used to continue a truncated list request.
-iglNextPageToken :: Lens' InstanceGroupList (Maybe Text)
-iglNextPageToken
-  = lens _iglNextPageToken
-      (\ s a -> s{_iglNextPageToken = a})
-
--- | [Output Only] The resource type, which is always
--- compute#instanceGroupList for instance group lists.
-iglKind :: Lens' InstanceGroupList Text
-iglKind = lens _iglKind (\ s a -> s{_iglKind = a})
-
--- | A list of instance groups.
-iglItems :: Lens' InstanceGroupList [InstanceGroup]
-iglItems
-  = lens _iglItems (\ s a -> s{_iglItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The URL for this resource type. The server generates this
--- URL.
-iglSelfLink :: Lens' InstanceGroupList (Maybe Text)
-iglSelfLink
-  = lens _iglSelfLink (\ s a -> s{_iglSelfLink = a})
-
--- | [Output Only] A unique identifier for this list of instance groups. The
--- server generates this identifier.
-iglId :: Lens' InstanceGroupList (Maybe Text)
-iglId = lens _iglId (\ s a -> s{_iglId = a})
-
-instance FromJSON InstanceGroupList where
-        parseJSON
-          = withObject "InstanceGroupList"
-              (\ o ->
-                 InstanceGroupList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#instanceGroupList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceGroupList where
-        toJSON InstanceGroupList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _iglNextPageToken,
-                  Just ("kind" .= _iglKind),
-                  ("items" .=) <$> _iglItems,
-                  ("selfLink" .=) <$> _iglSelfLink,
-                  ("id" .=) <$> _iglId])
-
--- | A map of scoped autoscaler lists.
---
--- /See:/ 'autoscalerAggregatedListItems' smart constructor.
-newtype AutoscalerAggregatedListItems = AutoscalerAggregatedListItems
-    { _aaliAddtional :: HashMap Text AutoscalersScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalerAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaliAddtional'
-autoscalerAggregatedListItems
-    :: HashMap Text AutoscalersScopedList -- ^ 'aaliAddtional'
-    -> AutoscalerAggregatedListItems
-autoscalerAggregatedListItems pAaliAddtional_ =
-    AutoscalerAggregatedListItems
-    { _aaliAddtional = _Coerce # pAaliAddtional_
-    }
-
--- | Name of the scope containing this set of autoscalers.
-aaliAddtional :: Lens' AutoscalerAggregatedListItems (HashMap Text AutoscalersScopedList)
-aaliAddtional
-  = lens _aaliAddtional
-      (\ s a -> s{_aaliAddtional = a})
-      . _Coerce
-
-instance FromJSON AutoscalerAggregatedListItems where
-        parseJSON
-          = withObject "AutoscalerAggregatedListItems"
-              (\ o ->
-                 AutoscalerAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON AutoscalerAggregatedListItems where
-        toJSON = toJSON . _aaliAddtional
-
---
--- /See:/ 'instanceGroupManagersSetInstanceTemplateRequest' smart constructor.
-newtype InstanceGroupManagersSetInstanceTemplateRequest = InstanceGroupManagersSetInstanceTemplateRequest
-    { _igmsitrInstanceTemplate :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersSetInstanceTemplateRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmsitrInstanceTemplate'
-instanceGroupManagersSetInstanceTemplateRequest
-    :: InstanceGroupManagersSetInstanceTemplateRequest
-instanceGroupManagersSetInstanceTemplateRequest =
-    InstanceGroupManagersSetInstanceTemplateRequest
-    { _igmsitrInstanceTemplate = Nothing
-    }
-
--- | The URL of the instance template that is specified for this managed
--- instance group. The group uses this template to create all new instances
--- in the managed instance group.
-igmsitrInstanceTemplate :: Lens' InstanceGroupManagersSetInstanceTemplateRequest (Maybe Text)
-igmsitrInstanceTemplate
-  = lens _igmsitrInstanceTemplate
-      (\ s a -> s{_igmsitrInstanceTemplate = a})
-
-instance FromJSON
-         InstanceGroupManagersSetInstanceTemplateRequest where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersSetInstanceTemplateRequest"
-              (\ o ->
-                 InstanceGroupManagersSetInstanceTemplateRequest <$>
-                   (o .:? "instanceTemplate"))
-
-instance ToJSON
-         InstanceGroupManagersSetInstanceTemplateRequest where
-        toJSON
-          InstanceGroupManagersSetInstanceTemplateRequest{..}
-          = object
-              (catMaybes
-                 [("instanceTemplate" .=) <$>
-                    _igmsitrInstanceTemplate])
-
--- | Deprecation status for a public resource.
---
--- /See:/ 'deprecationStatus' smart constructor.
-data DeprecationStatus = DeprecationStatus
-    { _dsState       :: !(Maybe DeprecationStatusState)
-    , _dsDeleted     :: !(Maybe Text)
-    , _dsReplacement :: !(Maybe Text)
-    , _dsObsolete    :: !(Maybe Text)
-    , _dsDeprecated  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeprecationStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsState'
---
--- * 'dsDeleted'
---
--- * 'dsReplacement'
---
--- * 'dsObsolete'
---
--- * 'dsDeprecated'
-deprecationStatus
-    :: DeprecationStatus
-deprecationStatus =
-    DeprecationStatus
-    { _dsState = Nothing
-    , _dsDeleted = Nothing
-    , _dsReplacement = Nothing
-    , _dsObsolete = Nothing
-    , _dsDeprecated = Nothing
-    }
-
--- | The deprecation state of this resource. This can be DEPRECATED,
--- OBSOLETE, or DELETED. Operations which create a new resource using a
--- DEPRECATED resource will return successfully, but with a warning
--- indicating the deprecated resource and recommending its replacement.
--- Operations which use OBSOLETE or DELETED resources will be rejected and
--- result in an error.
-dsState :: Lens' DeprecationStatus (Maybe DeprecationStatusState)
-dsState = lens _dsState (\ s a -> s{_dsState = a})
-
--- | An optional RFC3339 timestamp on or after which the deprecation state of
--- this resource will be changed to DELETED.
-dsDeleted :: Lens' DeprecationStatus (Maybe Text)
-dsDeleted
-  = lens _dsDeleted (\ s a -> s{_dsDeleted = a})
-
--- | The URL of the suggested replacement for a deprecated resource. The
--- suggested replacement resource must be the same kind of resource as the
--- deprecated resource.
-dsReplacement :: Lens' DeprecationStatus (Maybe Text)
-dsReplacement
-  = lens _dsReplacement
-      (\ s a -> s{_dsReplacement = a})
-
--- | An optional RFC3339 timestamp on or after which the deprecation state of
--- this resource will be changed to OBSOLETE.
-dsObsolete :: Lens' DeprecationStatus (Maybe Text)
-dsObsolete
-  = lens _dsObsolete (\ s a -> s{_dsObsolete = a})
-
--- | An optional RFC3339 timestamp on or after which the deprecation state of
--- this resource will be changed to DEPRECATED.
-dsDeprecated :: Lens' DeprecationStatus (Maybe Text)
-dsDeprecated
-  = lens _dsDeprecated (\ s a -> s{_dsDeprecated = a})
-
-instance FromJSON DeprecationStatus where
-        parseJSON
-          = withObject "DeprecationStatus"
-              (\ o ->
-                 DeprecationStatus <$>
-                   (o .:? "state") <*> (o .:? "deleted") <*>
-                     (o .:? "replacement")
-                     <*> (o .:? "obsolete")
-                     <*> (o .:? "deprecated"))
-
-instance ToJSON DeprecationStatus where
-        toJSON DeprecationStatus{..}
-          = object
-              (catMaybes
-                 [("state" .=) <$> _dsState,
-                  ("deleted" .=) <$> _dsDeleted,
-                  ("replacement" .=) <$> _dsReplacement,
-                  ("obsolete" .=) <$> _dsObsolete,
-                  ("deprecated" .=) <$> _dsDeprecated])
-
--- | A persistent disk snapshot resource.
---
--- /See:/ 'snapshot' smart constructor.
-data Snapshot = Snapshot
-    { _sStorageBytesStatus :: !(Maybe SnapshotStorageBytesStatus)
-    , _sStatus             :: !(Maybe SnapshotStatus)
-    , _sDiskSizeGb         :: !(Maybe (Textual Int64))
-    , _sSourceDiskId       :: !(Maybe Text)
-    , _sKind               :: !Text
-    , _sStorageBytes       :: !(Maybe (Textual Int64))
-    , _sSelfLink           :: !(Maybe Text)
-    , _sName               :: !(Maybe Text)
-    , _sCreationTimestamp  :: !(Maybe Text)
-    , _sId                 :: !(Maybe (Textual Word64))
-    , _sLicenses           :: !(Maybe [Text])
-    , _sSourceDisk         :: !(Maybe Text)
-    , _sDescription        :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Snapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sStorageBytesStatus'
---
--- * 'sStatus'
---
--- * 'sDiskSizeGb'
---
--- * 'sSourceDiskId'
---
--- * 'sKind'
---
--- * 'sStorageBytes'
---
--- * 'sSelfLink'
---
--- * 'sName'
---
--- * 'sCreationTimestamp'
---
--- * 'sId'
---
--- * 'sLicenses'
---
--- * 'sSourceDisk'
---
--- * 'sDescription'
-snapshot
-    :: Snapshot
-snapshot =
-    Snapshot
-    { _sStorageBytesStatus = Nothing
-    , _sStatus = Nothing
-    , _sDiskSizeGb = Nothing
-    , _sSourceDiskId = Nothing
-    , _sKind = "compute#snapshot"
-    , _sStorageBytes = Nothing
-    , _sSelfLink = Nothing
-    , _sName = Nothing
-    , _sCreationTimestamp = Nothing
-    , _sId = Nothing
-    , _sLicenses = Nothing
-    , _sSourceDisk = Nothing
-    , _sDescription = Nothing
-    }
-
--- | [Output Only] An indicator whether storageBytes is in a stable state or
--- it is being adjusted as a result of shared storage reallocation.
-sStorageBytesStatus :: Lens' Snapshot (Maybe SnapshotStorageBytesStatus)
-sStorageBytesStatus
-  = lens _sStorageBytesStatus
-      (\ s a -> s{_sStorageBytesStatus = a})
-
--- | [Output Only] The status of the snapshot.
-sStatus :: Lens' Snapshot (Maybe SnapshotStatus)
-sStatus = lens _sStatus (\ s a -> s{_sStatus = a})
-
--- | [Output Only] Size of the snapshot, specified in GB.
-sDiskSizeGb :: Lens' Snapshot (Maybe Int64)
-sDiskSizeGb
-  = lens _sDiskSizeGb (\ s a -> s{_sDiskSizeGb = a}) .
-      mapping _Coerce
-
--- | [Output Only] The ID value of the disk used to create this snapshot.
--- This value may be used to determine whether the snapshot was taken from
--- the current or a previous instance of a given disk name.
-sSourceDiskId :: Lens' Snapshot (Maybe Text)
-sSourceDiskId
-  = lens _sSourceDiskId
-      (\ s a -> s{_sSourceDiskId = a})
-
--- | [Output Only] Type of the resource. Always compute#snapshot for Snapshot
--- resources.
-sKind :: Lens' Snapshot Text
-sKind = lens _sKind (\ s a -> s{_sKind = a})
-
--- | [Output Only] A size of the the storage used by the snapshot. As
--- snapshots share storage, this number is expected to change with snapshot
--- creation\/deletion.
-sStorageBytes :: Lens' Snapshot (Maybe Int64)
-sStorageBytes
-  = lens _sStorageBytes
-      (\ s a -> s{_sStorageBytes = a})
-      . mapping _Coerce
-
--- | [Output Only] Server-defined URL for the resource.
-sSelfLink :: Lens' Snapshot (Maybe Text)
-sSelfLink
-  = lens _sSelfLink (\ s a -> s{_sSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-sName :: Lens' Snapshot (Maybe Text)
-sName = lens _sName (\ s a -> s{_sName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-sCreationTimestamp :: Lens' Snapshot (Maybe Text)
-sCreationTimestamp
-  = lens _sCreationTimestamp
-      (\ s a -> s{_sCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-sId :: Lens' Snapshot (Maybe Word64)
-sId
-  = lens _sId (\ s a -> s{_sId = a}) . mapping _Coerce
-
--- | Public visible licenses.
-sLicenses :: Lens' Snapshot [Text]
-sLicenses
-  = lens _sLicenses (\ s a -> s{_sLicenses = a}) .
-      _Default
-      . _Coerce
-
--- | The source disk used to create this snapshot.
-sSourceDisk :: Lens' Snapshot (Maybe Text)
-sSourceDisk
-  = lens _sSourceDisk (\ s a -> s{_sSourceDisk = a})
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-sDescription :: Lens' Snapshot (Maybe Text)
-sDescription
-  = lens _sDescription (\ s a -> s{_sDescription = a})
-
-instance FromJSON Snapshot where
-        parseJSON
-          = withObject "Snapshot"
-              (\ o ->
-                 Snapshot <$>
-                   (o .:? "storageBytesStatus") <*> (o .:? "status") <*>
-                     (o .:? "diskSizeGb")
-                     <*> (o .:? "sourceDiskId")
-                     <*> (o .:? "kind" .!= "compute#snapshot")
-                     <*> (o .:? "storageBytes")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "licenses" .!= mempty)
-                     <*> (o .:? "sourceDisk")
-                     <*> (o .:? "description"))
-
-instance ToJSON Snapshot where
-        toJSON Snapshot{..}
-          = object
-              (catMaybes
-                 [("storageBytesStatus" .=) <$> _sStorageBytesStatus,
-                  ("status" .=) <$> _sStatus,
-                  ("diskSizeGb" .=) <$> _sDiskSizeGb,
-                  ("sourceDiskId" .=) <$> _sSourceDiskId,
-                  Just ("kind" .= _sKind),
-                  ("storageBytes" .=) <$> _sStorageBytes,
-                  ("selfLink" .=) <$> _sSelfLink,
-                  ("name" .=) <$> _sName,
-                  ("creationTimestamp" .=) <$> _sCreationTimestamp,
-                  ("id" .=) <$> _sId, ("licenses" .=) <$> _sLicenses,
-                  ("sourceDisk" .=) <$> _sSourceDisk,
-                  ("description" .=) <$> _sDescription])
-
--- | Custom utilization metric policy.
---
--- /See:/ 'autoscalingPolicyCustomMetricUtilization' smart constructor.
-data AutoscalingPolicyCustomMetricUtilization = AutoscalingPolicyCustomMetricUtilization
-    { _apcmuUtilizationTarget     :: !(Maybe (Textual Double))
-    , _apcmuMetric                :: !(Maybe Text)
-    , _apcmuUtilizationTargetType :: !(Maybe AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalingPolicyCustomMetricUtilization' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'apcmuUtilizationTarget'
---
--- * 'apcmuMetric'
---
--- * 'apcmuUtilizationTargetType'
-autoscalingPolicyCustomMetricUtilization
-    :: AutoscalingPolicyCustomMetricUtilization
-autoscalingPolicyCustomMetricUtilization =
-    AutoscalingPolicyCustomMetricUtilization
-    { _apcmuUtilizationTarget = Nothing
-    , _apcmuMetric = Nothing
-    , _apcmuUtilizationTargetType = Nothing
-    }
-
--- | Target value of the metric which Autoscaler should maintain. Must be a
--- positive value.
-apcmuUtilizationTarget :: Lens' AutoscalingPolicyCustomMetricUtilization (Maybe Double)
-apcmuUtilizationTarget
-  = lens _apcmuUtilizationTarget
-      (\ s a -> s{_apcmuUtilizationTarget = a})
-      . mapping _Coerce
-
--- | Identifier of the metric. It should be a Cloud Monitoring metric. The
--- metric can not have negative values. The metric should be an utilization
--- metric (increasing number of VMs handling requests x times should reduce
--- average value of the metric roughly x times). For example you could use:
--- compute.googleapis.com\/instance\/network\/received_bytes_count.
-apcmuMetric :: Lens' AutoscalingPolicyCustomMetricUtilization (Maybe Text)
-apcmuMetric
-  = lens _apcmuMetric (\ s a -> s{_apcmuMetric = a})
-
--- | Defines type in which utilization_target is expressed.
-apcmuUtilizationTargetType :: Lens' AutoscalingPolicyCustomMetricUtilization (Maybe AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType)
-apcmuUtilizationTargetType
-  = lens _apcmuUtilizationTargetType
-      (\ s a -> s{_apcmuUtilizationTargetType = a})
-
-instance FromJSON
-         AutoscalingPolicyCustomMetricUtilization where
-        parseJSON
-          = withObject
-              "AutoscalingPolicyCustomMetricUtilization"
-              (\ o ->
-                 AutoscalingPolicyCustomMetricUtilization <$>
-                   (o .:? "utilizationTarget") <*> (o .:? "metric") <*>
-                     (o .:? "utilizationTargetType"))
-
-instance ToJSON
-         AutoscalingPolicyCustomMetricUtilization where
-        toJSON AutoscalingPolicyCustomMetricUtilization{..}
-          = object
-              (catMaybes
-                 [("utilizationTarget" .=) <$>
-                    _apcmuUtilizationTarget,
-                  ("metric" .=) <$> _apcmuMetric,
-                  ("utilizationTargetType" .=) <$>
-                    _apcmuUtilizationTargetType])
-
--- | Contains a list of ForwardingRule resources.
---
--- /See:/ 'forwardingRuleList' smart constructor.
-data ForwardingRuleList = ForwardingRuleList
-    { _frlNextPageToken :: !(Maybe Text)
-    , _frlKind          :: !Text
-    , _frlItems         :: !(Maybe [ForwardingRule])
-    , _frlSelfLink      :: !(Maybe Text)
-    , _frlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRuleList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frlNextPageToken'
---
--- * 'frlKind'
---
--- * 'frlItems'
---
--- * 'frlSelfLink'
---
--- * 'frlId'
-forwardingRuleList
-    :: ForwardingRuleList
-forwardingRuleList =
-    ForwardingRuleList
-    { _frlNextPageToken = Nothing
-    , _frlKind = "compute#forwardingRuleList"
-    , _frlItems = Nothing
-    , _frlSelfLink = Nothing
-    , _frlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-frlNextPageToken :: Lens' ForwardingRuleList (Maybe Text)
-frlNextPageToken
-  = lens _frlNextPageToken
-      (\ s a -> s{_frlNextPageToken = a})
-
--- | Type of resource.
-frlKind :: Lens' ForwardingRuleList Text
-frlKind = lens _frlKind (\ s a -> s{_frlKind = a})
-
--- | A list of ForwardingRule resources.
-frlItems :: Lens' ForwardingRuleList [ForwardingRule]
-frlItems
-  = lens _frlItems (\ s a -> s{_frlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-frlSelfLink :: Lens' ForwardingRuleList (Maybe Text)
-frlSelfLink
-  = lens _frlSelfLink (\ s a -> s{_frlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Set by the server.
-frlId :: Lens' ForwardingRuleList (Maybe Text)
-frlId = lens _frlId (\ s a -> s{_frlId = a})
-
-instance FromJSON ForwardingRuleList where
-        parseJSON
-          = withObject "ForwardingRuleList"
-              (\ o ->
-                 ForwardingRuleList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#forwardingRuleList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON ForwardingRuleList where
-        toJSON ForwardingRuleList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _frlNextPageToken,
-                  Just ("kind" .= _frlKind),
-                  ("items" .=) <$> _frlItems,
-                  ("selfLink" .=) <$> _frlSelfLink,
-                  ("id" .=) <$> _frlId])
-
---
--- /See:/ 'vpnTunnelsScopedList' smart constructor.
-data VPNTunnelsScopedList = VPNTunnelsScopedList
-    { _vtslVPNTunnels :: !(Maybe [VPNTunnel])
-    , _vtslWarning    :: !(Maybe VPNTunnelsScopedListWarning)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnelsScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtslVPNTunnels'
---
--- * 'vtslWarning'
-vpnTunnelsScopedList
-    :: VPNTunnelsScopedList
-vpnTunnelsScopedList =
-    VPNTunnelsScopedList
-    { _vtslVPNTunnels = Nothing
-    , _vtslWarning = Nothing
-    }
-
--- | List of vpn tunnels contained in this scope.
-vtslVPNTunnels :: Lens' VPNTunnelsScopedList [VPNTunnel]
-vtslVPNTunnels
-  = lens _vtslVPNTunnels
-      (\ s a -> s{_vtslVPNTunnels = a})
-      . _Default
-      . _Coerce
-
--- | Informational warning which replaces the list of addresses when the list
--- is empty.
-vtslWarning :: Lens' VPNTunnelsScopedList (Maybe VPNTunnelsScopedListWarning)
-vtslWarning
-  = lens _vtslWarning (\ s a -> s{_vtslWarning = a})
-
-instance FromJSON VPNTunnelsScopedList where
-        parseJSON
-          = withObject "VPNTunnelsScopedList"
-              (\ o ->
-                 VPNTunnelsScopedList <$>
-                   (o .:? "vpnTunnels" .!= mempty) <*>
-                     (o .:? "warning"))
-
-instance ToJSON VPNTunnelsScopedList where
-        toJSON VPNTunnelsScopedList{..}
-          = object
-              (catMaybes
-                 [("vpnTunnels" .=) <$> _vtslVPNTunnels,
-                  ("warning" .=) <$> _vtslWarning])
-
---
--- /See:/ 'instanceGroupsSetNamedPortsRequest' smart constructor.
-data InstanceGroupsSetNamedPortsRequest = InstanceGroupsSetNamedPortsRequest
-    { _igsnprFingerprint :: !(Maybe (Textual Word8))
-    , _igsnprNamedPorts  :: !(Maybe [NamedPort])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsSetNamedPortsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igsnprFingerprint'
---
--- * 'igsnprNamedPorts'
-instanceGroupsSetNamedPortsRequest
-    :: InstanceGroupsSetNamedPortsRequest
-instanceGroupsSetNamedPortsRequest =
-    InstanceGroupsSetNamedPortsRequest
-    { _igsnprFingerprint = Nothing
-    , _igsnprNamedPorts = Nothing
-    }
-
--- | The fingerprint of the named ports information for this instance group.
--- Use this optional property to prevent conflicts when multiple users
--- change the named ports settings concurrently. Obtain the fingerprint
--- with the instanceGroups.get method. Then, include the fingerprint in
--- your request to ensure that you do not overwrite changes that were
--- applied from another concurrent request.
-igsnprFingerprint :: Lens' InstanceGroupsSetNamedPortsRequest (Maybe Word8)
-igsnprFingerprint
-  = lens _igsnprFingerprint
-      (\ s a -> s{_igsnprFingerprint = a})
-      . mapping _Coerce
-
--- | The list of named ports to set for this instance group.
-igsnprNamedPorts :: Lens' InstanceGroupsSetNamedPortsRequest [NamedPort]
-igsnprNamedPorts
-  = lens _igsnprNamedPorts
-      (\ s a -> s{_igsnprNamedPorts = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON InstanceGroupsSetNamedPortsRequest
-         where
-        parseJSON
-          = withObject "InstanceGroupsSetNamedPortsRequest"
-              (\ o ->
-                 InstanceGroupsSetNamedPortsRequest <$>
-                   (o .:? "fingerprint") <*>
-                     (o .:? "namedPorts" .!= mempty))
-
-instance ToJSON InstanceGroupsSetNamedPortsRequest
-         where
-        toJSON InstanceGroupsSetNamedPortsRequest{..}
-          = object
-              (catMaybes
-                 [("fingerprint" .=) <$> _igsnprFingerprint,
-                  ("namedPorts" .=) <$> _igsnprNamedPorts])
-
--- | Contains a list of Operation resources.
---
--- /See:/ 'operationList' smart constructor.
-data OperationList = OperationList
-    { _olNextPageToken :: !(Maybe Text)
-    , _olKind          :: !Text
-    , _olItems         :: !(Maybe [Operation])
-    , _olSelfLink      :: !(Maybe Text)
-    , _olId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'olNextPageToken'
---
--- * 'olKind'
---
--- * 'olItems'
---
--- * 'olSelfLink'
---
--- * 'olId'
-operationList
-    :: OperationList
-operationList =
-    OperationList
-    { _olNextPageToken = Nothing
-    , _olKind = "compute#operationList"
-    , _olItems = Nothing
-    , _olSelfLink = Nothing
-    , _olId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncate.
-olNextPageToken :: Lens' OperationList (Maybe Text)
-olNextPageToken
-  = lens _olNextPageToken
-      (\ s a -> s{_olNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#operations for Operations
--- resource.
-olKind :: Lens' OperationList Text
-olKind = lens _olKind (\ s a -> s{_olKind = a})
-
--- | [Output Only] The Operation resources.
-olItems :: Lens' OperationList [Operation]
-olItems
-  = lens _olItems (\ s a -> s{_olItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-olSelfLink :: Lens' OperationList (Maybe Text)
-olSelfLink
-  = lens _olSelfLink (\ s a -> s{_olSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-olId :: Lens' OperationList (Maybe Text)
-olId = lens _olId (\ s a -> s{_olId = a})
-
-instance FromJSON OperationList where
-        parseJSON
-          = withObject "OperationList"
-              (\ o ->
-                 OperationList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#operationList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON OperationList where
-        toJSON OperationList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _olNextPageToken,
-                  Just ("kind" .= _olKind), ("items" .=) <$> _olItems,
-                  ("selfLink" .=) <$> _olSelfLink,
-                  ("id" .=) <$> _olId])
-
--- | A list of Disk resources.
---
--- /See:/ 'diskList' smart constructor.
-data DiskList = DiskList
-    { _dlNextPageToken :: !(Maybe Text)
-    , _dlKind          :: !Text
-    , _dlItems         :: !(Maybe [Disk])
-    , _dlSelfLink      :: !(Maybe Text)
-    , _dlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlNextPageToken'
---
--- * 'dlKind'
---
--- * 'dlItems'
---
--- * 'dlSelfLink'
---
--- * 'dlId'
-diskList
-    :: DiskList
-diskList =
-    DiskList
-    { _dlNextPageToken = Nothing
-    , _dlKind = "compute#diskList"
-    , _dlItems = Nothing
-    , _dlSelfLink = Nothing
-    , _dlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-dlNextPageToken :: Lens' DiskList (Maybe Text)
-dlNextPageToken
-  = lens _dlNextPageToken
-      (\ s a -> s{_dlNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#diskList for lists of
--- disks.
-dlKind :: Lens' DiskList Text
-dlKind = lens _dlKind (\ s a -> s{_dlKind = a})
-
--- | [Output Only] A list of persistent disks.
-dlItems :: Lens' DiskList [Disk]
-dlItems
-  = lens _dlItems (\ s a -> s{_dlItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-dlSelfLink :: Lens' DiskList (Maybe Text)
-dlSelfLink
-  = lens _dlSelfLink (\ s a -> s{_dlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-dlId :: Lens' DiskList (Maybe Text)
-dlId = lens _dlId (\ s a -> s{_dlId = a})
-
-instance FromJSON DiskList where
-        parseJSON
-          = withObject "DiskList"
-              (\ o ->
-                 DiskList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#diskList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON DiskList where
-        toJSON DiskList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _dlNextPageToken,
-                  Just ("kind" .= _dlKind), ("items" .=) <$> _dlItems,
-                  ("selfLink" .=) <$> _dlSelfLink,
-                  ("id" .=) <$> _dlId])
-
---
--- /See:/ 'targetPoolsAddInstanceRequest' smart constructor.
-newtype TargetPoolsAddInstanceRequest = TargetPoolsAddInstanceRequest
-    { _tpairInstances :: Maybe [InstanceReference]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsAddInstanceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpairInstances'
-targetPoolsAddInstanceRequest
-    :: TargetPoolsAddInstanceRequest
-targetPoolsAddInstanceRequest =
-    TargetPoolsAddInstanceRequest
-    { _tpairInstances = Nothing
-    }
-
--- | URLs of the instances to be added to targetPool.
-tpairInstances :: Lens' TargetPoolsAddInstanceRequest [InstanceReference]
-tpairInstances
-  = lens _tpairInstances
-      (\ s a -> s{_tpairInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPoolsAddInstanceRequest where
-        parseJSON
-          = withObject "TargetPoolsAddInstanceRequest"
-              (\ o ->
-                 TargetPoolsAddInstanceRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON TargetPoolsAddInstanceRequest where
-        toJSON TargetPoolsAddInstanceRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _tpairInstances])
-
---
--- /See:/ 'instanceGroupsAddInstancesRequest' smart constructor.
-newtype InstanceGroupsAddInstancesRequest = InstanceGroupsAddInstancesRequest
-    { _igairInstances :: Maybe [InstanceReference]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsAddInstancesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igairInstances'
-instanceGroupsAddInstancesRequest
-    :: InstanceGroupsAddInstancesRequest
-instanceGroupsAddInstancesRequest =
-    InstanceGroupsAddInstancesRequest
-    { _igairInstances = Nothing
-    }
-
--- | The list of instances to add to the instance group.
-igairInstances :: Lens' InstanceGroupsAddInstancesRequest [InstanceReference]
-igairInstances
-  = lens _igairInstances
-      (\ s a -> s{_igairInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON InstanceGroupsAddInstancesRequest
-         where
-        parseJSON
-          = withObject "InstanceGroupsAddInstancesRequest"
-              (\ o ->
-                 InstanceGroupsAddInstancesRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON InstanceGroupsAddInstancesRequest
-         where
-        toJSON InstanceGroupsAddInstancesRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _igairInstances])
-
--- | [Output Only] A list of managed instance groups.
---
--- /See:/ 'instanceGroupManagerList' smart constructor.
-data InstanceGroupManagerList = InstanceGroupManagerList
-    { _igmlNextPageToken :: !(Maybe Text)
-    , _igmlKind          :: !Text
-    , _igmlItems         :: !(Maybe [InstanceGroupManager])
-    , _igmlSelfLink      :: !(Maybe Text)
-    , _igmlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagerList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmlNextPageToken'
---
--- * 'igmlKind'
---
--- * 'igmlItems'
---
--- * 'igmlSelfLink'
---
--- * 'igmlId'
-instanceGroupManagerList
-    :: InstanceGroupManagerList
-instanceGroupManagerList =
-    InstanceGroupManagerList
-    { _igmlNextPageToken = Nothing
-    , _igmlKind = "compute#instanceGroupManagerList"
-    , _igmlItems = Nothing
-    , _igmlSelfLink = Nothing
-    , _igmlId = Nothing
-    }
-
--- | [Output Only] A token that is used to continue a truncated list request.
-igmlNextPageToken :: Lens' InstanceGroupManagerList (Maybe Text)
-igmlNextPageToken
-  = lens _igmlNextPageToken
-      (\ s a -> s{_igmlNextPageToken = a})
-
--- | [Output Only] The resource type, which is always
--- compute#instanceGroupManagerList for a list of managed instance groups.
-igmlKind :: Lens' InstanceGroupManagerList Text
-igmlKind = lens _igmlKind (\ s a -> s{_igmlKind = a})
-
--- | [Output Only] A list of managed instance groups.
-igmlItems :: Lens' InstanceGroupManagerList [InstanceGroupManager]
-igmlItems
-  = lens _igmlItems (\ s a -> s{_igmlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The URL for this resource type. The server generates this
--- URL.
-igmlSelfLink :: Lens' InstanceGroupManagerList (Maybe Text)
-igmlSelfLink
-  = lens _igmlSelfLink (\ s a -> s{_igmlSelfLink = a})
-
--- | [Output Only] A unique identifier for this resource type. The server
--- generates this identifier.
-igmlId :: Lens' InstanceGroupManagerList (Maybe Text)
-igmlId = lens _igmlId (\ s a -> s{_igmlId = a})
-
-instance FromJSON InstanceGroupManagerList where
-        parseJSON
-          = withObject "InstanceGroupManagerList"
-              (\ o ->
-                 InstanceGroupManagerList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#instanceGroupManagerList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceGroupManagerList where
-        toJSON InstanceGroupManagerList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _igmlNextPageToken,
-                  Just ("kind" .= _igmlKind),
-                  ("items" .=) <$> _igmlItems,
-                  ("selfLink" .=) <$> _igmlSelfLink,
-                  ("id" .=) <$> _igmlId])
-
--- | An Image resource.
---
--- /See:/ 'image' smart constructor.
-data Image = Image
-    { _iStatus            :: !(Maybe ImageStatus)
-    , _iDiskSizeGb        :: !(Maybe (Textual Int64))
-    , _iSourceType        :: !ImageSourceType
-    , _iSourceDiskId      :: !(Maybe Text)
-    , _iKind              :: !Text
-    , _iArchiveSizeBytes  :: !(Maybe (Textual Int64))
-    , _iRawDisk           :: !(Maybe ImageRawDisk)
-    , _iSelfLink          :: !(Maybe Text)
-    , _iName              :: !(Maybe Text)
-    , _iCreationTimestamp :: !(Maybe Text)
-    , _iId                :: !(Maybe (Textual Word64))
-    , _iLicenses          :: !(Maybe [Text])
-    , _iSourceDisk        :: !(Maybe Text)
-    , _iDescription       :: !(Maybe Text)
-    , _iDeprecated        :: !(Maybe DeprecationStatus)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Image' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iStatus'
---
--- * 'iDiskSizeGb'
---
--- * 'iSourceType'
---
--- * 'iSourceDiskId'
---
--- * 'iKind'
---
--- * 'iArchiveSizeBytes'
---
--- * 'iRawDisk'
---
--- * 'iSelfLink'
---
--- * 'iName'
---
--- * 'iCreationTimestamp'
---
--- * 'iId'
---
--- * 'iLicenses'
---
--- * 'iSourceDisk'
---
--- * 'iDescription'
---
--- * 'iDeprecated'
-image
-    :: Image
-image =
-    Image
-    { _iStatus = Nothing
-    , _iDiskSizeGb = Nothing
-    , _iSourceType = Raw
-    , _iSourceDiskId = Nothing
-    , _iKind = "compute#image"
-    , _iArchiveSizeBytes = Nothing
-    , _iRawDisk = Nothing
-    , _iSelfLink = Nothing
-    , _iName = Nothing
-    , _iCreationTimestamp = Nothing
-    , _iId = Nothing
-    , _iLicenses = Nothing
-    , _iSourceDisk = Nothing
-    , _iDescription = Nothing
-    , _iDeprecated = Nothing
-    }
-
--- | [Output Only] The status of the image. An image can be used to create
--- other resources, such as instances, only after the image has been
--- successfully created and the status is set to READY. Possible values are
--- FAILED, PENDING, or READY.
-iStatus :: Lens' Image (Maybe ImageStatus)
-iStatus = lens _iStatus (\ s a -> s{_iStatus = a})
-
--- | Size of the image when restored onto a persistent disk (in GB).
-iDiskSizeGb :: Lens' Image (Maybe Int64)
-iDiskSizeGb
-  = lens _iDiskSizeGb (\ s a -> s{_iDiskSizeGb = a}) .
-      mapping _Coerce
-
--- | The type of the image used to create this disk. The default and only
--- value is RAW
-iSourceType :: Lens' Image ImageSourceType
-iSourceType
-  = lens _iSourceType (\ s a -> s{_iSourceType = a})
-
--- | The ID value of the disk used to create this image. This value may be
--- used to determine whether the image was taken from the current or a
--- previous instance of a given disk name.
-iSourceDiskId :: Lens' Image (Maybe Text)
-iSourceDiskId
-  = lens _iSourceDiskId
-      (\ s a -> s{_iSourceDiskId = a})
-
--- | [Output Only] Type of the resource. Always compute#image for images.
-iKind :: Lens' Image Text
-iKind = lens _iKind (\ s a -> s{_iKind = a})
-
--- | Size of the image tar.gz archive stored in Google Cloud Storage (in
--- bytes).
-iArchiveSizeBytes :: Lens' Image (Maybe Int64)
-iArchiveSizeBytes
-  = lens _iArchiveSizeBytes
-      (\ s a -> s{_iArchiveSizeBytes = a})
-      . mapping _Coerce
-
--- | The parameters of the raw disk image.
-iRawDisk :: Lens' Image (Maybe ImageRawDisk)
-iRawDisk = lens _iRawDisk (\ s a -> s{_iRawDisk = a})
-
--- | [Output Only] Server-defined URL for the resource.
-iSelfLink :: Lens' Image (Maybe Text)
-iSelfLink
-  = lens _iSelfLink (\ s a -> s{_iSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-iName :: Lens' Image (Maybe Text)
-iName = lens _iName (\ s a -> s{_iName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-iCreationTimestamp :: Lens' Image (Maybe Text)
-iCreationTimestamp
-  = lens _iCreationTimestamp
-      (\ s a -> s{_iCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-iId :: Lens' Image (Maybe Word64)
-iId
-  = lens _iId (\ s a -> s{_iId = a}) . mapping _Coerce
-
--- | Any applicable publicly visible licenses.
-iLicenses :: Lens' Image [Text]
-iLicenses
-  = lens _iLicenses (\ s a -> s{_iLicenses = a}) .
-      _Default
-      . _Coerce
-
--- | URL of the The source disk used to create this image. This can be a full
--- or valid partial URL. You must provide either this property or the
--- rawDisk.source property but not both to create an image. For example,
--- the following are valid values: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/disk\/disk
--- - projects\/project\/zones\/zone\/disk\/disk - zones\/zone\/disks\/disk
-iSourceDisk :: Lens' Image (Maybe Text)
-iSourceDisk
-  = lens _iSourceDisk (\ s a -> s{_iSourceDisk = a})
-
--- | Textual description of the resource; provided by the client when the
--- resource is created.
-iDescription :: Lens' Image (Maybe Text)
-iDescription
-  = lens _iDescription (\ s a -> s{_iDescription = a})
-
--- | The deprecation status associated with this image.
-iDeprecated :: Lens' Image (Maybe DeprecationStatus)
-iDeprecated
-  = lens _iDeprecated (\ s a -> s{_iDeprecated = a})
-
-instance FromJSON Image where
-        parseJSON
-          = withObject "Image"
-              (\ o ->
-                 Image <$>
-                   (o .:? "status") <*> (o .:? "diskSizeGb") <*>
-                     (o .:? "sourceType" .!= Raw)
-                     <*> (o .:? "sourceDiskId")
-                     <*> (o .:? "kind" .!= "compute#image")
-                     <*> (o .:? "archiveSizeBytes")
-                     <*> (o .:? "rawDisk")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "licenses" .!= mempty)
-                     <*> (o .:? "sourceDisk")
-                     <*> (o .:? "description")
-                     <*> (o .:? "deprecated"))
-
-instance ToJSON Image where
-        toJSON Image{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _iStatus,
-                  ("diskSizeGb" .=) <$> _iDiskSizeGb,
-                  Just ("sourceType" .= _iSourceType),
-                  ("sourceDiskId" .=) <$> _iSourceDiskId,
-                  Just ("kind" .= _iKind),
-                  ("archiveSizeBytes" .=) <$> _iArchiveSizeBytes,
-                  ("rawDisk" .=) <$> _iRawDisk,
-                  ("selfLink" .=) <$> _iSelfLink,
-                  ("name" .=) <$> _iName,
-                  ("creationTimestamp" .=) <$> _iCreationTimestamp,
-                  ("id" .=) <$> _iId, ("licenses" .=) <$> _iLicenses,
-                  ("sourceDisk" .=) <$> _iSourceDisk,
-                  ("description" .=) <$> _iDescription,
-                  ("deprecated" .=) <$> _iDeprecated])
-
--- | A UrlMap resource. This resource defines the mapping from URL to the
--- BackendService resource, based on the \"longest-match\" of the URL\'s
--- host and path.
---
--- /See:/ 'urlMap' smart constructor.
-data URLMap = URLMap
-    { _umTests             :: !(Maybe [URLMapTest])
-    , _umKind              :: !Text
-    , _umFingerprint       :: !(Maybe (Textual Word8))
-    , _umDefaultService    :: !(Maybe Text)
-    , _umSelfLink          :: !(Maybe Text)
-    , _umName              :: !(Maybe Text)
-    , _umCreationTimestamp :: !(Maybe Text)
-    , _umPathMatchers      :: !(Maybe [PathMatcher])
-    , _umId                :: !(Maybe (Textual Word64))
-    , _umHostRules         :: !(Maybe [HostRule])
-    , _umDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMap' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umTests'
---
--- * 'umKind'
---
--- * 'umFingerprint'
---
--- * 'umDefaultService'
---
--- * 'umSelfLink'
---
--- * 'umName'
---
--- * 'umCreationTimestamp'
---
--- * 'umPathMatchers'
---
--- * 'umId'
---
--- * 'umHostRules'
---
--- * 'umDescription'
-urlMap
-    :: URLMap
-urlMap =
-    URLMap
-    { _umTests = Nothing
-    , _umKind = "compute#urlMap"
-    , _umFingerprint = Nothing
-    , _umDefaultService = Nothing
-    , _umSelfLink = Nothing
-    , _umName = Nothing
-    , _umCreationTimestamp = Nothing
-    , _umPathMatchers = Nothing
-    , _umId = Nothing
-    , _umHostRules = Nothing
-    , _umDescription = Nothing
-    }
-
--- | The list of expected URL mappings. Request to update this UrlMap will
--- succeed only all of the test cases pass.
-umTests :: Lens' URLMap [URLMapTest]
-umTests
-  = lens _umTests (\ s a -> s{_umTests = a}) . _Default
-      . _Coerce
-
--- | Type of the resource.
-umKind :: Lens' URLMap Text
-umKind = lens _umKind (\ s a -> s{_umKind = a})
-
--- | Fingerprint of this resource. A hash of the contents stored in this
--- object. This field is used in optimistic locking. This field will be
--- ignored when inserting a UrlMap. An up-to-date fingerprint must be
--- provided in order to update the UrlMap.
-umFingerprint :: Lens' URLMap (Maybe Word8)
-umFingerprint
-  = lens _umFingerprint
-      (\ s a -> s{_umFingerprint = a})
-      . mapping _Coerce
-
--- | The URL of the BackendService resource if none of the hostRules match.
-umDefaultService :: Lens' URLMap (Maybe Text)
-umDefaultService
-  = lens _umDefaultService
-      (\ s a -> s{_umDefaultService = a})
-
--- | [Output Only] Server-defined URL for the resource.
-umSelfLink :: Lens' URLMap (Maybe Text)
-umSelfLink
-  = lens _umSelfLink (\ s a -> s{_umSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-umName :: Lens' URLMap (Maybe Text)
-umName = lens _umName (\ s a -> s{_umName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-umCreationTimestamp :: Lens' URLMap (Maybe Text)
-umCreationTimestamp
-  = lens _umCreationTimestamp
-      (\ s a -> s{_umCreationTimestamp = a})
-
--- | The list of named PathMatchers to use against the URL.
-umPathMatchers :: Lens' URLMap [PathMatcher]
-umPathMatchers
-  = lens _umPathMatchers
-      (\ s a -> s{_umPathMatchers = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Unique identifier for the resource. Set by the server.
-umId :: Lens' URLMap (Maybe Word64)
-umId
-  = lens _umId (\ s a -> s{_umId = a}) .
-      mapping _Coerce
-
--- | The list of HostRules to use against the URL.
-umHostRules :: Lens' URLMap [HostRule]
-umHostRules
-  = lens _umHostRules (\ s a -> s{_umHostRules = a}) .
-      _Default
-      . _Coerce
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-umDescription :: Lens' URLMap (Maybe Text)
-umDescription
-  = lens _umDescription
-      (\ s a -> s{_umDescription = a})
-
-instance FromJSON URLMap where
-        parseJSON
-          = withObject "URLMap"
-              (\ o ->
-                 URLMap <$>
-                   (o .:? "tests" .!= mempty) <*>
-                     (o .:? "kind" .!= "compute#urlMap")
-                     <*> (o .:? "fingerprint")
-                     <*> (o .:? "defaultService")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "pathMatchers" .!= mempty)
-                     <*> (o .:? "id")
-                     <*> (o .:? "hostRules" .!= mempty)
-                     <*> (o .:? "description"))
-
-instance ToJSON URLMap where
-        toJSON URLMap{..}
-          = object
-              (catMaybes
-                 [("tests" .=) <$> _umTests, Just ("kind" .= _umKind),
-                  ("fingerprint" .=) <$> _umFingerprint,
-                  ("defaultService" .=) <$> _umDefaultService,
-                  ("selfLink" .=) <$> _umSelfLink,
-                  ("name" .=) <$> _umName,
-                  ("creationTimestamp" .=) <$> _umCreationTimestamp,
-                  ("pathMatchers" .=) <$> _umPathMatchers,
-                  ("id" .=) <$> _umId,
-                  ("hostRules" .=) <$> _umHostRules,
-                  ("description" .=) <$> _umDescription])
-
--- | A map of scoped instance group lists.
---
--- /See:/ 'instanceGroupAggregatedListItems' smart constructor.
-newtype InstanceGroupAggregatedListItems = InstanceGroupAggregatedListItems
-    { _igaliAddtional :: HashMap Text InstanceGroupsScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igaliAddtional'
-instanceGroupAggregatedListItems
-    :: HashMap Text InstanceGroupsScopedList -- ^ 'igaliAddtional'
-    -> InstanceGroupAggregatedListItems
-instanceGroupAggregatedListItems pIgaliAddtional_ =
-    InstanceGroupAggregatedListItems
-    { _igaliAddtional = _Coerce # pIgaliAddtional_
-    }
-
--- | The name of the scope that contains this set of instance groups.
-igaliAddtional :: Lens' InstanceGroupAggregatedListItems (HashMap Text InstanceGroupsScopedList)
-igaliAddtional
-  = lens _igaliAddtional
-      (\ s a -> s{_igaliAddtional = a})
-      . _Coerce
-
-instance FromJSON InstanceGroupAggregatedListItems
-         where
-        parseJSON
-          = withObject "InstanceGroupAggregatedListItems"
-              (\ o ->
-                 InstanceGroupAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON InstanceGroupAggregatedListItems
-         where
-        toJSON = toJSON . _igaliAddtional
-
--- | Contains a list of TargetPool resources.
---
--- /See:/ 'targetPoolList' smart constructor.
-data TargetPoolList = TargetPoolList
-    { _tplNextPageToken :: !(Maybe Text)
-    , _tplKind          :: !Text
-    , _tplItems         :: !(Maybe [TargetPool])
-    , _tplSelfLink      :: !(Maybe Text)
-    , _tplId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tplNextPageToken'
---
--- * 'tplKind'
---
--- * 'tplItems'
---
--- * 'tplSelfLink'
---
--- * 'tplId'
-targetPoolList
-    :: TargetPoolList
-targetPoolList =
-    TargetPoolList
-    { _tplNextPageToken = Nothing
-    , _tplKind = "compute#targetPoolList"
-    , _tplItems = Nothing
-    , _tplSelfLink = Nothing
-    , _tplId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-tplNextPageToken :: Lens' TargetPoolList (Maybe Text)
-tplNextPageToken
-  = lens _tplNextPageToken
-      (\ s a -> s{_tplNextPageToken = a})
-
--- | Type of resource.
-tplKind :: Lens' TargetPoolList Text
-tplKind = lens _tplKind (\ s a -> s{_tplKind = a})
-
--- | A list of TargetPool resources.
-tplItems :: Lens' TargetPoolList [TargetPool]
-tplItems
-  = lens _tplItems (\ s a -> s{_tplItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-tplSelfLink :: Lens' TargetPoolList (Maybe Text)
-tplSelfLink
-  = lens _tplSelfLink (\ s a -> s{_tplSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-tplId :: Lens' TargetPoolList (Maybe Text)
-tplId = lens _tplId (\ s a -> s{_tplId = a})
-
-instance FromJSON TargetPoolList where
-        parseJSON
-          = withObject "TargetPoolList"
-              (\ o ->
-                 TargetPoolList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#targetPoolList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetPoolList where
-        toJSON TargetPoolList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _tplNextPageToken,
-                  Just ("kind" .= _tplKind),
-                  ("items" .=) <$> _tplItems,
-                  ("selfLink" .=) <$> _tplSelfLink,
-                  ("id" .=) <$> _tplId])
-
---
--- /See:/ 'targetInstanceAggregatedList' smart constructor.
-data TargetInstanceAggregatedList = TargetInstanceAggregatedList
-    { _tialNextPageToken :: !(Maybe Text)
-    , _tialKind          :: !Text
-    , _tialItems         :: !(Maybe TargetInstanceAggregatedListItems)
-    , _tialSelfLink      :: !(Maybe Text)
-    , _tialId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstanceAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tialNextPageToken'
---
--- * 'tialKind'
---
--- * 'tialItems'
---
--- * 'tialSelfLink'
---
--- * 'tialId'
-targetInstanceAggregatedList
-    :: TargetInstanceAggregatedList
-targetInstanceAggregatedList =
-    TargetInstanceAggregatedList
-    { _tialNextPageToken = Nothing
-    , _tialKind = "compute#targetInstanceAggregatedList"
-    , _tialItems = Nothing
-    , _tialSelfLink = Nothing
-    , _tialId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-tialNextPageToken :: Lens' TargetInstanceAggregatedList (Maybe Text)
-tialNextPageToken
-  = lens _tialNextPageToken
-      (\ s a -> s{_tialNextPageToken = a})
-
--- | Type of resource.
-tialKind :: Lens' TargetInstanceAggregatedList Text
-tialKind = lens _tialKind (\ s a -> s{_tialKind = a})
-
--- | A map of scoped target instance lists.
-tialItems :: Lens' TargetInstanceAggregatedList (Maybe TargetInstanceAggregatedListItems)
-tialItems
-  = lens _tialItems (\ s a -> s{_tialItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-tialSelfLink :: Lens' TargetInstanceAggregatedList (Maybe Text)
-tialSelfLink
-  = lens _tialSelfLink (\ s a -> s{_tialSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-tialId :: Lens' TargetInstanceAggregatedList (Maybe Text)
-tialId = lens _tialId (\ s a -> s{_tialId = a})
-
-instance FromJSON TargetInstanceAggregatedList where
-        parseJSON
-          = withObject "TargetInstanceAggregatedList"
-              (\ o ->
-                 TargetInstanceAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#targetInstanceAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetInstanceAggregatedList where
-        toJSON TargetInstanceAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _tialNextPageToken,
-                  Just ("kind" .= _tialKind),
-                  ("items" .=) <$> _tialItems,
-                  ("selfLink" .=) <$> _tialSelfLink,
-                  ("id" .=) <$> _tialId])
-
---
--- /See:/ 'disksScopedList' smart constructor.
-data DisksScopedList = DisksScopedList
-    { _dslWarning :: !(Maybe DisksScopedListWarning)
-    , _dslDisks   :: !(Maybe [Disk])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisksScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dslWarning'
---
--- * 'dslDisks'
-disksScopedList
-    :: DisksScopedList
-disksScopedList =
-    DisksScopedList
-    { _dslWarning = Nothing
-    , _dslDisks = Nothing
-    }
-
--- | [Output Only] Informational warning which replaces the list of disks
--- when the list is empty.
-dslWarning :: Lens' DisksScopedList (Maybe DisksScopedListWarning)
-dslWarning
-  = lens _dslWarning (\ s a -> s{_dslWarning = a})
-
--- | [Output Only] List of disks contained in this scope.
-dslDisks :: Lens' DisksScopedList [Disk]
-dslDisks
-  = lens _dslDisks (\ s a -> s{_dslDisks = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON DisksScopedList where
-        parseJSON
-          = withObject "DisksScopedList"
-              (\ o ->
-                 DisksScopedList <$>
-                   (o .:? "warning") <*> (o .:? "disks" .!= mempty))
-
-instance ToJSON DisksScopedList where
-        toJSON DisksScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _dslWarning,
-                  ("disks" .=) <$> _dslDisks])
-
---
--- /See:/ 'instanceGroupManagersScopedList' smart constructor.
-data InstanceGroupManagersScopedList = InstanceGroupManagersScopedList
-    { _igmslWarning               :: !(Maybe InstanceGroupManagersScopedListWarning)
-    , _igmslInstanceGroupManagers :: !(Maybe [InstanceGroupManager])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmslWarning'
---
--- * 'igmslInstanceGroupManagers'
-instanceGroupManagersScopedList
-    :: InstanceGroupManagersScopedList
-instanceGroupManagersScopedList =
-    InstanceGroupManagersScopedList
-    { _igmslWarning = Nothing
-    , _igmslInstanceGroupManagers = Nothing
-    }
-
--- | [Output Only] The warning that replaces the list of managed instance
--- groups when the list is empty.
-igmslWarning :: Lens' InstanceGroupManagersScopedList (Maybe InstanceGroupManagersScopedListWarning)
-igmslWarning
-  = lens _igmslWarning (\ s a -> s{_igmslWarning = a})
-
--- | [Output Only] The list of managed instance groups that are contained in
--- the specified project and zone.
-igmslInstanceGroupManagers :: Lens' InstanceGroupManagersScopedList [InstanceGroupManager]
-igmslInstanceGroupManagers
-  = lens _igmslInstanceGroupManagers
-      (\ s a -> s{_igmslInstanceGroupManagers = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON InstanceGroupManagersScopedList
-         where
-        parseJSON
-          = withObject "InstanceGroupManagersScopedList"
-              (\ o ->
-                 InstanceGroupManagersScopedList <$>
-                   (o .:? "warning") <*>
-                     (o .:? "instanceGroupManagers" .!= mempty))
-
-instance ToJSON InstanceGroupManagersScopedList where
-        toJSON InstanceGroupManagersScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _igmslWarning,
-                  ("instanceGroupManagers" .=) <$>
-                    _igmslInstanceGroupManagers])
-
---
--- /See:/ 'diskAggregatedList' smart constructor.
-data DiskAggregatedList = DiskAggregatedList
-    { _dalNextPageToken :: !(Maybe Text)
-    , _dalKind          :: !Text
-    , _dalItems         :: !(Maybe DiskAggregatedListItems)
-    , _dalSelfLink      :: !(Maybe Text)
-    , _dalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dalNextPageToken'
---
--- * 'dalKind'
---
--- * 'dalItems'
---
--- * 'dalSelfLink'
---
--- * 'dalId'
-diskAggregatedList
-    :: DiskAggregatedList
-diskAggregatedList =
-    DiskAggregatedList
-    { _dalNextPageToken = Nothing
-    , _dalKind = "compute#diskAggregatedList"
-    , _dalItems = Nothing
-    , _dalSelfLink = Nothing
-    , _dalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-dalNextPageToken :: Lens' DiskAggregatedList (Maybe Text)
-dalNextPageToken
-  = lens _dalNextPageToken
-      (\ s a -> s{_dalNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#diskAggregatedList for
--- aggregated lists of persistent disks.
-dalKind :: Lens' DiskAggregatedList Text
-dalKind = lens _dalKind (\ s a -> s{_dalKind = a})
-
--- | [Output Only] A map of scoped disk lists.
-dalItems :: Lens' DiskAggregatedList (Maybe DiskAggregatedListItems)
-dalItems = lens _dalItems (\ s a -> s{_dalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-dalSelfLink :: Lens' DiskAggregatedList (Maybe Text)
-dalSelfLink
-  = lens _dalSelfLink (\ s a -> s{_dalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-dalId :: Lens' DiskAggregatedList (Maybe Text)
-dalId = lens _dalId (\ s a -> s{_dalId = a})
-
-instance FromJSON DiskAggregatedList where
-        parseJSON
-          = withObject "DiskAggregatedList"
-              (\ o ->
-                 DiskAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#diskAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON DiskAggregatedList where
-        toJSON DiskAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _dalNextPageToken,
-                  Just ("kind" .= _dalKind),
-                  ("items" .=) <$> _dalItems,
-                  ("selfLink" .=) <$> _dalSelfLink,
-                  ("id" .=) <$> _dalId])
-
---
--- /See:/ 'instanceWithNamedPorts' smart constructor.
-data InstanceWithNamedPorts = InstanceWithNamedPorts
-    { _iwnpStatus     :: !(Maybe InstanceWithNamedPortsStatus)
-    , _iwnpNamedPorts :: !(Maybe [NamedPort])
-    , _iwnpInstance   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceWithNamedPorts' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iwnpStatus'
---
--- * 'iwnpNamedPorts'
---
--- * 'iwnpInstance'
-instanceWithNamedPorts
-    :: InstanceWithNamedPorts
-instanceWithNamedPorts =
-    InstanceWithNamedPorts
-    { _iwnpStatus = Nothing
-    , _iwnpNamedPorts = Nothing
-    , _iwnpInstance = Nothing
-    }
-
--- | [Output Only] The status of the instance.
-iwnpStatus :: Lens' InstanceWithNamedPorts (Maybe InstanceWithNamedPortsStatus)
-iwnpStatus
-  = lens _iwnpStatus (\ s a -> s{_iwnpStatus = a})
-
--- | [Output Only] The named ports that belong to this instance group.
-iwnpNamedPorts :: Lens' InstanceWithNamedPorts [NamedPort]
-iwnpNamedPorts
-  = lens _iwnpNamedPorts
-      (\ s a -> s{_iwnpNamedPorts = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] The URL of the instance.
-iwnpInstance :: Lens' InstanceWithNamedPorts (Maybe Text)
-iwnpInstance
-  = lens _iwnpInstance (\ s a -> s{_iwnpInstance = a})
-
-instance FromJSON InstanceWithNamedPorts where
-        parseJSON
-          = withObject "InstanceWithNamedPorts"
-              (\ o ->
-                 InstanceWithNamedPorts <$>
-                   (o .:? "status") <*> (o .:? "namedPorts" .!= mempty)
-                     <*> (o .:? "instance"))
-
-instance ToJSON InstanceWithNamedPorts where
-        toJSON InstanceWithNamedPorts{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _iwnpStatus,
-                  ("namedPorts" .=) <$> _iwnpNamedPorts,
-                  ("instance" .=) <$> _iwnpInstance])
-
---
--- /See:/ 'forwardingRulesScopedList' smart constructor.
-data ForwardingRulesScopedList = ForwardingRulesScopedList
-    { _frslWarning         :: !(Maybe ForwardingRulesScopedListWarning)
-    , _frslForwardingRules :: !(Maybe [ForwardingRule])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRulesScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frslWarning'
---
--- * 'frslForwardingRules'
-forwardingRulesScopedList
-    :: ForwardingRulesScopedList
-forwardingRulesScopedList =
-    ForwardingRulesScopedList
-    { _frslWarning = Nothing
-    , _frslForwardingRules = Nothing
-    }
-
--- | Informational warning which replaces the list of forwarding rules when
--- the list is empty.
-frslWarning :: Lens' ForwardingRulesScopedList (Maybe ForwardingRulesScopedListWarning)
-frslWarning
-  = lens _frslWarning (\ s a -> s{_frslWarning = a})
-
--- | List of forwarding rules contained in this scope.
-frslForwardingRules :: Lens' ForwardingRulesScopedList [ForwardingRule]
-frslForwardingRules
-  = lens _frslForwardingRules
-      (\ s a -> s{_frslForwardingRules = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ForwardingRulesScopedList where
-        parseJSON
-          = withObject "ForwardingRulesScopedList"
-              (\ o ->
-                 ForwardingRulesScopedList <$>
-                   (o .:? "warning") <*>
-                     (o .:? "forwardingRules" .!= mempty))
-
-instance ToJSON ForwardingRulesScopedList where
-        toJSON ForwardingRulesScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _frslWarning,
-                  ("forwardingRules" .=) <$> _frslForwardingRules])
-
---
--- /See:/ 'instanceReference' smart constructor.
-newtype InstanceReference = InstanceReference
-    { _iInstance :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iInstance'
-instanceReference
-    :: InstanceReference
-instanceReference =
-    InstanceReference
-    { _iInstance = Nothing
-    }
-
--- | The URL for a specific instance.
-iInstance :: Lens' InstanceReference (Maybe Text)
-iInstance
-  = lens _iInstance (\ s a -> s{_iInstance = a})
-
-instance FromJSON InstanceReference where
-        parseJSON
-          = withObject "InstanceReference"
-              (\ o -> InstanceReference <$> (o .:? "instance"))
-
-instance ToJSON InstanceReference where
-        toJSON InstanceReference{..}
-          = object (catMaybes [("instance" .=) <$> _iInstance])
-
---
--- /See:/ 'operationAggregatedList' smart constructor.
-data OperationAggregatedList = OperationAggregatedList
-    { _oalNextPageToken :: !(Maybe Text)
-    , _oalKind          :: !Text
-    , _oalItems         :: !(Maybe OperationAggregatedListItems)
-    , _oalSelfLink      :: !(Maybe Text)
-    , _oalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oalNextPageToken'
---
--- * 'oalKind'
---
--- * 'oalItems'
---
--- * 'oalSelfLink'
---
--- * 'oalId'
-operationAggregatedList
-    :: OperationAggregatedList
-operationAggregatedList =
-    OperationAggregatedList
-    { _oalNextPageToken = Nothing
-    , _oalKind = "compute#operationAggregatedList"
-    , _oalItems = Nothing
-    , _oalSelfLink = Nothing
-    , _oalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-oalNextPageToken :: Lens' OperationAggregatedList (Maybe Text)
-oalNextPageToken
-  = lens _oalNextPageToken
-      (\ s a -> s{_oalNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#operationAggregatedList
--- for aggregated lists of operations.
-oalKind :: Lens' OperationAggregatedList Text
-oalKind = lens _oalKind (\ s a -> s{_oalKind = a})
-
--- | [Output Only] A map of scoped operation lists.
-oalItems :: Lens' OperationAggregatedList (Maybe OperationAggregatedListItems)
-oalItems = lens _oalItems (\ s a -> s{_oalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-oalSelfLink :: Lens' OperationAggregatedList (Maybe Text)
-oalSelfLink
-  = lens _oalSelfLink (\ s a -> s{_oalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-oalId :: Lens' OperationAggregatedList (Maybe Text)
-oalId = lens _oalId (\ s a -> s{_oalId = a})
-
-instance FromJSON OperationAggregatedList where
-        parseJSON
-          = withObject "OperationAggregatedList"
-              (\ o ->
-                 OperationAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#operationAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON OperationAggregatedList where
-        toJSON OperationAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _oalNextPageToken,
-                  Just ("kind" .= _oalKind),
-                  ("items" .=) <$> _oalItems,
-                  ("selfLink" .=) <$> _oalSelfLink,
-                  ("id" .=) <$> _oalId])
-
---
--- /See:/ 'operationsScopedList' smart constructor.
-data OperationsScopedList = OperationsScopedList
-    { _oslWarning    :: !(Maybe OperationsScopedListWarning)
-    , _oslOperations :: !(Maybe [Operation])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationsScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oslWarning'
---
--- * 'oslOperations'
-operationsScopedList
-    :: OperationsScopedList
-operationsScopedList =
-    OperationsScopedList
-    { _oslWarning = Nothing
-    , _oslOperations = Nothing
-    }
-
--- | [Output Only] Informational warning which replaces the list of
--- operations when the list is empty.
-oslWarning :: Lens' OperationsScopedList (Maybe OperationsScopedListWarning)
-oslWarning
-  = lens _oslWarning (\ s a -> s{_oslWarning = a})
-
--- | [Output Only] List of operations contained in this scope.
-oslOperations :: Lens' OperationsScopedList [Operation]
-oslOperations
-  = lens _oslOperations
-      (\ s a -> s{_oslOperations = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON OperationsScopedList where
-        parseJSON
-          = withObject "OperationsScopedList"
-              (\ o ->
-                 OperationsScopedList <$>
-                   (o .:? "warning") <*>
-                     (o .:? "operations" .!= mempty))
-
-instance ToJSON OperationsScopedList where
-        toJSON OperationsScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _oslWarning,
-                  ("operations" .=) <$> _oslOperations])
-
--- | The named port. For example: .
---
--- /See:/ 'namedPort' smart constructor.
-data NamedPort = NamedPort
-    { _npName :: !(Maybe Text)
-    , _npPort :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NamedPort' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'npName'
---
--- * 'npPort'
-namedPort
-    :: NamedPort
-namedPort =
-    NamedPort
-    { _npName = Nothing
-    , _npPort = Nothing
-    }
-
--- | The name for this named port. The name must be 1-63 characters long, and
--- comply with RFC1035.
-npName :: Lens' NamedPort (Maybe Text)
-npName = lens _npName (\ s a -> s{_npName = a})
-
--- | The port number, which can be a value between 1 and 65535.
-npPort :: Lens' NamedPort (Maybe Int32)
-npPort
-  = lens _npPort (\ s a -> s{_npPort = a}) .
-      mapping _Coerce
-
-instance FromJSON NamedPort where
-        parseJSON
-          = withObject "NamedPort"
-              (\ o ->
-                 NamedPort <$> (o .:? "name") <*> (o .:? "port"))
-
-instance ToJSON NamedPort where
-        toJSON NamedPort{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _npName, ("port" .=) <$> _npPort])
-
--- | Contains a list of TargetInstance resources.
---
--- /See:/ 'targetInstanceList' smart constructor.
-data TargetInstanceList = TargetInstanceList
-    { _tilNextPageToken :: !(Maybe Text)
-    , _tilKind          :: !Text
-    , _tilItems         :: !(Maybe [TargetInstance])
-    , _tilSelfLink      :: !(Maybe Text)
-    , _tilId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstanceList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tilNextPageToken'
---
--- * 'tilKind'
---
--- * 'tilItems'
---
--- * 'tilSelfLink'
---
--- * 'tilId'
-targetInstanceList
-    :: TargetInstanceList
-targetInstanceList =
-    TargetInstanceList
-    { _tilNextPageToken = Nothing
-    , _tilKind = "compute#targetInstanceList"
-    , _tilItems = Nothing
-    , _tilSelfLink = Nothing
-    , _tilId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-tilNextPageToken :: Lens' TargetInstanceList (Maybe Text)
-tilNextPageToken
-  = lens _tilNextPageToken
-      (\ s a -> s{_tilNextPageToken = a})
-
--- | Type of resource.
-tilKind :: Lens' TargetInstanceList Text
-tilKind = lens _tilKind (\ s a -> s{_tilKind = a})
-
--- | A list of TargetInstance resources.
-tilItems :: Lens' TargetInstanceList [TargetInstance]
-tilItems
-  = lens _tilItems (\ s a -> s{_tilItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-tilSelfLink :: Lens' TargetInstanceList (Maybe Text)
-tilSelfLink
-  = lens _tilSelfLink (\ s a -> s{_tilSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-tilId :: Lens' TargetInstanceList (Maybe Text)
-tilId = lens _tilId (\ s a -> s{_tilId = a})
-
-instance FromJSON TargetInstanceList where
-        parseJSON
-          = withObject "TargetInstanceList"
-              (\ o ->
-                 TargetInstanceList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#targetInstanceList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetInstanceList where
-        toJSON TargetInstanceList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _tilNextPageToken,
-                  Just ("kind" .= _tilKind),
-                  ("items" .=) <$> _tilItems,
-                  ("selfLink" .=) <$> _tilSelfLink,
-                  ("id" .=) <$> _tilId])
-
---
--- /See:/ 'instanceGroupManagerAggregatedList' smart constructor.
-data InstanceGroupManagerAggregatedList = InstanceGroupManagerAggregatedList
-    { _igmalNextPageToken :: !(Maybe Text)
-    , _igmalKind          :: !Text
-    , _igmalItems         :: !(Maybe InstanceGroupManagerAggregatedListItems)
-    , _igmalSelfLink      :: !(Maybe Text)
-    , _igmalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagerAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmalNextPageToken'
---
--- * 'igmalKind'
---
--- * 'igmalItems'
---
--- * 'igmalSelfLink'
---
--- * 'igmalId'
-instanceGroupManagerAggregatedList
-    :: InstanceGroupManagerAggregatedList
-instanceGroupManagerAggregatedList =
-    InstanceGroupManagerAggregatedList
-    { _igmalNextPageToken = Nothing
-    , _igmalKind = "compute#instanceGroupManagerAggregatedList"
-    , _igmalItems = Nothing
-    , _igmalSelfLink = Nothing
-    , _igmalId = Nothing
-    }
-
--- | [Output Only] A token that is used to continue a truncated list request.
-igmalNextPageToken :: Lens' InstanceGroupManagerAggregatedList (Maybe Text)
-igmalNextPageToken
-  = lens _igmalNextPageToken
-      (\ s a -> s{_igmalNextPageToken = a})
-
--- | [Output Only] The resource type, which is always
--- compute#instanceGroupManagerAggregatedList for an aggregated list of
--- managed instance groups.
-igmalKind :: Lens' InstanceGroupManagerAggregatedList Text
-igmalKind
-  = lens _igmalKind (\ s a -> s{_igmalKind = a})
-
--- | [Output Only] A map of filtered managed instance group lists.
-igmalItems :: Lens' InstanceGroupManagerAggregatedList (Maybe InstanceGroupManagerAggregatedListItems)
-igmalItems
-  = lens _igmalItems (\ s a -> s{_igmalItems = a})
-
--- | [Output Only] The URL for this resource type. The server generates this
--- URL.
-igmalSelfLink :: Lens' InstanceGroupManagerAggregatedList (Maybe Text)
-igmalSelfLink
-  = lens _igmalSelfLink
-      (\ s a -> s{_igmalSelfLink = a})
-
--- | [Output Only] A unique identifier for this aggregated list of managed
--- instance groups. The server generates this identifier.
-igmalId :: Lens' InstanceGroupManagerAggregatedList (Maybe Text)
-igmalId = lens _igmalId (\ s a -> s{_igmalId = a})
-
-instance FromJSON InstanceGroupManagerAggregatedList
-         where
-        parseJSON
-          = withObject "InstanceGroupManagerAggregatedList"
-              (\ o ->
-                 InstanceGroupManagerAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#instanceGroupManagerAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceGroupManagerAggregatedList
-         where
-        toJSON InstanceGroupManagerAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _igmalNextPageToken,
-                  Just ("kind" .= _igmalKind),
-                  ("items" .=) <$> _igmalItems,
-                  ("selfLink" .=) <$> _igmalSelfLink,
-                  ("id" .=) <$> _igmalId])
-
---
--- /See:/ 'targetPoolsScopedList' smart constructor.
-data TargetPoolsScopedList = TargetPoolsScopedList
-    { _tpslWarning     :: !(Maybe TargetPoolsScopedListWarning)
-    , _tpslTargetPools :: !(Maybe [TargetPool])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpslWarning'
---
--- * 'tpslTargetPools'
-targetPoolsScopedList
-    :: TargetPoolsScopedList
-targetPoolsScopedList =
-    TargetPoolsScopedList
-    { _tpslWarning = Nothing
-    , _tpslTargetPools = Nothing
-    }
-
--- | Informational warning which replaces the list of addresses when the list
--- is empty.
-tpslWarning :: Lens' TargetPoolsScopedList (Maybe TargetPoolsScopedListWarning)
-tpslWarning
-  = lens _tpslWarning (\ s a -> s{_tpslWarning = a})
-
--- | List of target pools contained in this scope.
-tpslTargetPools :: Lens' TargetPoolsScopedList [TargetPool]
-tpslTargetPools
-  = lens _tpslTargetPools
-      (\ s a -> s{_tpslTargetPools = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPoolsScopedList where
-        parseJSON
-          = withObject "TargetPoolsScopedList"
-              (\ o ->
-                 TargetPoolsScopedList <$>
-                   (o .:? "warning") <*>
-                     (o .:? "targetPools" .!= mempty))
-
-instance ToJSON TargetPoolsScopedList where
-        toJSON TargetPoolsScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _tpslWarning,
-                  ("targetPools" .=) <$> _tpslTargetPools])
-
---
--- /See:/ 'forwardingRuleAggregatedList' smart constructor.
-data ForwardingRuleAggregatedList = ForwardingRuleAggregatedList
-    { _fralNextPageToken :: !(Maybe Text)
-    , _fralKind          :: !Text
-    , _fralItems         :: !(Maybe ForwardingRuleAggregatedListItems)
-    , _fralSelfLink      :: !(Maybe Text)
-    , _fralId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRuleAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fralNextPageToken'
---
--- * 'fralKind'
---
--- * 'fralItems'
---
--- * 'fralSelfLink'
---
--- * 'fralId'
-forwardingRuleAggregatedList
-    :: ForwardingRuleAggregatedList
-forwardingRuleAggregatedList =
-    ForwardingRuleAggregatedList
-    { _fralNextPageToken = Nothing
-    , _fralKind = "compute#forwardingRuleAggregatedList"
-    , _fralItems = Nothing
-    , _fralSelfLink = Nothing
-    , _fralId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-fralNextPageToken :: Lens' ForwardingRuleAggregatedList (Maybe Text)
-fralNextPageToken
-  = lens _fralNextPageToken
-      (\ s a -> s{_fralNextPageToken = a})
-
--- | Type of resource.
-fralKind :: Lens' ForwardingRuleAggregatedList Text
-fralKind = lens _fralKind (\ s a -> s{_fralKind = a})
-
--- | A map of scoped forwarding rule lists.
-fralItems :: Lens' ForwardingRuleAggregatedList (Maybe ForwardingRuleAggregatedListItems)
-fralItems
-  = lens _fralItems (\ s a -> s{_fralItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-fralSelfLink :: Lens' ForwardingRuleAggregatedList (Maybe Text)
-fralSelfLink
-  = lens _fralSelfLink (\ s a -> s{_fralSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-fralId :: Lens' ForwardingRuleAggregatedList (Maybe Text)
-fralId = lens _fralId (\ s a -> s{_fralId = a})
-
-instance FromJSON ForwardingRuleAggregatedList where
-        parseJSON
-          = withObject "ForwardingRuleAggregatedList"
-              (\ o ->
-                 ForwardingRuleAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#forwardingRuleAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON ForwardingRuleAggregatedList where
-        toJSON ForwardingRuleAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _fralNextPageToken,
-                  Just ("kind" .= _fralKind),
-                  ("items" .=) <$> _fralItems,
-                  ("selfLink" .=) <$> _fralSelfLink,
-                  ("id" .=) <$> _fralId])
-
---
--- /See:/ 'targetReference' smart constructor.
-newtype TargetReference = TargetReference
-    { _trTarget :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trTarget'
-targetReference
-    :: TargetReference
-targetReference =
-    TargetReference
-    { _trTarget = Nothing
-    }
-
-trTarget :: Lens' TargetReference (Maybe Text)
-trTarget = lens _trTarget (\ s a -> s{_trTarget = a})
-
-instance FromJSON TargetReference where
-        parseJSON
-          = withObject "TargetReference"
-              (\ o -> TargetReference <$> (o .:? "target"))
-
-instance ToJSON TargetReference where
-        toJSON TargetReference{..}
-          = object (catMaybes [("target" .=) <$> _trTarget])
-
---
--- /See:/ 'targetPoolAggregatedList' smart constructor.
-data TargetPoolAggregatedList = TargetPoolAggregatedList
-    { _tpalNextPageToken :: !(Maybe Text)
-    , _tpalKind          :: !Text
-    , _tpalItems         :: !(Maybe TargetPoolAggregatedListItems)
-    , _tpalSelfLink      :: !(Maybe Text)
-    , _tpalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpalNextPageToken'
---
--- * 'tpalKind'
---
--- * 'tpalItems'
---
--- * 'tpalSelfLink'
---
--- * 'tpalId'
-targetPoolAggregatedList
-    :: TargetPoolAggregatedList
-targetPoolAggregatedList =
-    TargetPoolAggregatedList
-    { _tpalNextPageToken = Nothing
-    , _tpalKind = "compute#targetPoolAggregatedList"
-    , _tpalItems = Nothing
-    , _tpalSelfLink = Nothing
-    , _tpalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-tpalNextPageToken :: Lens' TargetPoolAggregatedList (Maybe Text)
-tpalNextPageToken
-  = lens _tpalNextPageToken
-      (\ s a -> s{_tpalNextPageToken = a})
-
--- | Type of resource.
-tpalKind :: Lens' TargetPoolAggregatedList Text
-tpalKind = lens _tpalKind (\ s a -> s{_tpalKind = a})
-
--- | A map of scoped target pool lists.
-tpalItems :: Lens' TargetPoolAggregatedList (Maybe TargetPoolAggregatedListItems)
-tpalItems
-  = lens _tpalItems (\ s a -> s{_tpalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-tpalSelfLink :: Lens' TargetPoolAggregatedList (Maybe Text)
-tpalSelfLink
-  = lens _tpalSelfLink (\ s a -> s{_tpalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-tpalId :: Lens' TargetPoolAggregatedList (Maybe Text)
-tpalId = lens _tpalId (\ s a -> s{_tpalId = a})
-
-instance FromJSON TargetPoolAggregatedList where
-        parseJSON
-          = withObject "TargetPoolAggregatedList"
-              (\ o ->
-                 TargetPoolAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#targetPoolAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetPoolAggregatedList where
-        toJSON TargetPoolAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _tpalNextPageToken,
-                  Just ("kind" .= _tpalKind),
-                  ("items" .=) <$> _tpalItems,
-                  ("selfLink" .=) <$> _tpalSelfLink,
-                  ("id" .=) <$> _tpalId])
-
---
--- /See:/ 'operationsScopedListWarningDataItem' smart constructor.
-data OperationsScopedListWarningDataItem = OperationsScopedListWarningDataItem
-    { _oslwdiValue :: !(Maybe Text)
-    , _oslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationsScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oslwdiValue'
---
--- * 'oslwdiKey'
-operationsScopedListWarningDataItem
-    :: OperationsScopedListWarningDataItem
-operationsScopedListWarningDataItem =
-    OperationsScopedListWarningDataItem
-    { _oslwdiValue = Nothing
-    , _oslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-oslwdiValue :: Lens' OperationsScopedListWarningDataItem (Maybe Text)
-oslwdiValue
-  = lens _oslwdiValue (\ s a -> s{_oslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-oslwdiKey :: Lens' OperationsScopedListWarningDataItem (Maybe Text)
-oslwdiKey
-  = lens _oslwdiKey (\ s a -> s{_oslwdiKey = a})
-
-instance FromJSON OperationsScopedListWarningDataItem
-         where
-        parseJSON
-          = withObject "OperationsScopedListWarningDataItem"
-              (\ o ->
-                 OperationsScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON OperationsScopedListWarningDataItem
-         where
-        toJSON OperationsScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _oslwdiValue,
-                  ("key" .=) <$> _oslwdiKey])
-
--- | A TargetPool resource. This resource defines a pool of instances,
--- associated HttpHealthCheck resources, and the fallback TargetPool.
---
--- /See:/ 'targetPool' smart constructor.
-data TargetPool = TargetPool
-    { _tpSessionAffinity   :: !(Maybe TargetPoolSessionAffinity)
-    , _tpBackupPool        :: !(Maybe Text)
-    , _tpKind              :: !Text
-    , _tpSelfLink          :: !(Maybe Text)
-    , _tpName              :: !(Maybe Text)
-    , _tpCreationTimestamp :: !(Maybe Text)
-    , _tpInstances         :: !(Maybe [Text])
-    , _tpId                :: !(Maybe (Textual Word64))
-    , _tpFailoverRatio     :: !(Maybe (Textual Double))
-    , _tpRegion            :: !(Maybe Text)
-    , _tpDescription       :: !(Maybe Text)
-    , _tpHealthChecks      :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPool' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpSessionAffinity'
---
--- * 'tpBackupPool'
---
--- * 'tpKind'
---
--- * 'tpSelfLink'
---
--- * 'tpName'
---
--- * 'tpCreationTimestamp'
---
--- * 'tpInstances'
---
--- * 'tpId'
---
--- * 'tpFailoverRatio'
---
--- * 'tpRegion'
---
--- * 'tpDescription'
---
--- * 'tpHealthChecks'
-targetPool
-    :: TargetPool
-targetPool =
-    TargetPool
-    { _tpSessionAffinity = Nothing
-    , _tpBackupPool = Nothing
-    , _tpKind = "compute#targetPool"
-    , _tpSelfLink = Nothing
-    , _tpName = Nothing
-    , _tpCreationTimestamp = Nothing
-    , _tpInstances = Nothing
-    , _tpId = Nothing
-    , _tpFailoverRatio = Nothing
-    , _tpRegion = Nothing
-    , _tpDescription = Nothing
-    , _tpHealthChecks = Nothing
-    }
-
--- | Sesssion affinity option, must be one of the following values: NONE:
--- Connections from the same client IP may go to any instance in the pool.
--- CLIENT_IP: Connections from the same client IP will go to the same
--- instance in the pool while that instance remains healthy.
--- CLIENT_IP_PROTO: Connections from the same client IP with the same IP
--- protocol will go to the same instance in the pool while that instance
--- remains healthy.
-tpSessionAffinity :: Lens' TargetPool (Maybe TargetPoolSessionAffinity)
-tpSessionAffinity
-  = lens _tpSessionAffinity
-      (\ s a -> s{_tpSessionAffinity = a})
-
--- | This field is applicable only when the containing target pool is serving
--- a forwarding rule as the primary pool, and its failoverRatio field is
--- properly set to a value between [0, 1]. backupPool and failoverRatio
--- together define the fallback behavior of the primary target pool: if the
--- ratio of the healthy instances in the primary pool is at or below
--- failoverRatio, traffic arriving at the load-balanced IP will be directed
--- to the backup pool. In case where failoverRatio and backupPool are not
--- set, or all the instances in the backup pool are unhealthy, the traffic
--- will be directed back to the primary pool in the \"force\" mode, where
--- traffic will be spread to the healthy instances with the best effort, or
--- to all instances when no instance is healthy.
-tpBackupPool :: Lens' TargetPool (Maybe Text)
-tpBackupPool
-  = lens _tpBackupPool (\ s a -> s{_tpBackupPool = a})
-
--- | Type of the resource.
-tpKind :: Lens' TargetPool Text
-tpKind = lens _tpKind (\ s a -> s{_tpKind = a})
-
--- | [Output Only] Server-defined URL for the resource.
-tpSelfLink :: Lens' TargetPool (Maybe Text)
-tpSelfLink
-  = lens _tpSelfLink (\ s a -> s{_tpSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-tpName :: Lens' TargetPool (Maybe Text)
-tpName = lens _tpName (\ s a -> s{_tpName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-tpCreationTimestamp :: Lens' TargetPool (Maybe Text)
-tpCreationTimestamp
-  = lens _tpCreationTimestamp
-      (\ s a -> s{_tpCreationTimestamp = a})
-
--- | A list of resource URLs to the member virtual machines serving this
--- pool. They must live in zones contained in the same region as this pool.
-tpInstances :: Lens' TargetPool [Text]
-tpInstances
-  = lens _tpInstances (\ s a -> s{_tpInstances = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-tpId :: Lens' TargetPool (Maybe Word64)
-tpId
-  = lens _tpId (\ s a -> s{_tpId = a}) .
-      mapping _Coerce
-
--- | This field is applicable only when the containing target pool is serving
--- a forwarding rule as the primary pool (i.e., not as a backup pool to
--- some other target pool). The value of the field must be in [0, 1]. If
--- set, backupPool must also be set. They together define the fallback
--- behavior of the primary target pool: if the ratio of the healthy
--- instances in the primary pool is at or below this number, traffic
--- arriving at the load-balanced IP will be directed to the backup pool. In
--- case where failoverRatio is not set or all the instances in the backup
--- pool are unhealthy, the traffic will be directed back to the primary
--- pool in the \"force\" mode, where traffic will be spread to the healthy
--- instances with the best effort, or to all instances when no instance is
--- healthy.
-tpFailoverRatio :: Lens' TargetPool (Maybe Double)
-tpFailoverRatio
-  = lens _tpFailoverRatio
-      (\ s a -> s{_tpFailoverRatio = a})
-      . mapping _Coerce
-
--- | [Output Only] URL of the region where the target pool resides.
-tpRegion :: Lens' TargetPool (Maybe Text)
-tpRegion = lens _tpRegion (\ s a -> s{_tpRegion = a})
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-tpDescription :: Lens' TargetPool (Maybe Text)
-tpDescription
-  = lens _tpDescription
-      (\ s a -> s{_tpDescription = a})
-
--- | A list of URLs to the HttpHealthCheck resource. A member instance in
--- this pool is considered healthy if and only if all specified health
--- checks pass. An empty list means all member instances will be considered
--- healthy at all times.
-tpHealthChecks :: Lens' TargetPool [Text]
-tpHealthChecks
-  = lens _tpHealthChecks
-      (\ s a -> s{_tpHealthChecks = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPool where
-        parseJSON
-          = withObject "TargetPool"
-              (\ o ->
-                 TargetPool <$>
-                   (o .:? "sessionAffinity") <*> (o .:? "backupPool")
-                     <*> (o .:? "kind" .!= "compute#targetPool")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "instances" .!= mempty)
-                     <*> (o .:? "id")
-                     <*> (o .:? "failoverRatio")
-                     <*> (o .:? "region")
-                     <*> (o .:? "description")
-                     <*> (o .:? "healthChecks" .!= mempty))
-
-instance ToJSON TargetPool where
-        toJSON TargetPool{..}
-          = object
-              (catMaybes
-                 [("sessionAffinity" .=) <$> _tpSessionAffinity,
-                  ("backupPool" .=) <$> _tpBackupPool,
-                  Just ("kind" .= _tpKind),
-                  ("selfLink" .=) <$> _tpSelfLink,
-                  ("name" .=) <$> _tpName,
-                  ("creationTimestamp" .=) <$> _tpCreationTimestamp,
-                  ("instances" .=) <$> _tpInstances,
-                  ("id" .=) <$> _tpId,
-                  ("failoverRatio" .=) <$> _tpFailoverRatio,
-                  ("region" .=) <$> _tpRegion,
-                  ("description" .=) <$> _tpDescription,
-                  ("healthChecks" .=) <$> _tpHealthChecks])
-
--- | Contains a list of Image resources.
---
--- /See:/ 'imageList' smart constructor.
-data ImageList = ImageList
-    { _ilNextPageToken :: !(Maybe Text)
-    , _ilKind          :: !Text
-    , _ilItems         :: !(Maybe [Image])
-    , _ilSelfLink      :: !(Maybe Text)
-    , _ilId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImageList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ilNextPageToken'
---
--- * 'ilKind'
---
--- * 'ilItems'
---
--- * 'ilSelfLink'
---
--- * 'ilId'
-imageList
-    :: ImageList
-imageList =
-    ImageList
-    { _ilNextPageToken = Nothing
-    , _ilKind = "compute#imageList"
-    , _ilItems = Nothing
-    , _ilSelfLink = Nothing
-    , _ilId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-ilNextPageToken :: Lens' ImageList (Maybe Text)
-ilNextPageToken
-  = lens _ilNextPageToken
-      (\ s a -> s{_ilNextPageToken = a})
-
--- | Type of resource.
-ilKind :: Lens' ImageList Text
-ilKind = lens _ilKind (\ s a -> s{_ilKind = a})
-
--- | [Output Only] A list of Image resources.
-ilItems :: Lens' ImageList [Image]
-ilItems
-  = lens _ilItems (\ s a -> s{_ilItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-ilSelfLink :: Lens' ImageList (Maybe Text)
-ilSelfLink
-  = lens _ilSelfLink (\ s a -> s{_ilSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-ilId :: Lens' ImageList (Maybe Text)
-ilId = lens _ilId (\ s a -> s{_ilId = a})
-
-instance FromJSON ImageList where
-        parseJSON
-          = withObject "ImageList"
-              (\ o ->
-                 ImageList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#imageList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON ImageList where
-        toJSON ImageList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _ilNextPageToken,
-                  Just ("kind" .= _ilKind), ("items" .=) <$> _ilItems,
-                  ("selfLink" .=) <$> _ilSelfLink,
-                  ("id" .=) <$> _ilId])
-
--- | Informational warning which replaces the list of addresses when the list
--- is empty.
---
--- /See:/ 'vpnTunnelsScopedListWarning' smart constructor.
-data VPNTunnelsScopedListWarning = VPNTunnelsScopedListWarning
-    { _vtslwData    :: !(Maybe [VPNTunnelsScopedListWarningDataItem])
-    , _vtslwCode    :: !(Maybe VPNTunnelsScopedListWarningCode)
-    , _vtslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnelsScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtslwData'
---
--- * 'vtslwCode'
---
--- * 'vtslwMessage'
-vpnTunnelsScopedListWarning
-    :: VPNTunnelsScopedListWarning
-vpnTunnelsScopedListWarning =
-    VPNTunnelsScopedListWarning
-    { _vtslwData = Nothing
-    , _vtslwCode = Nothing
-    , _vtslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-vtslwData :: Lens' VPNTunnelsScopedListWarning [VPNTunnelsScopedListWarningDataItem]
-vtslwData
-  = lens _vtslwData (\ s a -> s{_vtslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-vtslwCode :: Lens' VPNTunnelsScopedListWarning (Maybe VPNTunnelsScopedListWarningCode)
-vtslwCode
-  = lens _vtslwCode (\ s a -> s{_vtslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-vtslwMessage :: Lens' VPNTunnelsScopedListWarning (Maybe Text)
-vtslwMessage
-  = lens _vtslwMessage (\ s a -> s{_vtslwMessage = a})
-
-instance FromJSON VPNTunnelsScopedListWarning where
-        parseJSON
-          = withObject "VPNTunnelsScopedListWarning"
-              (\ o ->
-                 VPNTunnelsScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON VPNTunnelsScopedListWarning where
-        toJSON VPNTunnelsScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _vtslwData,
-                  ("code" .=) <$> _vtslwCode,
-                  ("message" .=) <$> _vtslwMessage])
-
--- | A ForwardingRule resource. A ForwardingRule resource specifies which
--- pool of target virtual machines to forward a packet to if it matches the
--- given [IPAddress, IPProtocol, portRange] tuple.
---
--- /See:/ 'forwardingRule' smart constructor.
-data ForwardingRule = ForwardingRule
-    { _frIPAddress         :: !(Maybe Text)
-    , _frKind              :: !Text
-    , _frPortRange         :: !(Maybe Text)
-    , _frSelfLink          :: !(Maybe Text)
-    , _frName              :: !(Maybe Text)
-    , _frIPProtocol        :: !(Maybe ForwardingRuleIPProtocol)
-    , _frCreationTimestamp :: !(Maybe Text)
-    , _frId                :: !(Maybe (Textual Word64))
-    , _frRegion            :: !(Maybe Text)
-    , _frDescription       :: !(Maybe Text)
-    , _frTarget            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frIPAddress'
---
--- * 'frKind'
---
--- * 'frPortRange'
---
--- * 'frSelfLink'
---
--- * 'frName'
---
--- * 'frIPProtocol'
---
--- * 'frCreationTimestamp'
---
--- * 'frId'
---
--- * 'frRegion'
---
--- * 'frDescription'
---
--- * 'frTarget'
-forwardingRule
-    :: ForwardingRule
-forwardingRule =
-    ForwardingRule
-    { _frIPAddress = Nothing
-    , _frKind = "compute#forwardingRule"
-    , _frPortRange = Nothing
-    , _frSelfLink = Nothing
-    , _frName = Nothing
-    , _frIPProtocol = Nothing
-    , _frCreationTimestamp = Nothing
-    , _frId = Nothing
-    , _frRegion = Nothing
-    , _frDescription = Nothing
-    , _frTarget = Nothing
-    }
-
--- | Value of the reserved IP address that this forwarding rule is serving on
--- behalf of. For global forwarding rules, the address must be a global IP;
--- for regional forwarding rules, the address must live in the same region
--- as the forwarding rule. If left empty (default value), an ephemeral IP
--- from the same scope (global or regional) will be assigned.
-frIPAddress :: Lens' ForwardingRule (Maybe Text)
-frIPAddress
-  = lens _frIPAddress (\ s a -> s{_frIPAddress = a})
-
--- | [Output Only] Type of the resource. Always compute#forwardingRule.
-frKind :: Lens' ForwardingRule Text
-frKind = lens _frKind (\ s a -> s{_frKind = a})
-
--- | Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets
--- addressed to ports in the specified range will be forwarded to target.
--- Forwarding rules with the same \`[IPAddress, IPProtocol]\` pair must
--- have disjoint port ranges.
-frPortRange :: Lens' ForwardingRule (Maybe Text)
-frPortRange
-  = lens _frPortRange (\ s a -> s{_frPortRange = a})
-
--- | [Output Only] Server-defined URL for the resource.
-frSelfLink :: Lens' ForwardingRule (Maybe Text)
-frSelfLink
-  = lens _frSelfLink (\ s a -> s{_frSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-frName :: Lens' ForwardingRule (Maybe Text)
-frName = lens _frName (\ s a -> s{_frName = a})
-
--- | The IP protocol to which this rule applies. Valid options are TCP, UDP,
--- ESP, AH or SCTP.
-frIPProtocol :: Lens' ForwardingRule (Maybe ForwardingRuleIPProtocol)
-frIPProtocol
-  = lens _frIPProtocol (\ s a -> s{_frIPProtocol = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-frCreationTimestamp :: Lens' ForwardingRule (Maybe Text)
-frCreationTimestamp
-  = lens _frCreationTimestamp
-      (\ s a -> s{_frCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-frId :: Lens' ForwardingRule (Maybe Word64)
-frId
-  = lens _frId (\ s a -> s{_frId = a}) .
-      mapping _Coerce
-
--- | [Output Only] URL of the region where the regional forwarding rule
--- resides. This field is not applicable to global forwarding rules.
-frRegion :: Lens' ForwardingRule (Maybe Text)
-frRegion = lens _frRegion (\ s a -> s{_frRegion = a})
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-frDescription :: Lens' ForwardingRule (Maybe Text)
-frDescription
-  = lens _frDescription
-      (\ s a -> s{_frDescription = a})
-
--- | The URL of the target resource to receive the matched traffic. For
--- regional forwarding rules, this target must live in the same region as
--- the forwarding rule. For global forwarding rules, this target must be a
--- global TargetHttpProxy or TargetHttpsProxy resource.
-frTarget :: Lens' ForwardingRule (Maybe Text)
-frTarget = lens _frTarget (\ s a -> s{_frTarget = a})
-
-instance FromJSON ForwardingRule where
-        parseJSON
-          = withObject "ForwardingRule"
-              (\ o ->
-                 ForwardingRule <$>
-                   (o .:? "IPAddress") <*>
-                     (o .:? "kind" .!= "compute#forwardingRule")
-                     <*> (o .:? "portRange")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "IPProtocol")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "region")
-                     <*> (o .:? "description")
-                     <*> (o .:? "target"))
-
-instance ToJSON ForwardingRule where
-        toJSON ForwardingRule{..}
-          = object
-              (catMaybes
-                 [("IPAddress" .=) <$> _frIPAddress,
-                  Just ("kind" .= _frKind),
-                  ("portRange" .=) <$> _frPortRange,
-                  ("selfLink" .=) <$> _frSelfLink,
-                  ("name" .=) <$> _frName,
-                  ("IPProtocol" .=) <$> _frIPProtocol,
-                  ("creationTimestamp" .=) <$> _frCreationTimestamp,
-                  ("id" .=) <$> _frId, ("region" .=) <$> _frRegion,
-                  ("description" .=) <$> _frDescription,
-                  ("target" .=) <$> _frTarget])
-
--- | Contains a list of UrlMap resources.
---
--- /See:/ 'urlMapList' smart constructor.
-data URLMapList = URLMapList
-    { _umlNextPageToken :: !(Maybe Text)
-    , _umlKind          :: !Text
-    , _umlItems         :: !(Maybe [URLMap])
-    , _umlSelfLink      :: !(Maybe Text)
-    , _umlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMapList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umlNextPageToken'
---
--- * 'umlKind'
---
--- * 'umlItems'
---
--- * 'umlSelfLink'
---
--- * 'umlId'
-urlMapList
-    :: URLMapList
-urlMapList =
-    URLMapList
-    { _umlNextPageToken = Nothing
-    , _umlKind = "compute#urlMapList"
-    , _umlItems = Nothing
-    , _umlSelfLink = Nothing
-    , _umlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-umlNextPageToken :: Lens' URLMapList (Maybe Text)
-umlNextPageToken
-  = lens _umlNextPageToken
-      (\ s a -> s{_umlNextPageToken = a})
-
--- | Type of resource.
-umlKind :: Lens' URLMapList Text
-umlKind = lens _umlKind (\ s a -> s{_umlKind = a})
-
--- | A list of UrlMap resources.
-umlItems :: Lens' URLMapList [URLMap]
-umlItems
-  = lens _umlItems (\ s a -> s{_umlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-umlSelfLink :: Lens' URLMapList (Maybe Text)
-umlSelfLink
-  = lens _umlSelfLink (\ s a -> s{_umlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Set by the server.
-umlId :: Lens' URLMapList (Maybe Text)
-umlId = lens _umlId (\ s a -> s{_umlId = a})
-
-instance FromJSON URLMapList where
-        parseJSON
-          = withObject "URLMapList"
-              (\ o ->
-                 URLMapList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#urlMapList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON URLMapList where
-        toJSON URLMapList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _umlNextPageToken,
-                  Just ("kind" .= _umlKind),
-                  ("items" .=) <$> _umlItems,
-                  ("selfLink" .=) <$> _umlSelfLink,
-                  ("id" .=) <$> _umlId])
-
---
--- /See:/ 'forwardingRulesScopedListWarningDataItem' smart constructor.
-data ForwardingRulesScopedListWarningDataItem = ForwardingRulesScopedListWarningDataItem
-    { _frslwdiValue :: !(Maybe Text)
-    , _frslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRulesScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frslwdiValue'
---
--- * 'frslwdiKey'
-forwardingRulesScopedListWarningDataItem
-    :: ForwardingRulesScopedListWarningDataItem
-forwardingRulesScopedListWarningDataItem =
-    ForwardingRulesScopedListWarningDataItem
-    { _frslwdiValue = Nothing
-    , _frslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-frslwdiValue :: Lens' ForwardingRulesScopedListWarningDataItem (Maybe Text)
-frslwdiValue
-  = lens _frslwdiValue (\ s a -> s{_frslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-frslwdiKey :: Lens' ForwardingRulesScopedListWarningDataItem (Maybe Text)
-frslwdiKey
-  = lens _frslwdiKey (\ s a -> s{_frslwdiKey = a})
-
-instance FromJSON
-         ForwardingRulesScopedListWarningDataItem where
-        parseJSON
-          = withObject
-              "ForwardingRulesScopedListWarningDataItem"
-              (\ o ->
-                 ForwardingRulesScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON
-         ForwardingRulesScopedListWarningDataItem where
-        toJSON ForwardingRulesScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _frslwdiValue,
-                  ("key" .=) <$> _frslwdiKey])
-
---
--- /See:/ 'instanceGroupManagersScopedListWarningDataItem' smart constructor.
-data InstanceGroupManagersScopedListWarningDataItem = InstanceGroupManagersScopedListWarningDataItem
-    { _igmslwdiValue :: !(Maybe Text)
-    , _igmslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmslwdiValue'
---
--- * 'igmslwdiKey'
-instanceGroupManagersScopedListWarningDataItem
-    :: InstanceGroupManagersScopedListWarningDataItem
-instanceGroupManagersScopedListWarningDataItem =
-    InstanceGroupManagersScopedListWarningDataItem
-    { _igmslwdiValue = Nothing
-    , _igmslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-igmslwdiValue :: Lens' InstanceGroupManagersScopedListWarningDataItem (Maybe Text)
-igmslwdiValue
-  = lens _igmslwdiValue
-      (\ s a -> s{_igmslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-igmslwdiKey :: Lens' InstanceGroupManagersScopedListWarningDataItem (Maybe Text)
-igmslwdiKey
-  = lens _igmslwdiKey (\ s a -> s{_igmslwdiKey = a})
-
-instance FromJSON
-         InstanceGroupManagersScopedListWarningDataItem where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersScopedListWarningDataItem"
-              (\ o ->
-                 InstanceGroupManagersScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON
-         InstanceGroupManagersScopedListWarningDataItem where
-        toJSON
-          InstanceGroupManagersScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _igmslwdiValue,
-                  ("key" .=) <$> _igmslwdiKey])
-
--- | A Project resource. Projects can only be created in the Google
--- Developers Console. Unless marked otherwise, values can only be modified
--- in the console.
---
--- /See:/ 'project' smart constructor.
-data Project = Project
-    { _pKind                   :: !Text
-    , _pUsageExportLocation    :: !(Maybe UsageExportLocation)
-    , _pSelfLink               :: !(Maybe Text)
-    , _pName                   :: !(Maybe Text)
-    , _pCreationTimestamp      :: !(Maybe Text)
-    , _pEnabledFeatures        :: !(Maybe [Text])
-    , _pQuotas                 :: !(Maybe [Quota])
-    , _pId                     :: !(Maybe (Textual Word64))
-    , _pDescription            :: !(Maybe Text)
-    , _pCommonInstanceMetadata :: !(Maybe Metadata)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Project' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pKind'
---
--- * 'pUsageExportLocation'
---
--- * 'pSelfLink'
---
--- * 'pName'
---
--- * 'pCreationTimestamp'
---
--- * 'pEnabledFeatures'
---
--- * 'pQuotas'
---
--- * 'pId'
---
--- * 'pDescription'
---
--- * 'pCommonInstanceMetadata'
-project
-    :: Project
-project =
-    Project
-    { _pKind = "compute#project"
-    , _pUsageExportLocation = Nothing
-    , _pSelfLink = Nothing
-    , _pName = Nothing
-    , _pCreationTimestamp = Nothing
-    , _pEnabledFeatures = Nothing
-    , _pQuotas = Nothing
-    , _pId = Nothing
-    , _pDescription = Nothing
-    , _pCommonInstanceMetadata = Nothing
-    }
-
--- | [Output Only] Type of the resource. Always compute#project for projects.
-pKind :: Lens' Project Text
-pKind = lens _pKind (\ s a -> s{_pKind = a})
-
--- | The location in Cloud Storage and naming method of the daily usage
--- report.
-pUsageExportLocation :: Lens' Project (Maybe UsageExportLocation)
-pUsageExportLocation
-  = lens _pUsageExportLocation
-      (\ s a -> s{_pUsageExportLocation = a})
-
--- | [Output Only] Server-defined URL for the resource.
-pSelfLink :: Lens' Project (Maybe Text)
-pSelfLink
-  = lens _pSelfLink (\ s a -> s{_pSelfLink = a})
-
--- | Name of the resource.
-pName :: Lens' Project (Maybe Text)
-pName = lens _pName (\ s a -> s{_pName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-pCreationTimestamp :: Lens' Project (Maybe Text)
-pCreationTimestamp
-  = lens _pCreationTimestamp
-      (\ s a -> s{_pCreationTimestamp = a})
-
--- | Restricted features enabled for use on this project.
-pEnabledFeatures :: Lens' Project [Text]
-pEnabledFeatures
-  = lens _pEnabledFeatures
-      (\ s a -> s{_pEnabledFeatures = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Quotas assigned to this project.
-pQuotas :: Lens' Project [Quota]
-pQuotas
-  = lens _pQuotas (\ s a -> s{_pQuotas = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-pId :: Lens' Project (Maybe Word64)
-pId
-  = lens _pId (\ s a -> s{_pId = a}) . mapping _Coerce
-
--- | An optional textual description of the resource.
-pDescription :: Lens' Project (Maybe Text)
-pDescription
-  = lens _pDescription (\ s a -> s{_pDescription = a})
-
--- | Metadata key\/value pairs available to all instances contained in this
--- project. See Custom metadata for more information.
-pCommonInstanceMetadata :: Lens' Project (Maybe Metadata)
-pCommonInstanceMetadata
-  = lens _pCommonInstanceMetadata
-      (\ s a -> s{_pCommonInstanceMetadata = a})
-
-instance FromJSON Project where
-        parseJSON
-          = withObject "Project"
-              (\ o ->
-                 Project <$>
-                   (o .:? "kind" .!= "compute#project") <*>
-                     (o .:? "usageExportLocation")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "enabledFeatures" .!= mempty)
-                     <*> (o .:? "quotas" .!= mempty)
-                     <*> (o .:? "id")
-                     <*> (o .:? "description")
-                     <*> (o .:? "commonInstanceMetadata"))
-
-instance ToJSON Project where
-        toJSON Project{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _pKind),
-                  ("usageExportLocation" .=) <$> _pUsageExportLocation,
-                  ("selfLink" .=) <$> _pSelfLink,
-                  ("name" .=) <$> _pName,
-                  ("creationTimestamp" .=) <$> _pCreationTimestamp,
-                  ("enabledFeatures" .=) <$> _pEnabledFeatures,
-                  ("quotas" .=) <$> _pQuotas, ("id" .=) <$> _pId,
-                  ("description" .=) <$> _pDescription,
-                  ("commonInstanceMetadata" .=) <$>
-                    _pCommonInstanceMetadata])
-
--- | An Operation resource, used to manage asynchronous API requests.
---
--- /See:/ 'operation' smart constructor.
-data Operation = Operation
-    { _oTargetId            :: !(Maybe (Textual Word64))
-    , _oStatus              :: !(Maybe OperationStatus)
-    , _oInsertTime          :: !(Maybe Text)
-    , _oProgress            :: !(Maybe (Textual Int32))
-    , _oStartTime           :: !(Maybe Text)
-    , _oKind                :: !Text
-    , _oError               :: !(Maybe OperationError)
-    , _oHTTPErrorMessage    :: !(Maybe Text)
-    , _oZone                :: !(Maybe Text)
-    , _oWarnings            :: !(Maybe [OperationWarningsItem])
-    , _oHTTPErrorStatusCode :: !(Maybe (Textual Int32))
-    , _oUser                :: !(Maybe Text)
-    , _oSelfLink            :: !(Maybe Text)
-    , _oName                :: !(Maybe Text)
-    , _oStatusMessage       :: !(Maybe Text)
-    , _oCreationTimestamp   :: !(Maybe Text)
-    , _oEndTime             :: !(Maybe Text)
-    , _oId                  :: !(Maybe (Textual Word64))
-    , _oOperationType       :: !(Maybe Text)
-    , _oRegion              :: !(Maybe Text)
-    , _oTargetLink          :: !(Maybe Text)
-    , _oClientOperationId   :: !(Maybe Text)
-    } 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:
---
--- * 'oTargetId'
---
--- * 'oStatus'
---
--- * 'oInsertTime'
---
--- * 'oProgress'
---
--- * 'oStartTime'
---
--- * 'oKind'
---
--- * 'oError'
---
--- * 'oHTTPErrorMessage'
---
--- * 'oZone'
---
--- * 'oWarnings'
---
--- * 'oHTTPErrorStatusCode'
---
--- * 'oUser'
---
--- * 'oSelfLink'
---
--- * 'oName'
---
--- * 'oStatusMessage'
---
--- * 'oCreationTimestamp'
---
--- * 'oEndTime'
---
--- * 'oId'
---
--- * 'oOperationType'
---
--- * 'oRegion'
---
--- * 'oTargetLink'
---
--- * 'oClientOperationId'
-operation
-    :: Operation
-operation =
-    Operation
-    { _oTargetId = Nothing
-    , _oStatus = Nothing
-    , _oInsertTime = Nothing
-    , _oProgress = Nothing
-    , _oStartTime = Nothing
-    , _oKind = "compute#operation"
-    , _oError = Nothing
-    , _oHTTPErrorMessage = Nothing
-    , _oZone = Nothing
-    , _oWarnings = Nothing
-    , _oHTTPErrorStatusCode = Nothing
-    , _oUser = Nothing
-    , _oSelfLink = Nothing
-    , _oName = Nothing
-    , _oStatusMessage = Nothing
-    , _oCreationTimestamp = Nothing
-    , _oEndTime = Nothing
-    , _oId = Nothing
-    , _oOperationType = Nothing
-    , _oRegion = Nothing
-    , _oTargetLink = Nothing
-    , _oClientOperationId = Nothing
-    }
-
--- | [Output Only] Unique target ID which identifies a particular incarnation
--- of the target.
-oTargetId :: Lens' Operation (Maybe Word64)
-oTargetId
-  = lens _oTargetId (\ s a -> s{_oTargetId = a}) .
-      mapping _Coerce
-
--- | [Output Only] Status of the operation. Can be one of the following:
--- PENDING, RUNNING, or DONE.
-oStatus :: Lens' Operation (Maybe OperationStatus)
-oStatus = lens _oStatus (\ s a -> s{_oStatus = a})
-
--- | [Output Only] The time that this operation was requested. This is in
--- RFC3339 text format.
-oInsertTime :: Lens' Operation (Maybe Text)
-oInsertTime
-  = lens _oInsertTime (\ s a -> s{_oInsertTime = a})
-
--- | [Output Only] An optional progress indicator that ranges from 0 to 100.
--- There is no requirement that this be linear or support any granularity
--- of operations. This should not be used to guess at when the operation
--- will be complete. This number should monotonically increase as the
--- operation progresses.
-oProgress :: Lens' Operation (Maybe Int32)
-oProgress
-  = lens _oProgress (\ s a -> s{_oProgress = a}) .
-      mapping _Coerce
-
--- | [Output Only] The time that this operation was started by the server.
--- This is in RFC3339 text format.
-oStartTime :: Lens' Operation (Maybe Text)
-oStartTime
-  = lens _oStartTime (\ s a -> s{_oStartTime = a})
-
--- | [Output Only] Type of the resource. Always compute#operation for
--- Operation resources.
-oKind :: Lens' Operation Text
-oKind = lens _oKind (\ s a -> s{_oKind = a})
-
--- | [Output Only] If errors are generated during processing of the
--- operation, this field will be populated.
-oError :: Lens' Operation (Maybe OperationError)
-oError = lens _oError (\ s a -> s{_oError = a})
-
--- | [Output Only] If the operation fails, this field contains the HTTP error
--- message that was returned, such as NOT FOUND.
-oHTTPErrorMessage :: Lens' Operation (Maybe Text)
-oHTTPErrorMessage
-  = lens _oHTTPErrorMessage
-      (\ s a -> s{_oHTTPErrorMessage = a})
-
--- | [Output Only] URL of the zone where the operation resides.
-oZone :: Lens' Operation (Maybe Text)
-oZone = lens _oZone (\ s a -> s{_oZone = a})
-
--- | [Output Only] If warning messages are generated during processing of the
--- operation, this field will be populated.
-oWarnings :: Lens' Operation [OperationWarningsItem]
-oWarnings
-  = lens _oWarnings (\ s a -> s{_oWarnings = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] If the operation fails, this field contains the HTTP error
--- message that was returned, such as 404.
-oHTTPErrorStatusCode :: Lens' Operation (Maybe Int32)
-oHTTPErrorStatusCode
-  = lens _oHTTPErrorStatusCode
-      (\ s a -> s{_oHTTPErrorStatusCode = a})
-      . mapping _Coerce
-
--- | [Output Only] User who requested the operation, for example:
--- user\'example.com.
-oUser :: Lens' Operation (Maybe Text)
-oUser = lens _oUser (\ s a -> s{_oUser = a})
-
--- | [Output Only] Server-defined URL for the resource.
-oSelfLink :: Lens' Operation (Maybe Text)
-oSelfLink
-  = lens _oSelfLink (\ s a -> s{_oSelfLink = a})
-
--- | [Output Only] Name of the resource.
-oName :: Lens' Operation (Maybe Text)
-oName = lens _oName (\ s a -> s{_oName = a})
-
--- | [Output Only] An optional textual description of the current status of
--- the operation.
-oStatusMessage :: Lens' Operation (Maybe Text)
-oStatusMessage
-  = lens _oStatusMessage
-      (\ s a -> s{_oStatusMessage = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-oCreationTimestamp :: Lens' Operation (Maybe Text)
-oCreationTimestamp
-  = lens _oCreationTimestamp
-      (\ s a -> s{_oCreationTimestamp = a})
-
--- | [Output Only] The time that this operation was completed. This is in
--- RFC3339 text format.
-oEndTime :: Lens' Operation (Maybe Text)
-oEndTime = lens _oEndTime (\ s a -> s{_oEndTime = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-oId :: Lens' Operation (Maybe Word64)
-oId
-  = lens _oId (\ s a -> s{_oId = a}) . mapping _Coerce
-
--- | [Output Only] Type of the operation, such as insert,
--- compute.instanceGroups.update, or compute.instanceGroups.delete.
-oOperationType :: Lens' Operation (Maybe Text)
-oOperationType
-  = lens _oOperationType
-      (\ s a -> s{_oOperationType = a})
-
--- | [Output Only] URL of the region where the operation resides. Only
--- applicable for regional resources.
-oRegion :: Lens' Operation (Maybe Text)
-oRegion = lens _oRegion (\ s a -> s{_oRegion = a})
-
--- | [Output Only] URL of the resource the operation is mutating.
-oTargetLink :: Lens' Operation (Maybe Text)
-oTargetLink
-  = lens _oTargetLink (\ s a -> s{_oTargetLink = a})
-
--- | [Output Only] An optional identifier specified by the client when the
--- mutation was initiated. Must be unique for all Operation resources in
--- the project.
-oClientOperationId :: Lens' Operation (Maybe Text)
-oClientOperationId
-  = lens _oClientOperationId
-      (\ s a -> s{_oClientOperationId = a})
-
-instance FromJSON Operation where
-        parseJSON
-          = withObject "Operation"
-              (\ o ->
-                 Operation <$>
-                   (o .:? "targetId") <*> (o .:? "status") <*>
-                     (o .:? "insertTime")
-                     <*> (o .:? "progress")
-                     <*> (o .:? "startTime")
-                     <*> (o .:? "kind" .!= "compute#operation")
-                     <*> (o .:? "error")
-                     <*> (o .:? "httpErrorMessage")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "warnings" .!= mempty)
-                     <*> (o .:? "httpErrorStatusCode")
-                     <*> (o .:? "user")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "statusMessage")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "endTime")
-                     <*> (o .:? "id")
-                     <*> (o .:? "operationType")
-                     <*> (o .:? "region")
-                     <*> (o .:? "targetLink")
-                     <*> (o .:? "clientOperationId"))
-
-instance ToJSON Operation where
-        toJSON Operation{..}
-          = object
-              (catMaybes
-                 [("targetId" .=) <$> _oTargetId,
-                  ("status" .=) <$> _oStatus,
-                  ("insertTime" .=) <$> _oInsertTime,
-                  ("progress" .=) <$> _oProgress,
-                  ("startTime" .=) <$> _oStartTime,
-                  Just ("kind" .= _oKind), ("error" .=) <$> _oError,
-                  ("httpErrorMessage" .=) <$> _oHTTPErrorMessage,
-                  ("zone" .=) <$> _oZone,
-                  ("warnings" .=) <$> _oWarnings,
-                  ("httpErrorStatusCode" .=) <$> _oHTTPErrorStatusCode,
-                  ("user" .=) <$> _oUser,
-                  ("selfLink" .=) <$> _oSelfLink,
-                  ("name" .=) <$> _oName,
-                  ("statusMessage" .=) <$> _oStatusMessage,
-                  ("creationTimestamp" .=) <$> _oCreationTimestamp,
-                  ("endTime" .=) <$> _oEndTime, ("id" .=) <$> _oId,
-                  ("operationType" .=) <$> _oOperationType,
-                  ("region" .=) <$> _oRegion,
-                  ("targetLink" .=) <$> _oTargetLink,
-                  ("clientOperationId" .=) <$> _oClientOperationId])
-
---
--- /See:/ 'disksScopedListWarningDataItem' smart constructor.
-data DisksScopedListWarningDataItem = DisksScopedListWarningDataItem
-    { _dslwdiValue :: !(Maybe Text)
-    , _dslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisksScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dslwdiValue'
---
--- * 'dslwdiKey'
-disksScopedListWarningDataItem
-    :: DisksScopedListWarningDataItem
-disksScopedListWarningDataItem =
-    DisksScopedListWarningDataItem
-    { _dslwdiValue = Nothing
-    , _dslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-dslwdiValue :: Lens' DisksScopedListWarningDataItem (Maybe Text)
-dslwdiValue
-  = lens _dslwdiValue (\ s a -> s{_dslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-dslwdiKey :: Lens' DisksScopedListWarningDataItem (Maybe Text)
-dslwdiKey
-  = lens _dslwdiKey (\ s a -> s{_dslwdiKey = a})
-
-instance FromJSON DisksScopedListWarningDataItem
-         where
-        parseJSON
-          = withObject "DisksScopedListWarningDataItem"
-              (\ o ->
-                 DisksScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON DisksScopedListWarningDataItem where
-        toJSON DisksScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _dslwdiValue,
-                  ("key" .=) <$> _dslwdiKey])
-
--- | A Disk resource.
---
--- /See:/ 'disk' smart constructor.
-data Disk = Disk
-    { _dStatus              :: !(Maybe DiskStatus)
-    , _dSourceSnapshotId    :: !(Maybe Text)
-    , _dLastAttachTimestamp :: !(Maybe Text)
-    , _dUsers               :: !(Maybe [Text])
-    , _dSourceImage         :: !(Maybe Text)
-    , _dSizeGb              :: !(Maybe (Textual Int64))
-    , _dKind                :: !Text
-    , _dLastDetachTimestamp :: !(Maybe Text)
-    , _dZone                :: !(Maybe Text)
-    , _dSelfLink            :: !(Maybe Text)
-    , _dName                :: !(Maybe Text)
-    , _dSourceImageId       :: !(Maybe Text)
-    , _dCreationTimestamp   :: !(Maybe Text)
-    , _dId                  :: !(Maybe (Textual Word64))
-    , _dLicenses            :: !(Maybe [Text])
-    , _dOptions             :: !(Maybe Text)
-    , _dType                :: !(Maybe Text)
-    , _dDescription         :: !(Maybe Text)
-    , _dSourceSnapshot      :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Disk' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dStatus'
---
--- * 'dSourceSnapshotId'
---
--- * 'dLastAttachTimestamp'
---
--- * 'dUsers'
---
--- * 'dSourceImage'
---
--- * 'dSizeGb'
---
--- * 'dKind'
---
--- * 'dLastDetachTimestamp'
---
--- * 'dZone'
---
--- * 'dSelfLink'
---
--- * 'dName'
---
--- * 'dSourceImageId'
---
--- * 'dCreationTimestamp'
---
--- * 'dId'
---
--- * 'dLicenses'
---
--- * 'dOptions'
---
--- * 'dType'
---
--- * 'dDescription'
---
--- * 'dSourceSnapshot'
-disk
-    :: Disk
-disk =
-    Disk
-    { _dStatus = Nothing
-    , _dSourceSnapshotId = Nothing
-    , _dLastAttachTimestamp = Nothing
-    , _dUsers = Nothing
-    , _dSourceImage = Nothing
-    , _dSizeGb = Nothing
-    , _dKind = "compute#disk"
-    , _dLastDetachTimestamp = Nothing
-    , _dZone = Nothing
-    , _dSelfLink = Nothing
-    , _dName = Nothing
-    , _dSourceImageId = Nothing
-    , _dCreationTimestamp = Nothing
-    , _dId = Nothing
-    , _dLicenses = Nothing
-    , _dOptions = Nothing
-    , _dType = Nothing
-    , _dDescription = Nothing
-    , _dSourceSnapshot = Nothing
-    }
-
--- | [Output Only] The status of disk creation. Applicable statuses includes:
--- CREATING, FAILED, READY, RESTORING.
-dStatus :: Lens' Disk (Maybe DiskStatus)
-dStatus = lens _dStatus (\ s a -> s{_dStatus = a})
-
--- | [Output Only] The unique ID of the snapshot used to create this disk.
--- This value identifies the exact snapshot that was used to create this
--- persistent disk. For example, if you created the persistent disk from a
--- snapshot that was later deleted and recreated under the same name, the
--- source snapshot ID would identify the exact version of the snapshot that
--- was used.
-dSourceSnapshotId :: Lens' Disk (Maybe Text)
-dSourceSnapshotId
-  = lens _dSourceSnapshotId
-      (\ s a -> s{_dSourceSnapshotId = a})
-
--- | [Output Only] Last attach timestamp in RFC3339 text format.
-dLastAttachTimestamp :: Lens' Disk (Maybe Text)
-dLastAttachTimestamp
-  = lens _dLastAttachTimestamp
-      (\ s a -> s{_dLastAttachTimestamp = a})
-
--- | Links to the users of the disk (attached instances) in form:
--- project\/zones\/zone\/instances\/instance
-dUsers :: Lens' Disk [Text]
-dUsers
-  = lens _dUsers (\ s a -> s{_dUsers = a}) . _Default .
-      _Coerce
-
--- | The source image used to create this disk. If the source image is
--- deleted from the system, this field will not be set, even if an image
--- with the same name has been re-created. When creating a disk, you can
--- provide a private (custom) image using the following input, and Compute
--- Engine will use the corresponding image from your project. For example:
--- global\/images\/my-private-image Or you can provide an image from a
--- publicly-available project. For example, to use a Debian image from the
--- debian-cloud project, make sure to include the project in the URL:
--- projects\/debian-cloud\/global\/images\/debian-7-wheezy-vYYYYMMDD where
--- vYYYYMMDD is the image version. The fully-qualified URL will also work
--- in both cases.
-dSourceImage :: Lens' Disk (Maybe Text)
-dSourceImage
-  = lens _dSourceImage (\ s a -> s{_dSourceImage = a})
-
--- | Size of the persistent disk, specified in GB. You can specify this field
--- when creating a persistent disk using the sourceImage or sourceSnapshot
--- parameter, or specify it alone to create an empty persistent disk. If
--- you specify this field along with sourceImage or sourceSnapshot, the
--- value of sizeGb must not be less than the size of the sourceImage or the
--- size of the snapshot.
-dSizeGb :: Lens' Disk (Maybe Int64)
-dSizeGb
-  = lens _dSizeGb (\ s a -> s{_dSizeGb = a}) .
-      mapping _Coerce
-
--- | [Output Only] Type of the resource. Always compute#disk for disks.
-dKind :: Lens' Disk Text
-dKind = lens _dKind (\ s a -> s{_dKind = a})
-
--- | [Output Only] Last detach timestamp in RFC3339 text format.
-dLastDetachTimestamp :: Lens' Disk (Maybe Text)
-dLastDetachTimestamp
-  = lens _dLastDetachTimestamp
-      (\ s a -> s{_dLastDetachTimestamp = a})
-
--- | [Output Only] URL of the zone where the disk resides.
-dZone :: Lens' Disk (Maybe Text)
-dZone = lens _dZone (\ s a -> s{_dZone = a})
-
--- | [Output Only] Server-defined fully-qualified URL for this resource.
-dSelfLink :: Lens' Disk (Maybe Text)
-dSelfLink
-  = lens _dSelfLink (\ s a -> s{_dSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-dName :: Lens' Disk (Maybe Text)
-dName = lens _dName (\ s a -> s{_dName = a})
-
--- | The ID value of the image used to create this disk. This value
--- identifies the exact image that was used to create this persistent disk.
--- For example, if you created the persistent disk from an image that was
--- later deleted and recreated under the same name, the source image ID
--- would identify the exact version of the image that was used.
-dSourceImageId :: Lens' Disk (Maybe Text)
-dSourceImageId
-  = lens _dSourceImageId
-      (\ s a -> s{_dSourceImageId = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-dCreationTimestamp :: Lens' Disk (Maybe Text)
-dCreationTimestamp
-  = lens _dCreationTimestamp
-      (\ s a -> s{_dCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-dId :: Lens' Disk (Maybe Word64)
-dId
-  = lens _dId (\ s a -> s{_dId = a}) . mapping _Coerce
-
--- | Any applicable publicly visible licenses.
-dLicenses :: Lens' Disk [Text]
-dLicenses
-  = lens _dLicenses (\ s a -> s{_dLicenses = a}) .
-      _Default
-      . _Coerce
-
--- | Internal use only.
-dOptions :: Lens' Disk (Maybe Text)
-dOptions = lens _dOptions (\ s a -> s{_dOptions = a})
-
--- | URL of the disk type resource describing which disk type to use to
--- create the disk; provided by the client when the disk is created.
-dType :: Lens' Disk (Maybe Text)
-dType = lens _dType (\ s a -> s{_dType = a})
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-dDescription :: Lens' Disk (Maybe Text)
-dDescription
-  = lens _dDescription (\ s a -> s{_dDescription = a})
-
--- | The source snapshot used to create this disk. You can provide this as a
--- partial or full URL to the resource. For example, the following are
--- valid values: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/global\/snapshots\/snapshot
--- - projects\/project\/global\/snapshots\/snapshot -
--- global\/snapshots\/snapshot
-dSourceSnapshot :: Lens' Disk (Maybe Text)
-dSourceSnapshot
-  = lens _dSourceSnapshot
-      (\ s a -> s{_dSourceSnapshot = a})
-
-instance FromJSON Disk where
-        parseJSON
-          = withObject "Disk"
-              (\ o ->
-                 Disk <$>
-                   (o .:? "status") <*> (o .:? "sourceSnapshotId") <*>
-                     (o .:? "lastAttachTimestamp")
-                     <*> (o .:? "users" .!= mempty)
-                     <*> (o .:? "sourceImage")
-                     <*> (o .:? "sizeGb")
-                     <*> (o .:? "kind" .!= "compute#disk")
-                     <*> (o .:? "lastDetachTimestamp")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "sourceImageId")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "licenses" .!= mempty)
-                     <*> (o .:? "options")
-                     <*> (o .:? "type")
-                     <*> (o .:? "description")
-                     <*> (o .:? "sourceSnapshot"))
-
-instance ToJSON Disk where
-        toJSON Disk{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _dStatus,
-                  ("sourceSnapshotId" .=) <$> _dSourceSnapshotId,
-                  ("lastAttachTimestamp" .=) <$> _dLastAttachTimestamp,
-                  ("users" .=) <$> _dUsers,
-                  ("sourceImage" .=) <$> _dSourceImage,
-                  ("sizeGb" .=) <$> _dSizeGb, Just ("kind" .= _dKind),
-                  ("lastDetachTimestamp" .=) <$> _dLastDetachTimestamp,
-                  ("zone" .=) <$> _dZone,
-                  ("selfLink" .=) <$> _dSelfLink,
-                  ("name" .=) <$> _dName,
-                  ("sourceImageId" .=) <$> _dSourceImageId,
-                  ("creationTimestamp" .=) <$> _dCreationTimestamp,
-                  ("id" .=) <$> _dId, ("licenses" .=) <$> _dLicenses,
-                  ("options" .=) <$> _dOptions, ("type" .=) <$> _dType,
-                  ("description" .=) <$> _dDescription,
-                  ("sourceSnapshot" .=) <$> _dSourceSnapshot])
-
---
--- /See:/ 'diskMoveRequest' smart constructor.
-data DiskMoveRequest = DiskMoveRequest
-    { _dmrTargetDisk      :: !(Maybe Text)
-    , _dmrDestinationZone :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskMoveRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmrTargetDisk'
---
--- * 'dmrDestinationZone'
-diskMoveRequest
-    :: DiskMoveRequest
-diskMoveRequest =
-    DiskMoveRequest
-    { _dmrTargetDisk = Nothing
-    , _dmrDestinationZone = Nothing
-    }
-
--- | The URL of the target disk to move. This can be a full or partial URL.
--- For example, the following are all valid URLs to a disk: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/disks\/disk
--- - projects\/project\/zones\/zone\/disks\/disk - zones\/zone\/disks\/disk
-dmrTargetDisk :: Lens' DiskMoveRequest (Maybe Text)
-dmrTargetDisk
-  = lens _dmrTargetDisk
-      (\ s a -> s{_dmrTargetDisk = a})
-
--- | The URL of the destination zone to move the disk to. This can be a full
--- or partial URL. For example, the following are all valid URLs to a zone:
--- -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone
--- - projects\/project\/zones\/zone - zones\/zone
-dmrDestinationZone :: Lens' DiskMoveRequest (Maybe Text)
-dmrDestinationZone
-  = lens _dmrDestinationZone
-      (\ s a -> s{_dmrDestinationZone = a})
-
-instance FromJSON DiskMoveRequest where
-        parseJSON
-          = withObject "DiskMoveRequest"
-              (\ o ->
-                 DiskMoveRequest <$>
-                   (o .:? "targetDisk") <*> (o .:? "destinationZone"))
-
-instance ToJSON DiskMoveRequest where
-        toJSON DiskMoveRequest{..}
-          = object
-              (catMaybes
-                 [("targetDisk" .=) <$> _dmrTargetDisk,
-                  ("destinationZone" .=) <$> _dmrDestinationZone])
-
--- | Load balancing utilization policy.
---
--- /See:/ 'autoscalingPolicyLoadBalancingUtilization' smart constructor.
-newtype AutoscalingPolicyLoadBalancingUtilization = AutoscalingPolicyLoadBalancingUtilization
-    { _aplbuUtilizationTarget :: Maybe (Textual Double)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalingPolicyLoadBalancingUtilization' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aplbuUtilizationTarget'
-autoscalingPolicyLoadBalancingUtilization
-    :: AutoscalingPolicyLoadBalancingUtilization
-autoscalingPolicyLoadBalancingUtilization =
-    AutoscalingPolicyLoadBalancingUtilization
-    { _aplbuUtilizationTarget = Nothing
-    }
-
--- | Fraction of backend capacity utilization (set in HTTP load balancing
--- configuration) that Autoscaler should maintain. Must be a positive float
--- value. If not defined, the default is 0.8. For example if your
--- maxRatePerInstance capacity (in HTTP Load Balancing configuration) is
--- set at 10 and you would like to keep number of instances such that each
--- instance receives 7 QPS on average, set this to 0.7.
-aplbuUtilizationTarget :: Lens' AutoscalingPolicyLoadBalancingUtilization (Maybe Double)
-aplbuUtilizationTarget
-  = lens _aplbuUtilizationTarget
-      (\ s a -> s{_aplbuUtilizationTarget = a})
-      . mapping _Coerce
-
-instance FromJSON
-         AutoscalingPolicyLoadBalancingUtilization where
-        parseJSON
-          = withObject
-              "AutoscalingPolicyLoadBalancingUtilization"
-              (\ o ->
-                 AutoscalingPolicyLoadBalancingUtilization <$>
-                   (o .:? "utilizationTarget"))
-
-instance ToJSON
-         AutoscalingPolicyLoadBalancingUtilization where
-        toJSON AutoscalingPolicyLoadBalancingUtilization{..}
-          = object
-              (catMaybes
-                 [("utilizationTarget" .=) <$>
-                    _aplbuUtilizationTarget])
-
---
--- /See:/ 'targetPoolsScopedListWarningDataItem' smart constructor.
-data TargetPoolsScopedListWarningDataItem = TargetPoolsScopedListWarningDataItem
-    { _tpslwdiValue :: !(Maybe Text)
-    , _tpslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpslwdiValue'
---
--- * 'tpslwdiKey'
-targetPoolsScopedListWarningDataItem
-    :: TargetPoolsScopedListWarningDataItem
-targetPoolsScopedListWarningDataItem =
-    TargetPoolsScopedListWarningDataItem
-    { _tpslwdiValue = Nothing
-    , _tpslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-tpslwdiValue :: Lens' TargetPoolsScopedListWarningDataItem (Maybe Text)
-tpslwdiValue
-  = lens _tpslwdiValue (\ s a -> s{_tpslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-tpslwdiKey :: Lens' TargetPoolsScopedListWarningDataItem (Maybe Text)
-tpslwdiKey
-  = lens _tpslwdiKey (\ s a -> s{_tpslwdiKey = a})
-
-instance FromJSON
-         TargetPoolsScopedListWarningDataItem where
-        parseJSON
-          = withObject "TargetPoolsScopedListWarningDataItem"
-              (\ o ->
-                 TargetPoolsScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON TargetPoolsScopedListWarningDataItem
-         where
-        toJSON TargetPoolsScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _tpslwdiValue,
-                  ("key" .=) <$> _tpslwdiKey])
-
--- | InstanceGroupManagers Next available tag: 19
---
--- /See:/ 'instanceGroupManager' smart constructor.
-data InstanceGroupManager = InstanceGroupManager
-    { _igmKind              :: !Text
-    , _igmFingerprint       :: !(Maybe (Textual Word8))
-    , _igmBaseInstanceName  :: !(Maybe Text)
-    , _igmZone              :: !(Maybe Text)
-    , _igmInstanceTemplate  :: !(Maybe Text)
-    , _igmTargetSize        :: !(Maybe (Textual Int32))
-    , _igmSelfLink          :: !(Maybe Text)
-    , _igmCurrentActions    :: !(Maybe InstanceGroupManagerActionsSummary)
-    , _igmName              :: !(Maybe Text)
-    , _igmCreationTimestamp :: !(Maybe Text)
-    , _igmId                :: !(Maybe (Textual Word64))
-    , _igmTargetPools       :: !(Maybe [Text])
-    , _igmDescription       :: !(Maybe Text)
-    , _igmInstanceGroup     :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManager' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmKind'
---
--- * 'igmFingerprint'
---
--- * 'igmBaseInstanceName'
---
--- * 'igmZone'
---
--- * 'igmInstanceTemplate'
---
--- * 'igmTargetSize'
---
--- * 'igmSelfLink'
---
--- * 'igmCurrentActions'
---
--- * 'igmName'
---
--- * 'igmCreationTimestamp'
---
--- * 'igmId'
---
--- * 'igmTargetPools'
---
--- * 'igmDescription'
---
--- * 'igmInstanceGroup'
-instanceGroupManager
-    :: InstanceGroupManager
-instanceGroupManager =
-    InstanceGroupManager
-    { _igmKind = "compute#instanceGroupManager"
-    , _igmFingerprint = Nothing
-    , _igmBaseInstanceName = Nothing
-    , _igmZone = Nothing
-    , _igmInstanceTemplate = Nothing
-    , _igmTargetSize = Nothing
-    , _igmSelfLink = Nothing
-    , _igmCurrentActions = Nothing
-    , _igmName = Nothing
-    , _igmCreationTimestamp = Nothing
-    , _igmId = Nothing
-    , _igmTargetPools = Nothing
-    , _igmDescription = Nothing
-    , _igmInstanceGroup = Nothing
-    }
-
--- | [Output Only] The resource type, which is always
--- compute#instanceGroupManager for managed instance groups.
-igmKind :: Lens' InstanceGroupManager Text
-igmKind = lens _igmKind (\ s a -> s{_igmKind = a})
-
--- | [Output Only] The fingerprint of the target pools information. You can
--- use this optional field for optimistic locking when you update the
--- target pool entries.
-igmFingerprint :: Lens' InstanceGroupManager (Maybe Word8)
-igmFingerprint
-  = lens _igmFingerprint
-      (\ s a -> s{_igmFingerprint = a})
-      . mapping _Coerce
-
--- | The base instance name to use for instances in this group. The value
--- must be 1-58 characters long. Instances are named by appending a hyphen
--- and a random four-character string to the base instance name. The base
--- instance name must comply with RFC1035.
-igmBaseInstanceName :: Lens' InstanceGroupManager (Maybe Text)
-igmBaseInstanceName
-  = lens _igmBaseInstanceName
-      (\ s a -> s{_igmBaseInstanceName = a})
-
--- | The name of the zone where the managed instance group is located.
-igmZone :: Lens' InstanceGroupManager (Maybe Text)
-igmZone = lens _igmZone (\ s a -> s{_igmZone = a})
-
--- | The URL of the instance template that is specified for this managed
--- instance group. The group uses this template to create all new instances
--- in the managed instance group.
-igmInstanceTemplate :: Lens' InstanceGroupManager (Maybe Text)
-igmInstanceTemplate
-  = lens _igmInstanceTemplate
-      (\ s a -> s{_igmInstanceTemplate = a})
-
--- | The target number of running instances for this managed instance group.
--- Deleting or abandoning instances reduces this number. Resizing the group
--- changes this number.
-igmTargetSize :: Lens' InstanceGroupManager (Maybe Int32)
-igmTargetSize
-  = lens _igmTargetSize
-      (\ s a -> s{_igmTargetSize = a})
-      . mapping _Coerce
-
--- | [Output Only] The URL for this managed instance group. The server
--- defines this URL.
-igmSelfLink :: Lens' InstanceGroupManager (Maybe Text)
-igmSelfLink
-  = lens _igmSelfLink (\ s a -> s{_igmSelfLink = a})
-
--- | [Output Only] The list of instance actions and the number of instances
--- in this managed instance group that are scheduled for each of those
--- actions.
-igmCurrentActions :: Lens' InstanceGroupManager (Maybe InstanceGroupManagerActionsSummary)
-igmCurrentActions
-  = lens _igmCurrentActions
-      (\ s a -> s{_igmCurrentActions = a})
-
--- | The name of the managed instance group. The name must be 1-63 characters
--- long, and comply with RFC1035.
-igmName :: Lens' InstanceGroupManager (Maybe Text)
-igmName = lens _igmName (\ s a -> s{_igmName = a})
-
--- | [Output Only] The creation timestamp for this managed instance group in
--- RFC3339 text format.
-igmCreationTimestamp :: Lens' InstanceGroupManager (Maybe Text)
-igmCreationTimestamp
-  = lens _igmCreationTimestamp
-      (\ s a -> s{_igmCreationTimestamp = a})
-
--- | [Output Only] A unique identifier for this resource type. The server
--- generates this identifier.
-igmId :: Lens' InstanceGroupManager (Maybe Word64)
-igmId
-  = lens _igmId (\ s a -> s{_igmId = a}) .
-      mapping _Coerce
-
--- | The URLs for all TargetPool resources to which instances in the
--- instanceGroup field are added. The target pools automatically apply to
--- all of the instances in the managed instance group.
-igmTargetPools :: Lens' InstanceGroupManager [Text]
-igmTargetPools
-  = lens _igmTargetPools
-      (\ s a -> s{_igmTargetPools = a})
-      . _Default
-      . _Coerce
-
--- | An optional text description for the managed instance group.
-igmDescription :: Lens' InstanceGroupManager (Maybe Text)
-igmDescription
-  = lens _igmDescription
-      (\ s a -> s{_igmDescription = a})
-
--- | [Output Only] The URL of the Instance Group resource.
-igmInstanceGroup :: Lens' InstanceGroupManager (Maybe Text)
-igmInstanceGroup
-  = lens _igmInstanceGroup
-      (\ s a -> s{_igmInstanceGroup = a})
-
-instance FromJSON InstanceGroupManager where
-        parseJSON
-          = withObject "InstanceGroupManager"
-              (\ o ->
-                 InstanceGroupManager <$>
-                   (o .:? "kind" .!= "compute#instanceGroupManager") <*>
-                     (o .:? "fingerprint")
-                     <*> (o .:? "baseInstanceName")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "instanceTemplate")
-                     <*> (o .:? "targetSize")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "currentActions")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "targetPools" .!= mempty)
-                     <*> (o .:? "description")
-                     <*> (o .:? "instanceGroup"))
-
-instance ToJSON InstanceGroupManager where
-        toJSON InstanceGroupManager{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _igmKind),
-                  ("fingerprint" .=) <$> _igmFingerprint,
-                  ("baseInstanceName" .=) <$> _igmBaseInstanceName,
-                  ("zone" .=) <$> _igmZone,
-                  ("instanceTemplate" .=) <$> _igmInstanceTemplate,
-                  ("targetSize" .=) <$> _igmTargetSize,
-                  ("selfLink" .=) <$> _igmSelfLink,
-                  ("currentActions" .=) <$> _igmCurrentActions,
-                  ("name" .=) <$> _igmName,
-                  ("creationTimestamp" .=) <$> _igmCreationTimestamp,
-                  ("id" .=) <$> _igmId,
-                  ("targetPools" .=) <$> _igmTargetPools,
-                  ("description" .=) <$> _igmDescription,
-                  ("instanceGroup" .=) <$> _igmInstanceGroup])
-
---
--- /See:/ 'instanceGroupsRemoveInstancesRequest' smart constructor.
-newtype InstanceGroupsRemoveInstancesRequest = InstanceGroupsRemoveInstancesRequest
-    { _igrirInstances :: Maybe [InstanceReference]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsRemoveInstancesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igrirInstances'
-instanceGroupsRemoveInstancesRequest
-    :: InstanceGroupsRemoveInstancesRequest
-instanceGroupsRemoveInstancesRequest =
-    InstanceGroupsRemoveInstancesRequest
-    { _igrirInstances = Nothing
-    }
-
--- | The list of instances to remove from the instance group.
-igrirInstances :: Lens' InstanceGroupsRemoveInstancesRequest [InstanceReference]
-igrirInstances
-  = lens _igrirInstances
-      (\ s a -> s{_igrirInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupsRemoveInstancesRequest where
-        parseJSON
-          = withObject "InstanceGroupsRemoveInstancesRequest"
-              (\ o ->
-                 InstanceGroupsRemoveInstancesRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON InstanceGroupsRemoveInstancesRequest
-         where
-        toJSON InstanceGroupsRemoveInstancesRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _igrirInstances])
-
---
--- /See:/ 'routeWarningsItemDataItem' smart constructor.
-data RouteWarningsItemDataItem = RouteWarningsItemDataItem
-    { _rwidiValue :: !(Maybe Text)
-    , _rwidiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteWarningsItemDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rwidiValue'
---
--- * 'rwidiKey'
-routeWarningsItemDataItem
-    :: RouteWarningsItemDataItem
-routeWarningsItemDataItem =
-    RouteWarningsItemDataItem
-    { _rwidiValue = Nothing
-    , _rwidiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-rwidiValue :: Lens' RouteWarningsItemDataItem (Maybe Text)
-rwidiValue
-  = lens _rwidiValue (\ s a -> s{_rwidiValue = a})
-
--- | [Output Only] A key for the warning data.
-rwidiKey :: Lens' RouteWarningsItemDataItem (Maybe Text)
-rwidiKey = lens _rwidiKey (\ s a -> s{_rwidiKey = a})
-
-instance FromJSON RouteWarningsItemDataItem where
-        parseJSON
-          = withObject "RouteWarningsItemDataItem"
-              (\ o ->
-                 RouteWarningsItemDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON RouteWarningsItemDataItem where
-        toJSON RouteWarningsItemDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _rwidiValue,
-                  ("key" .=) <$> _rwidiKey])
-
--- | [Output Only] A map of scoped instance lists.
---
--- /See:/ 'instanceAggregatedListItems' smart constructor.
-newtype InstanceAggregatedListItems = InstanceAggregatedListItems
-    { _ialiAddtional :: HashMap Text InstancesScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ialiAddtional'
-instanceAggregatedListItems
-    :: HashMap Text InstancesScopedList -- ^ 'ialiAddtional'
-    -> InstanceAggregatedListItems
-instanceAggregatedListItems pIaliAddtional_ =
-    InstanceAggregatedListItems
-    { _ialiAddtional = _Coerce # pIaliAddtional_
-    }
-
--- | Name of the scope containing this set of instances.
-ialiAddtional :: Lens' InstanceAggregatedListItems (HashMap Text InstancesScopedList)
-ialiAddtional
-  = lens _ialiAddtional
-      (\ s a -> s{_ialiAddtional = a})
-      . _Coerce
-
-instance FromJSON InstanceAggregatedListItems where
-        parseJSON
-          = withObject "InstanceAggregatedListItems"
-              (\ o ->
-                 InstanceAggregatedListItems <$> (parseJSONObject o))
-
-instance ToJSON InstanceAggregatedListItems where
-        toJSON = toJSON . _ialiAddtional
-
--- | Informational warning which replaces the list of autoscalers when the
--- list is empty.
---
--- /See:/ 'autoscalersScopedListWarning' smart constructor.
-data AutoscalersScopedListWarning = AutoscalersScopedListWarning
-    { _aslwData    :: !(Maybe [AutoscalersScopedListWarningDataItem])
-    , _aslwCode    :: !(Maybe AutoscalersScopedListWarningCode)
-    , _aslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalersScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aslwData'
---
--- * 'aslwCode'
---
--- * 'aslwMessage'
-autoscalersScopedListWarning
-    :: AutoscalersScopedListWarning
-autoscalersScopedListWarning =
-    AutoscalersScopedListWarning
-    { _aslwData = Nothing
-    , _aslwCode = Nothing
-    , _aslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-aslwData :: Lens' AutoscalersScopedListWarning [AutoscalersScopedListWarningDataItem]
-aslwData
-  = lens _aslwData (\ s a -> s{_aslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-aslwCode :: Lens' AutoscalersScopedListWarning (Maybe AutoscalersScopedListWarningCode)
-aslwCode = lens _aslwCode (\ s a -> s{_aslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-aslwMessage :: Lens' AutoscalersScopedListWarning (Maybe Text)
-aslwMessage
-  = lens _aslwMessage (\ s a -> s{_aslwMessage = a})
-
-instance FromJSON AutoscalersScopedListWarning where
-        parseJSON
-          = withObject "AutoscalersScopedListWarning"
-              (\ o ->
-                 AutoscalersScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON AutoscalersScopedListWarning where
-        toJSON AutoscalersScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _aslwData,
-                  ("code" .=) <$> _aslwCode,
-                  ("message" .=) <$> _aslwMessage])
-
--- | [Output Only] Encountered errors during the last attempt to create or
--- delete the instance.
---
--- /See:/ 'managedInstanceLastAttemptErrors' smart constructor.
-newtype ManagedInstanceLastAttemptErrors = ManagedInstanceLastAttemptErrors
-    { _milaeErrors :: Maybe [ManagedInstanceLastAttemptErrorsErrorsItem]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ManagedInstanceLastAttemptErrors' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'milaeErrors'
-managedInstanceLastAttemptErrors
-    :: ManagedInstanceLastAttemptErrors
-managedInstanceLastAttemptErrors =
-    ManagedInstanceLastAttemptErrors
-    { _milaeErrors = Nothing
-    }
-
--- | [Output Only] The array of errors encountered while processing this
--- operation.
-milaeErrors :: Lens' ManagedInstanceLastAttemptErrors [ManagedInstanceLastAttemptErrorsErrorsItem]
-milaeErrors
-  = lens _milaeErrors (\ s a -> s{_milaeErrors = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ManagedInstanceLastAttemptErrors
-         where
-        parseJSON
-          = withObject "ManagedInstanceLastAttemptErrors"
-              (\ o ->
-                 ManagedInstanceLastAttemptErrors <$>
-                   (o .:? "errors" .!= mempty))
-
-instance ToJSON ManagedInstanceLastAttemptErrors
-         where
-        toJSON ManagedInstanceLastAttemptErrors{..}
-          = object (catMaybes [("errors" .=) <$> _milaeErrors])
-
---
--- /See:/ 'targetPoolsRemoveInstanceRequest' smart constructor.
-newtype TargetPoolsRemoveInstanceRequest = TargetPoolsRemoveInstanceRequest
-    { _tprirInstances :: Maybe [InstanceReference]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsRemoveInstanceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tprirInstances'
-targetPoolsRemoveInstanceRequest
-    :: TargetPoolsRemoveInstanceRequest
-targetPoolsRemoveInstanceRequest =
-    TargetPoolsRemoveInstanceRequest
-    { _tprirInstances = Nothing
-    }
-
--- | URLs of the instances to be removed from targetPool.
-tprirInstances :: Lens' TargetPoolsRemoveInstanceRequest [InstanceReference]
-tprirInstances
-  = lens _tprirInstances
-      (\ s a -> s{_tprirInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPoolsRemoveInstanceRequest
-         where
-        parseJSON
-          = withObject "TargetPoolsRemoveInstanceRequest"
-              (\ o ->
-                 TargetPoolsRemoveInstanceRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON TargetPoolsRemoveInstanceRequest
-         where
-        toJSON TargetPoolsRemoveInstanceRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _tprirInstances])
-
---
--- /See:/ 'targetInstancesScopedListWarningDataItem' smart constructor.
-data TargetInstancesScopedListWarningDataItem = TargetInstancesScopedListWarningDataItem
-    { _tislwdiValue :: !(Maybe Text)
-    , _tislwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstancesScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tislwdiValue'
---
--- * 'tislwdiKey'
-targetInstancesScopedListWarningDataItem
-    :: TargetInstancesScopedListWarningDataItem
-targetInstancesScopedListWarningDataItem =
-    TargetInstancesScopedListWarningDataItem
-    { _tislwdiValue = Nothing
-    , _tislwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-tislwdiValue :: Lens' TargetInstancesScopedListWarningDataItem (Maybe Text)
-tislwdiValue
-  = lens _tislwdiValue (\ s a -> s{_tislwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-tislwdiKey :: Lens' TargetInstancesScopedListWarningDataItem (Maybe Text)
-tislwdiKey
-  = lens _tislwdiKey (\ s a -> s{_tislwdiKey = a})
-
-instance FromJSON
-         TargetInstancesScopedListWarningDataItem where
-        parseJSON
-          = withObject
-              "TargetInstancesScopedListWarningDataItem"
-              (\ o ->
-                 TargetInstancesScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON
-         TargetInstancesScopedListWarningDataItem where
-        toJSON TargetInstancesScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _tislwdiValue,
-                  ("key" .=) <$> _tislwdiKey])
-
--- | [Output Only] An informational warning that appears when the machine
--- types list is empty.
---
--- /See:/ 'machineTypesScopedListWarning' smart constructor.
-data MachineTypesScopedListWarning = MachineTypesScopedListWarning
-    { _mtslwData    :: !(Maybe [MachineTypesScopedListWarningDataItem])
-    , _mtslwCode    :: !(Maybe MachineTypesScopedListWarningCode)
-    , _mtslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypesScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtslwData'
---
--- * 'mtslwCode'
---
--- * 'mtslwMessage'
-machineTypesScopedListWarning
-    :: MachineTypesScopedListWarning
-machineTypesScopedListWarning =
-    MachineTypesScopedListWarning
-    { _mtslwData = Nothing
-    , _mtslwCode = Nothing
-    , _mtslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-mtslwData :: Lens' MachineTypesScopedListWarning [MachineTypesScopedListWarningDataItem]
-mtslwData
-  = lens _mtslwData (\ s a -> s{_mtslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-mtslwCode :: Lens' MachineTypesScopedListWarning (Maybe MachineTypesScopedListWarningCode)
-mtslwCode
-  = lens _mtslwCode (\ s a -> s{_mtslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-mtslwMessage :: Lens' MachineTypesScopedListWarning (Maybe Text)
-mtslwMessage
-  = lens _mtslwMessage (\ s a -> s{_mtslwMessage = a})
-
-instance FromJSON MachineTypesScopedListWarning where
-        parseJSON
-          = withObject "MachineTypesScopedListWarning"
-              (\ o ->
-                 MachineTypesScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON MachineTypesScopedListWarning where
-        toJSON MachineTypesScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _mtslwData,
-                  ("code" .=) <$> _mtslwCode,
-                  ("message" .=) <$> _mtslwMessage])
-
--- | A TargetInstance resource. This resource defines an endpoint instance
--- that terminates traffic of certain protocols.
---
--- /See:/ 'targetInstance' smart constructor.
-data TargetInstance = TargetInstance
-    { _tiKind              :: !Text
-    , _tiNATPolicy         :: !(Maybe TargetInstanceNATPolicy)
-    , _tiZone              :: !(Maybe Text)
-    , _tiSelfLink          :: !(Maybe Text)
-    , _tiName              :: !(Maybe Text)
-    , _tiCreationTimestamp :: !(Maybe Text)
-    , _tiId                :: !(Maybe (Textual Word64))
-    , _tiDescription       :: !(Maybe Text)
-    , _tiInstance          :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tiKind'
---
--- * 'tiNATPolicy'
---
--- * 'tiZone'
---
--- * 'tiSelfLink'
---
--- * 'tiName'
---
--- * 'tiCreationTimestamp'
---
--- * 'tiId'
---
--- * 'tiDescription'
---
--- * 'tiInstance'
-targetInstance
-    :: TargetInstance
-targetInstance =
-    TargetInstance
-    { _tiKind = "compute#targetInstance"
-    , _tiNATPolicy = Nothing
-    , _tiZone = Nothing
-    , _tiSelfLink = Nothing
-    , _tiName = Nothing
-    , _tiCreationTimestamp = Nothing
-    , _tiId = Nothing
-    , _tiDescription = Nothing
-    , _tiInstance = Nothing
-    }
-
--- | Type of the resource.
-tiKind :: Lens' TargetInstance Text
-tiKind = lens _tiKind (\ s a -> s{_tiKind = a})
-
--- | NAT option controlling how IPs are NAT\'ed to the instance. Currently
--- only NO_NAT (default value) is supported.
-tiNATPolicy :: Lens' TargetInstance (Maybe TargetInstanceNATPolicy)
-tiNATPolicy
-  = lens _tiNATPolicy (\ s a -> s{_tiNATPolicy = a})
-
--- | [Output Only] URL of the zone where the target instance resides.
-tiZone :: Lens' TargetInstance (Maybe Text)
-tiZone = lens _tiZone (\ s a -> s{_tiZone = a})
-
--- | [Output Only] Server-defined URL for the resource.
-tiSelfLink :: Lens' TargetInstance (Maybe Text)
-tiSelfLink
-  = lens _tiSelfLink (\ s a -> s{_tiSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-tiName :: Lens' TargetInstance (Maybe Text)
-tiName = lens _tiName (\ s a -> s{_tiName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-tiCreationTimestamp :: Lens' TargetInstance (Maybe Text)
-tiCreationTimestamp
-  = lens _tiCreationTimestamp
-      (\ s a -> s{_tiCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-tiId :: Lens' TargetInstance (Maybe Word64)
-tiId
-  = lens _tiId (\ s a -> s{_tiId = a}) .
-      mapping _Coerce
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-tiDescription :: Lens' TargetInstance (Maybe Text)
-tiDescription
-  = lens _tiDescription
-      (\ s a -> s{_tiDescription = a})
-
--- | The URL to the instance that terminates the relevant traffic.
-tiInstance :: Lens' TargetInstance (Maybe Text)
-tiInstance
-  = lens _tiInstance (\ s a -> s{_tiInstance = a})
-
-instance FromJSON TargetInstance where
-        parseJSON
-          = withObject "TargetInstance"
-              (\ o ->
-                 TargetInstance <$>
-                   (o .:? "kind" .!= "compute#targetInstance") <*>
-                     (o .:? "natPolicy")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description")
-                     <*> (o .:? "instance"))
-
-instance ToJSON TargetInstance where
-        toJSON TargetInstance{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _tiKind),
-                  ("natPolicy" .=) <$> _tiNATPolicy,
-                  ("zone" .=) <$> _tiZone,
-                  ("selfLink" .=) <$> _tiSelfLink,
-                  ("name" .=) <$> _tiName,
-                  ("creationTimestamp" .=) <$> _tiCreationTimestamp,
-                  ("id" .=) <$> _tiId,
-                  ("description" .=) <$> _tiDescription,
-                  ("instance" .=) <$> _tiInstance])
-
---
--- /See:/ 'targetPoolInstanceHealth' smart constructor.
-data TargetPoolInstanceHealth = TargetPoolInstanceHealth
-    { _tpihKind         :: !Text
-    , _tpihHealthStatus :: !(Maybe [HealthStatus])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolInstanceHealth' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpihKind'
---
--- * 'tpihHealthStatus'
-targetPoolInstanceHealth
-    :: TargetPoolInstanceHealth
-targetPoolInstanceHealth =
-    TargetPoolInstanceHealth
-    { _tpihKind = "compute#targetPoolInstanceHealth"
-    , _tpihHealthStatus = Nothing
-    }
-
--- | Type of resource.
-tpihKind :: Lens' TargetPoolInstanceHealth Text
-tpihKind = lens _tpihKind (\ s a -> s{_tpihKind = a})
-
-tpihHealthStatus :: Lens' TargetPoolInstanceHealth [HealthStatus]
-tpihHealthStatus
-  = lens _tpihHealthStatus
-      (\ s a -> s{_tpihHealthStatus = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPoolInstanceHealth where
-        parseJSON
-          = withObject "TargetPoolInstanceHealth"
-              (\ o ->
-                 TargetPoolInstanceHealth <$>
-                   (o .:? "kind" .!= "compute#targetPoolInstanceHealth")
-                     <*> (o .:? "healthStatus" .!= mempty))
-
-instance ToJSON TargetPoolInstanceHealth where
-        toJSON TargetPoolInstanceHealth{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _tpihKind),
-                  ("healthStatus" .=) <$> _tpihHealthStatus])
-
---
--- /See:/ 'instanceGroupManagersListManagedInstancesResponse' smart constructor.
-newtype InstanceGroupManagersListManagedInstancesResponse = InstanceGroupManagersListManagedInstancesResponse
-    { _igmlmirManagedInstances :: Maybe [ManagedInstance]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersListManagedInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmlmirManagedInstances'
-instanceGroupManagersListManagedInstancesResponse
-    :: InstanceGroupManagersListManagedInstancesResponse
-instanceGroupManagersListManagedInstancesResponse =
-    InstanceGroupManagersListManagedInstancesResponse
-    { _igmlmirManagedInstances = Nothing
-    }
-
--- | [Output Only] The list of instances in the managed instance group.
-igmlmirManagedInstances :: Lens' InstanceGroupManagersListManagedInstancesResponse [ManagedInstance]
-igmlmirManagedInstances
-  = lens _igmlmirManagedInstances
-      (\ s a -> s{_igmlmirManagedInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupManagersListManagedInstancesResponse
-         where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersListManagedInstancesResponse"
-              (\ o ->
-                 InstanceGroupManagersListManagedInstancesResponse <$>
-                   (o .:? "managedInstances" .!= mempty))
-
-instance ToJSON
-         InstanceGroupManagersListManagedInstancesResponse
-         where
-        toJSON
-          InstanceGroupManagersListManagedInstancesResponse{..}
-          = object
-              (catMaybes
-                 [("managedInstances" .=) <$>
-                    _igmlmirManagedInstances])
-
--- |
---
--- /See:/ 'instanceProperties' smart constructor.
-data InstanceProperties = InstanceProperties
-    { _ipServiceAccounts   :: !(Maybe [ServiceAccount])
-    , _ipNetworkInterfaces :: !(Maybe [NetworkInterface])
-    , _ipMachineType       :: !(Maybe Text)
-    , _ipMetadata          :: !(Maybe Metadata)
-    , _ipScheduling        :: !(Maybe Scheduling)
-    , _ipDisks             :: !(Maybe [AttachedDisk])
-    , _ipCanIPForward      :: !(Maybe Bool)
-    , _ipDescription       :: !(Maybe Text)
-    , _ipTags              :: !(Maybe Tags)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipServiceAccounts'
---
--- * 'ipNetworkInterfaces'
---
--- * 'ipMachineType'
---
--- * 'ipMetadata'
---
--- * 'ipScheduling'
---
--- * 'ipDisks'
---
--- * 'ipCanIPForward'
---
--- * 'ipDescription'
---
--- * 'ipTags'
-instanceProperties
-    :: InstanceProperties
-instanceProperties =
-    InstanceProperties
-    { _ipServiceAccounts = Nothing
-    , _ipNetworkInterfaces = Nothing
-    , _ipMachineType = Nothing
-    , _ipMetadata = Nothing
-    , _ipScheduling = Nothing
-    , _ipDisks = Nothing
-    , _ipCanIPForward = Nothing
-    , _ipDescription = Nothing
-    , _ipTags = Nothing
-    }
-
--- | A list of service accounts with specified scopes. Access tokens for
--- these service accounts are available to the instances that are created
--- from this template. Use metadata queries to obtain the access tokens for
--- these instances.
-ipServiceAccounts :: Lens' InstanceProperties [ServiceAccount]
-ipServiceAccounts
-  = lens _ipServiceAccounts
-      (\ s a -> s{_ipServiceAccounts = a})
-      . _Default
-      . _Coerce
-
--- | An array of network access configurations for this interface.
-ipNetworkInterfaces :: Lens' InstanceProperties [NetworkInterface]
-ipNetworkInterfaces
-  = lens _ipNetworkInterfaces
-      (\ s a -> s{_ipNetworkInterfaces = a})
-      . _Default
-      . _Coerce
-
--- | The machine type to use for instances that are created from this
--- template.
-ipMachineType :: Lens' InstanceProperties (Maybe Text)
-ipMachineType
-  = lens _ipMachineType
-      (\ s a -> s{_ipMachineType = a})
-
--- | The metadata key\/value pairs to assign to instances that are created
--- from this template. These pairs can consist of custom metadata or
--- predefined keys. See Project and instance metadata for more information.
-ipMetadata :: Lens' InstanceProperties (Maybe Metadata)
-ipMetadata
-  = lens _ipMetadata (\ s a -> s{_ipMetadata = a})
-
--- | Specifies the scheduling options for the instances that are created from
--- this template.
-ipScheduling :: Lens' InstanceProperties (Maybe Scheduling)
-ipScheduling
-  = lens _ipScheduling (\ s a -> s{_ipScheduling = a})
-
--- | An array of disks that are associated with the instances that are
--- created from this template.
-ipDisks :: Lens' InstanceProperties [AttachedDisk]
-ipDisks
-  = lens _ipDisks (\ s a -> s{_ipDisks = a}) . _Default
-      . _Coerce
-
--- | Enables instances created based on this template to send packets with
--- source IP addresses other than their own and receive packets with
--- destination IP addresses other than their own. If these instances will
--- be used as an IP gateway or it will be set as the next-hop in a Route
--- resource, specify true. If unsure, leave this set to false. See the
--- canIpForward documentation for more information.
-ipCanIPForward :: Lens' InstanceProperties (Maybe Bool)
-ipCanIPForward
-  = lens _ipCanIPForward
-      (\ s a -> s{_ipCanIPForward = a})
-
--- | An optional text description for the instances that are created from
--- this instance template.
-ipDescription :: Lens' InstanceProperties (Maybe Text)
-ipDescription
-  = lens _ipDescription
-      (\ s a -> s{_ipDescription = a})
-
--- | A list of tags to apply to the instances that are created from this
--- template. The tags identify valid sources or targets for network
--- firewalls. The setTags method can modify this list of tags. Each tag
--- within the list must comply with RFC1035.
-ipTags :: Lens' InstanceProperties (Maybe Tags)
-ipTags = lens _ipTags (\ s a -> s{_ipTags = a})
-
-instance FromJSON InstanceProperties where
-        parseJSON
-          = withObject "InstanceProperties"
-              (\ o ->
-                 InstanceProperties <$>
-                   (o .:? "serviceAccounts" .!= mempty) <*>
-                     (o .:? "networkInterfaces" .!= mempty)
-                     <*> (o .:? "machineType")
-                     <*> (o .:? "metadata")
-                     <*> (o .:? "scheduling")
-                     <*> (o .:? "disks" .!= mempty)
-                     <*> (o .:? "canIpForward")
-                     <*> (o .:? "description")
-                     <*> (o .:? "tags"))
-
-instance ToJSON InstanceProperties where
-        toJSON InstanceProperties{..}
-          = object
-              (catMaybes
-                 [("serviceAccounts" .=) <$> _ipServiceAccounts,
-                  ("networkInterfaces" .=) <$> _ipNetworkInterfaces,
-                  ("machineType" .=) <$> _ipMachineType,
-                  ("metadata" .=) <$> _ipMetadata,
-                  ("scheduling" .=) <$> _ipScheduling,
-                  ("disks" .=) <$> _ipDisks,
-                  ("canIpForward" .=) <$> _ipCanIPForward,
-                  ("description" .=) <$> _ipDescription,
-                  ("tags" .=) <$> _ipTags])
-
--- | [Output Only] Informational warning which replaces the list of disk
--- types when the list is empty.
---
--- /See:/ 'diskTypesScopedListWarning' smart constructor.
-data DiskTypesScopedListWarning = DiskTypesScopedListWarning
-    { _dtslwData    :: !(Maybe [DiskTypesScopedListWarningDataItem])
-    , _dtslwCode    :: !(Maybe DiskTypesScopedListWarningCode)
-    , _dtslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskTypesScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtslwData'
---
--- * 'dtslwCode'
---
--- * 'dtslwMessage'
-diskTypesScopedListWarning
-    :: DiskTypesScopedListWarning
-diskTypesScopedListWarning =
-    DiskTypesScopedListWarning
-    { _dtslwData = Nothing
-    , _dtslwCode = Nothing
-    , _dtslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-dtslwData :: Lens' DiskTypesScopedListWarning [DiskTypesScopedListWarningDataItem]
-dtslwData
-  = lens _dtslwData (\ s a -> s{_dtslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-dtslwCode :: Lens' DiskTypesScopedListWarning (Maybe DiskTypesScopedListWarningCode)
-dtslwCode
-  = lens _dtslwCode (\ s a -> s{_dtslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-dtslwMessage :: Lens' DiskTypesScopedListWarning (Maybe Text)
-dtslwMessage
-  = lens _dtslwMessage (\ s a -> s{_dtslwMessage = a})
-
-instance FromJSON DiskTypesScopedListWarning where
-        parseJSON
-          = withObject "DiskTypesScopedListWarning"
-              (\ o ->
-                 DiskTypesScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON DiskTypesScopedListWarning where
-        toJSON DiskTypesScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _dtslwData,
-                  ("code" .=) <$> _dtslwCode,
-                  ("message" .=) <$> _dtslwMessage])
-
--- | [Input Only] Specifies the parameters for a new disk that will be
--- created alongside the new instance. Use initialization parameters to
--- create boot disks or local SSDs attached to the new instance. This
--- property is mutually exclusive with the source property; you can only
--- define one or the other, but not both.
---
--- /See:/ 'attachedDiskInitializeParams' smart constructor.
-data AttachedDiskInitializeParams = AttachedDiskInitializeParams
-    { _adipSourceImage :: !(Maybe Text)
-    , _adipDiskSizeGb  :: !(Maybe (Textual Int64))
-    , _adipDiskName    :: !(Maybe Text)
-    , _adipDiskType    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachedDiskInitializeParams' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adipSourceImage'
---
--- * 'adipDiskSizeGb'
---
--- * 'adipDiskName'
---
--- * 'adipDiskType'
-attachedDiskInitializeParams
-    :: AttachedDiskInitializeParams
-attachedDiskInitializeParams =
-    AttachedDiskInitializeParams
-    { _adipSourceImage = Nothing
-    , _adipDiskSizeGb = Nothing
-    , _adipDiskName = Nothing
-    , _adipDiskType = Nothing
-    }
-
--- | A source image used to create the disk. You can provide a private
--- (custom) image, and Compute Engine will use the corresponding image from
--- your project. For example: global\/images\/my-private-image Or you can
--- provide an image from a publicly-available project. For example, to use
--- a Debian image from the debian-cloud project, make sure to include the
--- project in the URL:
--- projects\/debian-cloud\/global\/images\/debian-7-wheezy-vYYYYMMDD where
--- vYYYYMMDD is the image version. The fully-qualified URL will also work
--- in both cases.
-adipSourceImage :: Lens' AttachedDiskInitializeParams (Maybe Text)
-adipSourceImage
-  = lens _adipSourceImage
-      (\ s a -> s{_adipSourceImage = a})
-
--- | Specifies the size of the disk in base-2 GB.
-adipDiskSizeGb :: Lens' AttachedDiskInitializeParams (Maybe Int64)
-adipDiskSizeGb
-  = lens _adipDiskSizeGb
-      (\ s a -> s{_adipDiskSizeGb = a})
-      . mapping _Coerce
-
--- | Specifies the disk name. If not specified, the default is to use the
--- name of the instance.
-adipDiskName :: Lens' AttachedDiskInitializeParams (Maybe Text)
-adipDiskName
-  = lens _adipDiskName (\ s a -> s{_adipDiskName = a})
-
--- | Specifies the disk type to use to create the instance. If not specified,
--- the default is pd-standard, specified using the full URL. For example:
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/diskTypes\/pd-standard
--- Other values include pd-ssd and local-ssd. If you define this field, you
--- can provide either the full or partial URL. For example, the following
--- are valid values: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/diskTypes\/diskType
--- - projects\/project\/zones\/zone\/diskTypes\/diskType -
--- zones\/zone\/diskTypes\/diskType
-adipDiskType :: Lens' AttachedDiskInitializeParams (Maybe Text)
-adipDiskType
-  = lens _adipDiskType (\ s a -> s{_adipDiskType = a})
-
-instance FromJSON AttachedDiskInitializeParams where
-        parseJSON
-          = withObject "AttachedDiskInitializeParams"
-              (\ o ->
-                 AttachedDiskInitializeParams <$>
-                   (o .:? "sourceImage") <*> (o .:? "diskSizeGb") <*>
-                     (o .:? "diskName")
-                     <*> (o .:? "diskType"))
-
-instance ToJSON AttachedDiskInitializeParams where
-        toJSON AttachedDiskInitializeParams{..}
-          = object
-              (catMaybes
-                 [("sourceImage" .=) <$> _adipSourceImage,
-                  ("diskSizeGb" .=) <$> _adipDiskSizeGb,
-                  ("diskName" .=) <$> _adipDiskName,
-                  ("diskType" .=) <$> _adipDiskType])
-
---
--- /See:/ 'addressesScopedListWarningDataItem' smart constructor.
-data AddressesScopedListWarningDataItem = AddressesScopedListWarningDataItem
-    { _aslwdiValue :: !(Maybe Text)
-    , _aslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddressesScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aslwdiValue'
---
--- * 'aslwdiKey'
-addressesScopedListWarningDataItem
-    :: AddressesScopedListWarningDataItem
-addressesScopedListWarningDataItem =
-    AddressesScopedListWarningDataItem
-    { _aslwdiValue = Nothing
-    , _aslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-aslwdiValue :: Lens' AddressesScopedListWarningDataItem (Maybe Text)
-aslwdiValue
-  = lens _aslwdiValue (\ s a -> s{_aslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-aslwdiKey :: Lens' AddressesScopedListWarningDataItem (Maybe Text)
-aslwdiKey
-  = lens _aslwdiKey (\ s a -> s{_aslwdiKey = a})
-
-instance FromJSON AddressesScopedListWarningDataItem
-         where
-        parseJSON
-          = withObject "AddressesScopedListWarningDataItem"
-              (\ o ->
-                 AddressesScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON AddressesScopedListWarningDataItem
-         where
-        toJSON AddressesScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _aslwdiValue,
-                  ("key" .=) <$> _aslwdiKey])
-
--- | A network interface resource attached to an instance.
---
--- /See:/ 'networkInterface' smart constructor.
-data NetworkInterface = NetworkInterface
-    { _niNetwork       :: !(Maybe Text)
-    , _niName          :: !(Maybe Text)
-    , _niNetworkIP     :: !(Maybe Text)
-    , _niAccessConfigs :: !(Maybe [AccessConfig])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niNetwork'
---
--- * 'niName'
---
--- * 'niNetworkIP'
---
--- * 'niAccessConfigs'
-networkInterface
-    :: NetworkInterface
-networkInterface =
-    NetworkInterface
-    { _niNetwork = Nothing
-    , _niName = Nothing
-    , _niNetworkIP = Nothing
-    , _niAccessConfigs = Nothing
-    }
-
--- | URL of the network resource for this instance. This is required for
--- creating an instance but optional when creating a firewall rule. If not
--- specified when creating a firewall rule, the default network is used:
--- global\/networks\/default If you specify this property, you can specify
--- the network as a full or partial URL. For example, the following are all
--- valid URLs: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/global\/networks\/network
--- - projects\/project\/global\/networks\/network -
--- global\/networks\/default
-niNetwork :: Lens' NetworkInterface (Maybe Text)
-niNetwork
-  = lens _niNetwork (\ s a -> s{_niNetwork = a})
-
--- | [Output Only] The name of the network interface, generated by the
--- server. For network devices, these are eth0, eth1, etc.
-niName :: Lens' NetworkInterface (Maybe Text)
-niName = lens _niName (\ s a -> s{_niName = a})
-
--- | [Output Only] An optional IPV4 internal network address assigned to the
--- instance for this network interface.
-niNetworkIP :: Lens' NetworkInterface (Maybe Text)
-niNetworkIP
-  = lens _niNetworkIP (\ s a -> s{_niNetworkIP = a})
-
--- | An array of configurations for this interface. Currently, ONE_TO_ONE_NAT
--- is the only access config supported. If there are no accessConfigs
--- specified, then this instance will have no external internet access.
-niAccessConfigs :: Lens' NetworkInterface [AccessConfig]
-niAccessConfigs
-  = lens _niAccessConfigs
-      (\ s a -> s{_niAccessConfigs = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON NetworkInterface where
-        parseJSON
-          = withObject "NetworkInterface"
-              (\ o ->
-                 NetworkInterface <$>
-                   (o .:? "network") <*> (o .:? "name") <*>
-                     (o .:? "networkIP")
-                     <*> (o .:? "accessConfigs" .!= mempty))
-
-instance ToJSON NetworkInterface where
-        toJSON NetworkInterface{..}
-          = object
-              (catMaybes
-                 [("network" .=) <$> _niNetwork,
-                  ("name" .=) <$> _niName,
-                  ("networkIP" .=) <$> _niNetworkIP,
-                  ("accessConfigs" .=) <$> _niAccessConfigs])
-
---
--- /See:/ 'targetPoolsRemoveHealthCheckRequest' smart constructor.
-newtype TargetPoolsRemoveHealthCheckRequest = TargetPoolsRemoveHealthCheckRequest
-    { _tprhcrHealthChecks :: Maybe [HealthCheckReference]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsRemoveHealthCheckRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tprhcrHealthChecks'
-targetPoolsRemoveHealthCheckRequest
-    :: TargetPoolsRemoveHealthCheckRequest
-targetPoolsRemoveHealthCheckRequest =
-    TargetPoolsRemoveHealthCheckRequest
-    { _tprhcrHealthChecks = Nothing
-    }
-
--- | Health check URLs to be removed from targetPool.
-tprhcrHealthChecks :: Lens' TargetPoolsRemoveHealthCheckRequest [HealthCheckReference]
-tprhcrHealthChecks
-  = lens _tprhcrHealthChecks
-      (\ s a -> s{_tprhcrHealthChecks = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPoolsRemoveHealthCheckRequest
-         where
-        parseJSON
-          = withObject "TargetPoolsRemoveHealthCheckRequest"
-              (\ o ->
-                 TargetPoolsRemoveHealthCheckRequest <$>
-                   (o .:? "healthChecks" .!= mempty))
-
-instance ToJSON TargetPoolsRemoveHealthCheckRequest
-         where
-        toJSON TargetPoolsRemoveHealthCheckRequest{..}
-          = object
-              (catMaybes
-                 [("healthChecks" .=) <$> _tprhcrHealthChecks])
-
--- | A list of instance templates.
---
--- /See:/ 'instanceTemplateList' smart constructor.
-data InstanceTemplateList = InstanceTemplateList
-    { _itlNextPageToken :: !(Maybe Text)
-    , _itlKind          :: !Text
-    , _itlItems         :: !(Maybe [InstanceTemplate])
-    , _itlSelfLink      :: !(Maybe Text)
-    , _itlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceTemplateList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'itlNextPageToken'
---
--- * 'itlKind'
---
--- * 'itlItems'
---
--- * 'itlSelfLink'
---
--- * 'itlId'
-instanceTemplateList
-    :: InstanceTemplateList
-instanceTemplateList =
-    InstanceTemplateList
-    { _itlNextPageToken = Nothing
-    , _itlKind = "compute#instanceTemplateList"
-    , _itlItems = Nothing
-    , _itlSelfLink = Nothing
-    , _itlId = Nothing
-    }
-
--- | [Output Only] A token that is used to continue a truncated list request.
-itlNextPageToken :: Lens' InstanceTemplateList (Maybe Text)
-itlNextPageToken
-  = lens _itlNextPageToken
-      (\ s a -> s{_itlNextPageToken = a})
-
--- | [Output Only] The resource type, which is always
--- compute#instanceTemplatesListResponse for instance template lists.
-itlKind :: Lens' InstanceTemplateList Text
-itlKind = lens _itlKind (\ s a -> s{_itlKind = a})
-
--- | [Output Only] list of InstanceTemplate resources.
-itlItems :: Lens' InstanceTemplateList [InstanceTemplate]
-itlItems
-  = lens _itlItems (\ s a -> s{_itlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The URL for this instance template list. The server
--- defines this URL.
-itlSelfLink :: Lens' InstanceTemplateList (Maybe Text)
-itlSelfLink
-  = lens _itlSelfLink (\ s a -> s{_itlSelfLink = a})
-
--- | [Output Only] A unique identifier for this instance template. The server
--- defines this identifier.
-itlId :: Lens' InstanceTemplateList (Maybe Text)
-itlId = lens _itlId (\ s a -> s{_itlId = a})
-
-instance FromJSON InstanceTemplateList where
-        parseJSON
-          = withObject "InstanceTemplateList"
-              (\ o ->
-                 InstanceTemplateList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#instanceTemplateList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceTemplateList where
-        toJSON InstanceTemplateList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _itlNextPageToken,
-                  Just ("kind" .= _itlKind),
-                  ("items" .=) <$> _itlItems,
-                  ("selfLink" .=) <$> _itlSelfLink,
-                  ("id" .=) <$> _itlId])
-
--- | Contains a list of route resources.
---
--- /See:/ 'routeList' smart constructor.
-data RouteList = RouteList
-    { _rlNextPageToken :: !(Maybe Text)
-    , _rlKind          :: !Text
-    , _rlItems         :: !(Maybe [Route])
-    , _rlSelfLink      :: !(Maybe Text)
-    , _rlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rlNextPageToken'
---
--- * 'rlKind'
---
--- * 'rlItems'
---
--- * 'rlSelfLink'
---
--- * 'rlId'
-routeList
-    :: RouteList
-routeList =
-    RouteList
-    { _rlNextPageToken = Nothing
-    , _rlKind = "compute#routeList"
-    , _rlItems = Nothing
-    , _rlSelfLink = Nothing
-    , _rlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-rlNextPageToken :: Lens' RouteList (Maybe Text)
-rlNextPageToken
-  = lens _rlNextPageToken
-      (\ s a -> s{_rlNextPageToken = a})
-
--- | Type of resource.
-rlKind :: Lens' RouteList Text
-rlKind = lens _rlKind (\ s a -> s{_rlKind = a})
-
--- | A list of Route resources.
-rlItems :: Lens' RouteList [Route]
-rlItems
-  = lens _rlItems (\ s a -> s{_rlItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-rlSelfLink :: Lens' RouteList (Maybe Text)
-rlSelfLink
-  = lens _rlSelfLink (\ s a -> s{_rlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-rlId :: Lens' RouteList (Maybe Text)
-rlId = lens _rlId (\ s a -> s{_rlId = a})
-
-instance FromJSON RouteList where
-        parseJSON
-          = withObject "RouteList"
-              (\ o ->
-                 RouteList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#routeList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON RouteList where
-        toJSON RouteList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _rlNextPageToken,
-                  Just ("kind" .= _rlKind), ("items" .=) <$> _rlItems,
-                  ("selfLink" .=) <$> _rlSelfLink,
-                  ("id" .=) <$> _rlId])
-
--- | Contains a list of TargetVpnGateway resources.
---
--- /See:/ 'targetVPNGatewayList' smart constructor.
-data TargetVPNGatewayList = TargetVPNGatewayList
-    { _tvglNextPageToken :: !(Maybe Text)
-    , _tvglKind          :: !Text
-    , _tvglItems         :: !(Maybe [TargetVPNGateway])
-    , _tvglSelfLink      :: !(Maybe Text)
-    , _tvglId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGatewayList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvglNextPageToken'
---
--- * 'tvglKind'
---
--- * 'tvglItems'
---
--- * 'tvglSelfLink'
---
--- * 'tvglId'
-targetVPNGatewayList
-    :: TargetVPNGatewayList
-targetVPNGatewayList =
-    TargetVPNGatewayList
-    { _tvglNextPageToken = Nothing
-    , _tvglKind = "compute#targetVpnGatewayList"
-    , _tvglItems = Nothing
-    , _tvglSelfLink = Nothing
-    , _tvglId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-tvglNextPageToken :: Lens' TargetVPNGatewayList (Maybe Text)
-tvglNextPageToken
-  = lens _tvglNextPageToken
-      (\ s a -> s{_tvglNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#targetVpnGateway for
--- target VPN gateways.
-tvglKind :: Lens' TargetVPNGatewayList Text
-tvglKind = lens _tvglKind (\ s a -> s{_tvglKind = a})
-
--- | [Output Only] A list of TargetVpnGateway resources.
-tvglItems :: Lens' TargetVPNGatewayList [TargetVPNGateway]
-tvglItems
-  = lens _tvglItems (\ s a -> s{_tvglItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for the resource.
-tvglSelfLink :: Lens' TargetVPNGatewayList (Maybe Text)
-tvglSelfLink
-  = lens _tvglSelfLink (\ s a -> s{_tvglSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-tvglId :: Lens' TargetVPNGatewayList (Maybe Text)
-tvglId = lens _tvglId (\ s a -> s{_tvglId = a})
-
-instance FromJSON TargetVPNGatewayList where
-        parseJSON
-          = withObject "TargetVPNGatewayList"
-              (\ o ->
-                 TargetVPNGatewayList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#targetVpnGatewayList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetVPNGatewayList where
-        toJSON TargetVPNGatewayList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _tvglNextPageToken,
-                  Just ("kind" .= _tvglKind),
-                  ("items" .=) <$> _tvglItems,
-                  ("selfLink" .=) <$> _tvglSelfLink,
-                  ("id" .=) <$> _tvglId])
-
--- | Contains a list of SslCertificate resources.
---
--- /See:/ 'sslCertificateList' smart constructor.
-data SSLCertificateList = SSLCertificateList
-    { _sclNextPageToken :: !(Maybe Text)
-    , _sclKind          :: !Text
-    , _sclItems         :: !(Maybe [SSLCertificate])
-    , _sclSelfLink      :: !(Maybe Text)
-    , _sclId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SSLCertificateList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sclNextPageToken'
---
--- * 'sclKind'
---
--- * 'sclItems'
---
--- * 'sclSelfLink'
---
--- * 'sclId'
-sslCertificateList
-    :: SSLCertificateList
-sslCertificateList =
-    SSLCertificateList
-    { _sclNextPageToken = Nothing
-    , _sclKind = "compute#sslCertificateList"
-    , _sclItems = Nothing
-    , _sclSelfLink = Nothing
-    , _sclId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-sclNextPageToken :: Lens' SSLCertificateList (Maybe Text)
-sclNextPageToken
-  = lens _sclNextPageToken
-      (\ s a -> s{_sclNextPageToken = a})
-
--- | Type of resource.
-sclKind :: Lens' SSLCertificateList Text
-sclKind = lens _sclKind (\ s a -> s{_sclKind = a})
-
--- | A list of SslCertificate resources.
-sclItems :: Lens' SSLCertificateList [SSLCertificate]
-sclItems
-  = lens _sclItems (\ s a -> s{_sclItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-sclSelfLink :: Lens' SSLCertificateList (Maybe Text)
-sclSelfLink
-  = lens _sclSelfLink (\ s a -> s{_sclSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-sclId :: Lens' SSLCertificateList (Maybe Text)
-sclId = lens _sclId (\ s a -> s{_sclId = a})
-
-instance FromJSON SSLCertificateList where
-        parseJSON
-          = withObject "SSLCertificateList"
-              (\ o ->
-                 SSLCertificateList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#sslCertificateList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON SSLCertificateList where
-        toJSON SSLCertificateList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _sclNextPageToken,
-                  Just ("kind" .= _sclKind),
-                  ("items" .=) <$> _sclItems,
-                  ("selfLink" .=) <$> _sclSelfLink,
-                  ("id" .=) <$> _sclId])
-
---
--- /See:/ 'firewallAllowedItem' smart constructor.
-data FirewallAllowedItem = FirewallAllowedItem
-    { _faiIPProtocol :: !(Maybe Text)
-    , _faiPorts      :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FirewallAllowedItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'faiIPProtocol'
---
--- * 'faiPorts'
-firewallAllowedItem
-    :: FirewallAllowedItem
-firewallAllowedItem =
-    FirewallAllowedItem
-    { _faiIPProtocol = Nothing
-    , _faiPorts = Nothing
-    }
-
--- | The IP protocol that is allowed for this rule. The protocol type is
--- required when creating a firewall. This value can either be one of the
--- following well known protocol strings (tcp, udp, icmp, esp, ah, sctp),
--- or the IP protocol number.
-faiIPProtocol :: Lens' FirewallAllowedItem (Maybe Text)
-faiIPProtocol
-  = lens _faiIPProtocol
-      (\ s a -> s{_faiIPProtocol = a})
-
--- | An optional list of ports which are allowed. This field is only
--- applicable for UDP or TCP protocol. Each entry must be either an integer
--- or a range. If not specified, connections through any port are allowed
--- Example inputs include: [\"22\"], [\"80\",\"443\"], and
--- [\"12345-12349\"].
-faiPorts :: Lens' FirewallAllowedItem [Text]
-faiPorts
-  = lens _faiPorts (\ s a -> s{_faiPorts = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON FirewallAllowedItem where
-        parseJSON
-          = withObject "FirewallAllowedItem"
-              (\ o ->
-                 FirewallAllowedItem <$>
-                   (o .:? "IPProtocol") <*> (o .:? "ports" .!= mempty))
-
-instance ToJSON FirewallAllowedItem where
-        toJSON FirewallAllowedItem{..}
-          = object
-              (catMaybes
-                 [("IPProtocol" .=) <$> _faiIPProtocol,
-                  ("ports" .=) <$> _faiPorts])
-
--- | A network resource.
---
--- /See:/ 'network' smart constructor.
-data Network = Network
-    { _nKind              :: !Text
-    , _nIPv4Range         :: !(Maybe Text)
-    , _nSelfLink          :: !(Maybe Text)
-    , _nName              :: !(Maybe Text)
-    , _nCreationTimestamp :: !(Maybe Text)
-    , _nId                :: !(Maybe (Textual Word64))
-    , _nGatewayIPv4       :: !(Maybe Text)
-    , _nDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Network' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nKind'
---
--- * 'nIPv4Range'
---
--- * 'nSelfLink'
---
--- * 'nName'
---
--- * 'nCreationTimestamp'
---
--- * 'nId'
---
--- * 'nGatewayIPv4'
---
--- * 'nDescription'
-network
-    :: Network
-network =
-    Network
-    { _nKind = "compute#network"
-    , _nIPv4Range = Nothing
-    , _nSelfLink = Nothing
-    , _nName = Nothing
-    , _nCreationTimestamp = Nothing
-    , _nId = Nothing
-    , _nGatewayIPv4 = Nothing
-    , _nDescription = Nothing
-    }
-
--- | [Output Only] Type of the resource. Always compute#network for networks.
-nKind :: Lens' Network Text
-nKind = lens _nKind (\ s a -> s{_nKind = a})
-
--- | The range of internal addresses that are legal on this network. This
--- range is a CIDR specification, for example: 192.168.0.0\/16. Provided by
--- the client when the network is created.
-nIPv4Range :: Lens' Network (Maybe Text)
-nIPv4Range
-  = lens _nIPv4Range (\ s a -> s{_nIPv4Range = a})
-
--- | [Output Only] Server-defined URL for the resource.
-nSelfLink :: Lens' Network (Maybe Text)
-nSelfLink
-  = lens _nSelfLink (\ s a -> s{_nSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-nName :: Lens' Network (Maybe Text)
-nName = lens _nName (\ s a -> s{_nName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-nCreationTimestamp :: Lens' Network (Maybe Text)
-nCreationTimestamp
-  = lens _nCreationTimestamp
-      (\ s a -> s{_nCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-nId :: Lens' Network (Maybe Word64)
-nId
-  = lens _nId (\ s a -> s{_nId = a}) . mapping _Coerce
-
--- | A gateway address for default routing to other networks. This value is
--- read only and is selected by the Google Compute Engine, typically as the
--- first usable address in the IPv4Range.
-nGatewayIPv4 :: Lens' Network (Maybe Text)
-nGatewayIPv4
-  = lens _nGatewayIPv4 (\ s a -> s{_nGatewayIPv4 = a})
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-nDescription :: Lens' Network (Maybe Text)
-nDescription
-  = lens _nDescription (\ s a -> s{_nDescription = a})
-
-instance FromJSON Network where
-        parseJSON
-          = withObject "Network"
-              (\ o ->
-                 Network <$>
-                   (o .:? "kind" .!= "compute#network") <*>
-                     (o .:? "IPv4Range")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "gatewayIPv4")
-                     <*> (o .:? "description"))
-
-instance ToJSON Network where
-        toJSON Network{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _nKind),
-                  ("IPv4Range" .=) <$> _nIPv4Range,
-                  ("selfLink" .=) <$> _nSelfLink,
-                  ("name" .=) <$> _nName,
-                  ("creationTimestamp" .=) <$> _nCreationTimestamp,
-                  ("id" .=) <$> _nId,
-                  ("gatewayIPv4" .=) <$> _nGatewayIPv4,
-                  ("description" .=) <$> _nDescription])
-
--- | [Output Only] Informational warning which replaces the list of addresses
--- when the list is empty.
---
--- /See:/ 'addressesScopedListWarning' smart constructor.
-data AddressesScopedListWarning = AddressesScopedListWarning
-    { _aData    :: !(Maybe [AddressesScopedListWarningDataItem])
-    , _aCode    :: !(Maybe AddressesScopedListWarningCode)
-    , _aMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddressesScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aData'
---
--- * 'aCode'
---
--- * 'aMessage'
-addressesScopedListWarning
-    :: AddressesScopedListWarning
-addressesScopedListWarning =
-    AddressesScopedListWarning
-    { _aData = Nothing
-    , _aCode = Nothing
-    , _aMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-aData :: Lens' AddressesScopedListWarning [AddressesScopedListWarningDataItem]
-aData
-  = lens _aData (\ s a -> s{_aData = a}) . _Default .
-      _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-aCode :: Lens' AddressesScopedListWarning (Maybe AddressesScopedListWarningCode)
-aCode = lens _aCode (\ s a -> s{_aCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-aMessage :: Lens' AddressesScopedListWarning (Maybe Text)
-aMessage = lens _aMessage (\ s a -> s{_aMessage = a})
-
-instance FromJSON AddressesScopedListWarning where
-        parseJSON
-          = withObject "AddressesScopedListWarning"
-              (\ o ->
-                 AddressesScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON AddressesScopedListWarning where
-        toJSON AddressesScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _aData, ("code" .=) <$> _aCode,
-                  ("message" .=) <$> _aMessage])
-
--- | The parameters of the raw disk image.
---
--- /See:/ 'imageRawDisk' smart constructor.
-data ImageRawDisk = ImageRawDisk
-    { _irdContainerType :: !(Maybe ImageRawDiskContainerType)
-    , _irdSource        :: !(Maybe Text)
-    , _irdSha1Checksum  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImageRawDisk' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'irdContainerType'
---
--- * 'irdSource'
---
--- * 'irdSha1Checksum'
-imageRawDisk
-    :: ImageRawDisk
-imageRawDisk =
-    ImageRawDisk
-    { _irdContainerType = Nothing
-    , _irdSource = Nothing
-    , _irdSha1Checksum = Nothing
-    }
-
--- | The format used to encode and transmit the block device, which should be
--- TAR. This is just a container and transmission format and not a runtime
--- format. Provided by the client when the disk image is created.
-irdContainerType :: Lens' ImageRawDisk (Maybe ImageRawDiskContainerType)
-irdContainerType
-  = lens _irdContainerType
-      (\ s a -> s{_irdContainerType = a})
-
--- | The full Google Cloud Storage URL where the disk image is stored. You
--- must provide either this property or the sourceDisk property but not
--- both.
-irdSource :: Lens' ImageRawDisk (Maybe Text)
-irdSource
-  = lens _irdSource (\ s a -> s{_irdSource = a})
-
--- | An optional SHA1 checksum of the disk image before unpackaging; provided
--- by the client when the disk image is created.
-irdSha1Checksum :: Lens' ImageRawDisk (Maybe Text)
-irdSha1Checksum
-  = lens _irdSha1Checksum
-      (\ s a -> s{_irdSha1Checksum = a})
-
-instance FromJSON ImageRawDisk where
-        parseJSON
-          = withObject "ImageRawDisk"
-              (\ o ->
-                 ImageRawDisk <$>
-                   (o .:? "containerType") <*> (o .:? "source") <*>
-                     (o .:? "sha1Checksum"))
-
-instance ToJSON ImageRawDisk where
-        toJSON ImageRawDisk{..}
-          = object
-              (catMaybes
-                 [("containerType" .=) <$> _irdContainerType,
-                  ("source" .=) <$> _irdSource,
-                  ("sha1Checksum" .=) <$> _irdSha1Checksum])
-
---
--- /See:/ 'instanceAggregatedList' smart constructor.
-data InstanceAggregatedList = InstanceAggregatedList
-    { _ialNextPageToken :: !(Maybe Text)
-    , _ialKind          :: !Text
-    , _ialItems         :: !(Maybe InstanceAggregatedListItems)
-    , _ialSelfLink      :: !(Maybe Text)
-    , _ialId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ialNextPageToken'
---
--- * 'ialKind'
---
--- * 'ialItems'
---
--- * 'ialSelfLink'
---
--- * 'ialId'
-instanceAggregatedList
-    :: InstanceAggregatedList
-instanceAggregatedList =
-    InstanceAggregatedList
-    { _ialNextPageToken = Nothing
-    , _ialKind = "compute#instanceAggregatedList"
-    , _ialItems = Nothing
-    , _ialSelfLink = Nothing
-    , _ialId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-ialNextPageToken :: Lens' InstanceAggregatedList (Maybe Text)
-ialNextPageToken
-  = lens _ialNextPageToken
-      (\ s a -> s{_ialNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#instanceAggregatedList
--- for aggregated lists of Instance resources.
-ialKind :: Lens' InstanceAggregatedList Text
-ialKind = lens _ialKind (\ s a -> s{_ialKind = a})
-
--- | [Output Only] A map of scoped instance lists.
-ialItems :: Lens' InstanceAggregatedList (Maybe InstanceAggregatedListItems)
-ialItems = lens _ialItems (\ s a -> s{_ialItems = a})
-
--- | [Output Only] Server defined URL for this resource.
-ialSelfLink :: Lens' InstanceAggregatedList (Maybe Text)
-ialSelfLink
-  = lens _ialSelfLink (\ s a -> s{_ialSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-ialId :: Lens' InstanceAggregatedList (Maybe Text)
-ialId = lens _ialId (\ s a -> s{_ialId = a})
-
-instance FromJSON InstanceAggregatedList where
-        parseJSON
-          = withObject "InstanceAggregatedList"
-              (\ o ->
-                 InstanceAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#instanceAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceAggregatedList where
-        toJSON InstanceAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _ialNextPageToken,
-                  Just ("kind" .= _ialKind),
-                  ("items" .=) <$> _ialItems,
-                  ("selfLink" .=) <$> _ialSelfLink,
-                  ("id" .=) <$> _ialId])
-
--- | A reserved address resource.
---
--- /See:/ 'address' smart constructor.
-data Address = Address
-    { _aStatus            :: !(Maybe AddressStatus)
-    , _aUsers             :: !(Maybe [Text])
-    , _aKind              :: !Text
-    , _aAddress           :: !(Maybe Text)
-    , _aSelfLink          :: !(Maybe Text)
-    , _aName              :: !(Maybe Text)
-    , _aCreationTimestamp :: !(Maybe Text)
-    , _aId                :: !(Maybe (Textual Word64))
-    , _aRegion            :: !(Maybe Text)
-    , _aDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aStatus'
---
--- * 'aUsers'
---
--- * 'aKind'
---
--- * 'aAddress'
---
--- * 'aSelfLink'
---
--- * 'aName'
---
--- * 'aCreationTimestamp'
---
--- * 'aId'
---
--- * 'aRegion'
---
--- * 'aDescription'
-address
-    :: Address
-address =
-    Address
-    { _aStatus = Nothing
-    , _aUsers = Nothing
-    , _aKind = "compute#address"
-    , _aAddress = Nothing
-    , _aSelfLink = Nothing
-    , _aName = Nothing
-    , _aCreationTimestamp = Nothing
-    , _aId = Nothing
-    , _aRegion = Nothing
-    , _aDescription = Nothing
-    }
-
--- | [Output Only] The status of the address, which can be either IN_USE or
--- RESERVED. An address that is RESERVED is currently reserved and
--- available to use. An IN_USE address is currently being used by another
--- resource and is not available.
-aStatus :: Lens' Address (Maybe AddressStatus)
-aStatus = lens _aStatus (\ s a -> s{_aStatus = a})
-
--- | [Output Only] The URLs of the resources that are using this address.
-aUsers :: Lens' Address [Text]
-aUsers
-  = lens _aUsers (\ s a -> s{_aUsers = a}) . _Default .
-      _Coerce
-
--- | [Output Only] Type of the resource. Always compute#address for
--- addresses.
-aKind :: Lens' Address Text
-aKind = lens _aKind (\ s a -> s{_aKind = a})
-
--- | The static external IP address represented by this resource.
-aAddress :: Lens' Address (Maybe Text)
-aAddress = lens _aAddress (\ s a -> s{_aAddress = a})
-
--- | [Output Only] Server-defined URL for the resource.
-aSelfLink :: Lens' Address (Maybe Text)
-aSelfLink
-  = lens _aSelfLink (\ s a -> s{_aSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-aName :: Lens' Address (Maybe Text)
-aName = lens _aName (\ s a -> s{_aName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-aCreationTimestamp :: Lens' Address (Maybe Text)
-aCreationTimestamp
-  = lens _aCreationTimestamp
-      (\ s a -> s{_aCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-aId :: Lens' Address (Maybe Word64)
-aId
-  = lens _aId (\ s a -> s{_aId = a}) . mapping _Coerce
-
--- | [Output Only] URL of the region where the regional address resides. This
--- field is not applicable to global addresses.
-aRegion :: Lens' Address (Maybe Text)
-aRegion = lens _aRegion (\ s a -> s{_aRegion = a})
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-aDescription :: Lens' Address (Maybe Text)
-aDescription
-  = lens _aDescription (\ s a -> s{_aDescription = a})
-
-instance FromJSON Address where
-        parseJSON
-          = withObject "Address"
-              (\ o ->
-                 Address <$>
-                   (o .:? "status") <*> (o .:? "users" .!= mempty) <*>
-                     (o .:? "kind" .!= "compute#address")
-                     <*> (o .:? "address")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "region")
-                     <*> (o .:? "description"))
-
-instance ToJSON Address where
-        toJSON Address{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _aStatus,
-                  ("users" .=) <$> _aUsers, Just ("kind" .= _aKind),
-                  ("address" .=) <$> _aAddress,
-                  ("selfLink" .=) <$> _aSelfLink,
-                  ("name" .=) <$> _aName,
-                  ("creationTimestamp" .=) <$> _aCreationTimestamp,
-                  ("id" .=) <$> _aId, ("region" .=) <$> _aRegion,
-                  ("description" .=) <$> _aDescription])
-
--- | A Zone resource.
---
--- /See:/ 'zone' smart constructor.
-data Zone = Zone
-    { _zStatus             :: !(Maybe ZoneStatus)
-    , _zMaintenanceWindows :: !(Maybe [ZoneMaintenanceWindowsItem])
-    , _zKind               :: !Text
-    , _zSelfLink           :: !(Maybe Text)
-    , _zName               :: !(Maybe Text)
-    , _zCreationTimestamp  :: !(Maybe Text)
-    , _zId                 :: !(Maybe (Textual Word64))
-    , _zRegion             :: !(Maybe Text)
-    , _zDescription        :: !(Maybe Text)
-    , _zDeprecated         :: !(Maybe DeprecationStatus)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Zone' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'zStatus'
---
--- * 'zMaintenanceWindows'
---
--- * 'zKind'
---
--- * 'zSelfLink'
---
--- * 'zName'
---
--- * 'zCreationTimestamp'
---
--- * 'zId'
---
--- * 'zRegion'
---
--- * 'zDescription'
---
--- * 'zDeprecated'
-zone
-    :: Zone
-zone =
-    Zone
-    { _zStatus = Nothing
-    , _zMaintenanceWindows = Nothing
-    , _zKind = "compute#zone"
-    , _zSelfLink = Nothing
-    , _zName = Nothing
-    , _zCreationTimestamp = Nothing
-    , _zId = Nothing
-    , _zRegion = Nothing
-    , _zDescription = Nothing
-    , _zDeprecated = Nothing
-    }
-
--- | [Output Only] Status of the zone, either UP or DOWN.
-zStatus :: Lens' Zone (Maybe ZoneStatus)
-zStatus = lens _zStatus (\ s a -> s{_zStatus = a})
-
--- | [Output Only] Any scheduled maintenance windows for this zone. When the
--- zone is in a maintenance window, all resources which reside in the zone
--- will be unavailable. For more information, see Maintenance Windows
-zMaintenanceWindows :: Lens' Zone [ZoneMaintenanceWindowsItem]
-zMaintenanceWindows
-  = lens _zMaintenanceWindows
-      (\ s a -> s{_zMaintenanceWindows = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Type of the resource. Always kind#zone for zones.
-zKind :: Lens' Zone Text
-zKind = lens _zKind (\ s a -> s{_zKind = a})
-
--- | [Output Only] Server-defined URL for the resource.
-zSelfLink :: Lens' Zone (Maybe Text)
-zSelfLink
-  = lens _zSelfLink (\ s a -> s{_zSelfLink = a})
-
--- | [Output Only] Name of the resource.
-zName :: Lens' Zone (Maybe Text)
-zName = lens _zName (\ s a -> s{_zName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-zCreationTimestamp :: Lens' Zone (Maybe Text)
-zCreationTimestamp
-  = lens _zCreationTimestamp
-      (\ s a -> s{_zCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-zId :: Lens' Zone (Maybe Word64)
-zId
-  = lens _zId (\ s a -> s{_zId = a}) . mapping _Coerce
-
--- | [Output Only] Full URL reference to the region which hosts the zone.
-zRegion :: Lens' Zone (Maybe Text)
-zRegion = lens _zRegion (\ s a -> s{_zRegion = a})
-
--- | [Output Only] Textual description of the resource.
-zDescription :: Lens' Zone (Maybe Text)
-zDescription
-  = lens _zDescription (\ s a -> s{_zDescription = a})
-
--- | [Output Only] The deprecation status associated with this zone.
-zDeprecated :: Lens' Zone (Maybe DeprecationStatus)
-zDeprecated
-  = lens _zDeprecated (\ s a -> s{_zDeprecated = a})
-
-instance FromJSON Zone where
-        parseJSON
-          = withObject "Zone"
-              (\ o ->
-                 Zone <$>
-                   (o .:? "status") <*>
-                     (o .:? "maintenanceWindows" .!= mempty)
-                     <*> (o .:? "kind" .!= "compute#zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "region")
-                     <*> (o .:? "description")
-                     <*> (o .:? "deprecated"))
-
-instance ToJSON Zone where
-        toJSON Zone{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _zStatus,
-                  ("maintenanceWindows" .=) <$> _zMaintenanceWindows,
-                  Just ("kind" .= _zKind),
-                  ("selfLink" .=) <$> _zSelfLink,
-                  ("name" .=) <$> _zName,
-                  ("creationTimestamp" .=) <$> _zCreationTimestamp,
-                  ("id" .=) <$> _zId, ("region" .=) <$> _zRegion,
-                  ("description" .=) <$> _zDescription,
-                  ("deprecated" .=) <$> _zDeprecated])
-
---
--- /See:/ 'instanceGroupManagersRecreateInstancesRequest' smart constructor.
-newtype InstanceGroupManagersRecreateInstancesRequest = InstanceGroupManagersRecreateInstancesRequest
-    { _igmrirInstances :: Maybe [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersRecreateInstancesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmrirInstances'
-instanceGroupManagersRecreateInstancesRequest
-    :: InstanceGroupManagersRecreateInstancesRequest
-instanceGroupManagersRecreateInstancesRequest =
-    InstanceGroupManagersRecreateInstancesRequest
-    { _igmrirInstances = Nothing
-    }
-
--- | The URL for one or more instances to recreate.
-igmrirInstances :: Lens' InstanceGroupManagersRecreateInstancesRequest [Text]
-igmrirInstances
-  = lens _igmrirInstances
-      (\ s a -> s{_igmrirInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupManagersRecreateInstancesRequest where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersRecreateInstancesRequest"
-              (\ o ->
-                 InstanceGroupManagersRecreateInstancesRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON
-         InstanceGroupManagersRecreateInstancesRequest where
-        toJSON
-          InstanceGroupManagersRecreateInstancesRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _igmrirInstances])
-
---
--- /See:/ 'instancesScopedList' smart constructor.
-data InstancesScopedList = InstancesScopedList
-    { _islWarning   :: !(Maybe InstancesScopedListWarning)
-    , _islInstances :: !(Maybe [Instance])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstancesScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'islWarning'
---
--- * 'islInstances'
-instancesScopedList
-    :: InstancesScopedList
-instancesScopedList =
-    InstancesScopedList
-    { _islWarning = Nothing
-    , _islInstances = Nothing
-    }
-
--- | [Output Only] Informational warning which replaces the list of instances
--- when the list is empty.
-islWarning :: Lens' InstancesScopedList (Maybe InstancesScopedListWarning)
-islWarning
-  = lens _islWarning (\ s a -> s{_islWarning = a})
-
--- | [Output Only] List of instances contained in this scope.
-islInstances :: Lens' InstancesScopedList [Instance]
-islInstances
-  = lens _islInstances (\ s a -> s{_islInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON InstancesScopedList where
-        parseJSON
-          = withObject "InstancesScopedList"
-              (\ o ->
-                 InstancesScopedList <$>
-                   (o .:? "warning") <*> (o .:? "instances" .!= mempty))
-
-instance ToJSON InstancesScopedList where
-        toJSON InstancesScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _islWarning,
-                  ("instances" .=) <$> _islInstances])
-
---
--- /See:/ 'healthCheckReference' smart constructor.
-newtype HealthCheckReference = HealthCheckReference
-    { _hcrHealthCheck :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HealthCheckReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hcrHealthCheck'
-healthCheckReference
-    :: HealthCheckReference
-healthCheckReference =
-    HealthCheckReference
-    { _hcrHealthCheck = Nothing
-    }
-
-hcrHealthCheck :: Lens' HealthCheckReference (Maybe Text)
-hcrHealthCheck
-  = lens _hcrHealthCheck
-      (\ s a -> s{_hcrHealthCheck = a})
-
-instance FromJSON HealthCheckReference where
-        parseJSON
-          = withObject "HealthCheckReference"
-              (\ o ->
-                 HealthCheckReference <$> (o .:? "healthCheck"))
-
-instance ToJSON HealthCheckReference where
-        toJSON HealthCheckReference{..}
-          = object
-              (catMaybes [("healthCheck" .=) <$> _hcrHealthCheck])
-
--- | A map of scoped target instance lists.
---
--- /See:/ 'targetInstanceAggregatedListItems' smart constructor.
-newtype TargetInstanceAggregatedListItems = TargetInstanceAggregatedListItems
-    { _tialiAddtional :: HashMap Text TargetInstancesScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstanceAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tialiAddtional'
-targetInstanceAggregatedListItems
-    :: HashMap Text TargetInstancesScopedList -- ^ 'tialiAddtional'
-    -> TargetInstanceAggregatedListItems
-targetInstanceAggregatedListItems pTialiAddtional_ =
-    TargetInstanceAggregatedListItems
-    { _tialiAddtional = _Coerce # pTialiAddtional_
-    }
-
--- | Name of the scope containing this set of target instances.
-tialiAddtional :: Lens' TargetInstanceAggregatedListItems (HashMap Text TargetInstancesScopedList)
-tialiAddtional
-  = lens _tialiAddtional
-      (\ s a -> s{_tialiAddtional = a})
-      . _Coerce
-
-instance FromJSON TargetInstanceAggregatedListItems
-         where
-        parseJSON
-          = withObject "TargetInstanceAggregatedListItems"
-              (\ o ->
-                 TargetInstanceAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON TargetInstanceAggregatedListItems
-         where
-        toJSON = toJSON . _tialiAddtional
-
---
--- /See:/ 'instanceGroupAggregatedList' smart constructor.
-data InstanceGroupAggregatedList = InstanceGroupAggregatedList
-    { _igalNextPageToken :: !(Maybe Text)
-    , _igalKind          :: !Text
-    , _igalItems         :: !(Maybe InstanceGroupAggregatedListItems)
-    , _igalSelfLink      :: !(Maybe Text)
-    , _igalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igalNextPageToken'
---
--- * 'igalKind'
---
--- * 'igalItems'
---
--- * 'igalSelfLink'
---
--- * 'igalId'
-instanceGroupAggregatedList
-    :: InstanceGroupAggregatedList
-instanceGroupAggregatedList =
-    InstanceGroupAggregatedList
-    { _igalNextPageToken = Nothing
-    , _igalKind = "compute#instanceGroupAggregatedList"
-    , _igalItems = Nothing
-    , _igalSelfLink = Nothing
-    , _igalId = Nothing
-    }
-
--- | [Output Only] A token that is used to continue a truncated list request.
-igalNextPageToken :: Lens' InstanceGroupAggregatedList (Maybe Text)
-igalNextPageToken
-  = lens _igalNextPageToken
-      (\ s a -> s{_igalNextPageToken = a})
-
--- | [Output Only] The resource type, which is always
--- compute#instanceGroupAggregatedList for aggregated lists of instance
--- groups.
-igalKind :: Lens' InstanceGroupAggregatedList Text
-igalKind = lens _igalKind (\ s a -> s{_igalKind = a})
-
--- | A map of scoped instance group lists.
-igalItems :: Lens' InstanceGroupAggregatedList (Maybe InstanceGroupAggregatedListItems)
-igalItems
-  = lens _igalItems (\ s a -> s{_igalItems = a})
-
--- | [Output Only] The URL for this resource type. The server generates this
--- URL.
-igalSelfLink :: Lens' InstanceGroupAggregatedList (Maybe Text)
-igalSelfLink
-  = lens _igalSelfLink (\ s a -> s{_igalSelfLink = a})
-
--- | [Output Only] A unique identifier for this aggregated list of instance
--- groups. The server generates this identifier.
-igalId :: Lens' InstanceGroupAggregatedList (Maybe Text)
-igalId = lens _igalId (\ s a -> s{_igalId = a})
-
-instance FromJSON InstanceGroupAggregatedList where
-        parseJSON
-          = withObject "InstanceGroupAggregatedList"
-              (\ o ->
-                 InstanceGroupAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#instanceGroupAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceGroupAggregatedList where
-        toJSON InstanceGroupAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _igalNextPageToken,
-                  Just ("kind" .= _igalKind),
-                  ("items" .=) <$> _igalItems,
-                  ("selfLink" .=) <$> _igalSelfLink,
-                  ("id" .=) <$> _igalId])
-
--- | The route resource. A Route is a rule that specifies how certain packets
--- should be handled by the virtual network. Routes are associated with
--- instances by tag and the set of Routes for a particular instance is
--- called its routing table. For each packet leaving a instance, the system
--- searches that instance\'s routing table for a single best matching
--- Route. Routes match packets by destination IP address, preferring
--- smaller or more specific ranges over larger ones. If there is a tie, the
--- system selects the Route with the smallest priority value. If there is
--- still a tie, it uses the layer three and four packet headers to select
--- just one of the remaining matching Routes. The packet is then forwarded
--- as specified by the nextHop field of the winning Route -- either to
--- another instance destination, a instance gateway or a Google Compute
--- Engien-operated gateway. Packets that do not match any Route in the
--- sending instance\'s routing table are dropped.
---
--- /See:/ 'route' smart constructor.
-data Route = Route
-    { _rPriority          :: !(Maybe (Textual Word32))
-    , _rKind              :: !Text
-    , _rNextHopGateway    :: !(Maybe Text)
-    , _rNextHopNetwork    :: !(Maybe Text)
-    , _rNetwork           :: !(Maybe Text)
-    , _rWarnings          :: !(Maybe [RouteWarningsItem])
-    , _rNextHopIP         :: !(Maybe Text)
-    , _rDestRange         :: !(Maybe Text)
-    , _rSelfLink          :: !(Maybe Text)
-    , _rName              :: !(Maybe Text)
-    , _rCreationTimestamp :: !(Maybe Text)
-    , _rId                :: !(Maybe (Textual Word64))
-    , _rNextHopVPNTunnel  :: !(Maybe Text)
-    , _rDescription       :: !(Maybe Text)
-    , _rTags              :: !(Maybe [Text])
-    , _rNextHopInstance   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Route' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rPriority'
---
--- * 'rKind'
---
--- * 'rNextHopGateway'
---
--- * 'rNextHopNetwork'
---
--- * 'rNetwork'
---
--- * 'rWarnings'
---
--- * 'rNextHopIP'
---
--- * 'rDestRange'
---
--- * 'rSelfLink'
---
--- * 'rName'
---
--- * 'rCreationTimestamp'
---
--- * 'rId'
---
--- * 'rNextHopVPNTunnel'
---
--- * 'rDescription'
---
--- * 'rTags'
---
--- * 'rNextHopInstance'
-route
-    :: Route
-route =
-    Route
-    { _rPriority = Nothing
-    , _rKind = "compute#route"
-    , _rNextHopGateway = Nothing
-    , _rNextHopNetwork = Nothing
-    , _rNetwork = Nothing
-    , _rWarnings = Nothing
-    , _rNextHopIP = Nothing
-    , _rDestRange = Nothing
-    , _rSelfLink = Nothing
-    , _rName = Nothing
-    , _rCreationTimestamp = Nothing
-    , _rId = Nothing
-    , _rNextHopVPNTunnel = Nothing
-    , _rDescription = Nothing
-    , _rTags = Nothing
-    , _rNextHopInstance = Nothing
-    }
-
--- | Breaks ties between Routes of equal specificity. Routes with smaller
--- values win when tied with routes with larger values. Default value is
--- 1000. A valid range is between 0 and 65535.
-rPriority :: Lens' Route (Maybe Word32)
-rPriority
-  = lens _rPriority (\ s a -> s{_rPriority = a}) .
-      mapping _Coerce
-
--- | [Output Only] Type of this resource. Always compute#routes for Route
--- resources.
-rKind :: Lens' Route Text
-rKind = lens _rKind (\ s a -> s{_rKind = a})
-
--- | The URL to a gateway that should handle matching packets. Currently,
--- this is only the internet gateway:
--- projects\/\/global\/gateways\/default-internet-gateway
-rNextHopGateway :: Lens' Route (Maybe Text)
-rNextHopGateway
-  = lens _rNextHopGateway
-      (\ s a -> s{_rNextHopGateway = a})
-
--- | The URL of the local network if it should handle matching packets.
-rNextHopNetwork :: Lens' Route (Maybe Text)
-rNextHopNetwork
-  = lens _rNextHopNetwork
-      (\ s a -> s{_rNextHopNetwork = a})
-
--- | Fully-qualified URL of the network that this route applies to.
-rNetwork :: Lens' Route (Maybe Text)
-rNetwork = lens _rNetwork (\ s a -> s{_rNetwork = a})
-
--- | [Output Only] If potential misconfigurations are detected for this
--- route, this field will be populated with warning messages.
-rWarnings :: Lens' Route [RouteWarningsItem]
-rWarnings
-  = lens _rWarnings (\ s a -> s{_rWarnings = a}) .
-      _Default
-      . _Coerce
-
--- | The network IP address of an instance that should handle matching
--- packets.
-rNextHopIP :: Lens' Route (Maybe Text)
-rNextHopIP
-  = lens _rNextHopIP (\ s a -> s{_rNextHopIP = a})
-
--- | The destination range of outgoing packets that this route applies to.
-rDestRange :: Lens' Route (Maybe Text)
-rDestRange
-  = lens _rDestRange (\ s a -> s{_rDestRange = a})
-
--- | [Output Only] Server-defined fully-qualified URL for this resource.
-rSelfLink :: Lens' Route (Maybe Text)
-rSelfLink
-  = lens _rSelfLink (\ s a -> s{_rSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-rName :: Lens' Route (Maybe Text)
-rName = lens _rName (\ s a -> s{_rName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-rCreationTimestamp :: Lens' Route (Maybe Text)
-rCreationTimestamp
-  = lens _rCreationTimestamp
-      (\ s a -> s{_rCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-rId :: Lens' Route (Maybe Word64)
-rId
-  = lens _rId (\ s a -> s{_rId = a}) . mapping _Coerce
-
--- | The URL to a VpnTunnel that should handle matching packets.
-rNextHopVPNTunnel :: Lens' Route (Maybe Text)
-rNextHopVPNTunnel
-  = lens _rNextHopVPNTunnel
-      (\ s a -> s{_rNextHopVPNTunnel = a})
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-rDescription :: Lens' Route (Maybe Text)
-rDescription
-  = lens _rDescription (\ s a -> s{_rDescription = a})
-
--- | A list of instance tags to which this route applies.
-rTags :: Lens' Route [Text]
-rTags
-  = lens _rTags (\ s a -> s{_rTags = a}) . _Default .
-      _Coerce
-
--- | The fully-qualified URL to an instance that should handle matching
--- packets. For example:
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/instances\/
-rNextHopInstance :: Lens' Route (Maybe Text)
-rNextHopInstance
-  = lens _rNextHopInstance
-      (\ s a -> s{_rNextHopInstance = a})
-
-instance FromJSON Route where
-        parseJSON
-          = withObject "Route"
-              (\ o ->
-                 Route <$>
-                   (o .:? "priority") <*>
-                     (o .:? "kind" .!= "compute#route")
-                     <*> (o .:? "nextHopGateway")
-                     <*> (o .:? "nextHopNetwork")
-                     <*> (o .:? "network")
-                     <*> (o .:? "warnings" .!= mempty)
-                     <*> (o .:? "nextHopIp")
-                     <*> (o .:? "destRange")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "nextHopVpnTunnel")
-                     <*> (o .:? "description")
-                     <*> (o .:? "tags" .!= mempty)
-                     <*> (o .:? "nextHopInstance"))
-
-instance ToJSON Route where
-        toJSON Route{..}
-          = object
-              (catMaybes
-                 [("priority" .=) <$> _rPriority,
-                  Just ("kind" .= _rKind),
-                  ("nextHopGateway" .=) <$> _rNextHopGateway,
-                  ("nextHopNetwork" .=) <$> _rNextHopNetwork,
-                  ("network" .=) <$> _rNetwork,
-                  ("warnings" .=) <$> _rWarnings,
-                  ("nextHopIp" .=) <$> _rNextHopIP,
-                  ("destRange" .=) <$> _rDestRange,
-                  ("selfLink" .=) <$> _rSelfLink,
-                  ("name" .=) <$> _rName,
-                  ("creationTimestamp" .=) <$> _rCreationTimestamp,
-                  ("id" .=) <$> _rId,
-                  ("nextHopVpnTunnel" .=) <$> _rNextHopVPNTunnel,
-                  ("description" .=) <$> _rDescription,
-                  ("tags" .=) <$> _rTags,
-                  ("nextHopInstance" .=) <$> _rNextHopInstance])
-
---
--- /See:/ 'targetVPNGatewaysScopedListWarningDataItem' smart constructor.
-data TargetVPNGatewaysScopedListWarningDataItem = TargetVPNGatewaysScopedListWarningDataItem
-    { _tvgslwdiValue :: !(Maybe Text)
-    , _tvgslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGatewaysScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvgslwdiValue'
---
--- * 'tvgslwdiKey'
-targetVPNGatewaysScopedListWarningDataItem
-    :: TargetVPNGatewaysScopedListWarningDataItem
-targetVPNGatewaysScopedListWarningDataItem =
-    TargetVPNGatewaysScopedListWarningDataItem
-    { _tvgslwdiValue = Nothing
-    , _tvgslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-tvgslwdiValue :: Lens' TargetVPNGatewaysScopedListWarningDataItem (Maybe Text)
-tvgslwdiValue
-  = lens _tvgslwdiValue
-      (\ s a -> s{_tvgslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-tvgslwdiKey :: Lens' TargetVPNGatewaysScopedListWarningDataItem (Maybe Text)
-tvgslwdiKey
-  = lens _tvgslwdiKey (\ s a -> s{_tvgslwdiKey = a})
-
-instance FromJSON
-         TargetVPNGatewaysScopedListWarningDataItem where
-        parseJSON
-          = withObject
-              "TargetVPNGatewaysScopedListWarningDataItem"
-              (\ o ->
-                 TargetVPNGatewaysScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON
-         TargetVPNGatewaysScopedListWarningDataItem where
-        toJSON TargetVPNGatewaysScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _tvgslwdiValue,
-                  ("key" .=) <$> _tvgslwdiKey])
-
---
--- /See:/ 'targetHTTPSProxiesSetSSLCertificatesRequest' smart constructor.
-newtype TargetHTTPSProxiesSetSSLCertificatesRequest = TargetHTTPSProxiesSetSSLCertificatesRequest
-    { _thpsscrSSLCertificates :: Maybe [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetHTTPSProxiesSetSSLCertificatesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'thpsscrSSLCertificates'
-targetHTTPSProxiesSetSSLCertificatesRequest
-    :: TargetHTTPSProxiesSetSSLCertificatesRequest
-targetHTTPSProxiesSetSSLCertificatesRequest =
-    TargetHTTPSProxiesSetSSLCertificatesRequest
-    { _thpsscrSSLCertificates = Nothing
-    }
-
--- | New set of URLs to SslCertificate resources to associate with this
--- TargetHttpProxy. Currently exactly one ssl certificate must be
--- specified.
-thpsscrSSLCertificates :: Lens' TargetHTTPSProxiesSetSSLCertificatesRequest [Text]
-thpsscrSSLCertificates
-  = lens _thpsscrSSLCertificates
-      (\ s a -> s{_thpsscrSSLCertificates = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         TargetHTTPSProxiesSetSSLCertificatesRequest where
-        parseJSON
-          = withObject
-              "TargetHTTPSProxiesSetSSLCertificatesRequest"
-              (\ o ->
-                 TargetHTTPSProxiesSetSSLCertificatesRequest <$>
-                   (o .:? "sslCertificates" .!= mempty))
-
-instance ToJSON
-         TargetHTTPSProxiesSetSSLCertificatesRequest where
-        toJSON
-          TargetHTTPSProxiesSetSSLCertificatesRequest{..}
-          = object
-              (catMaybes
-                 [("sslCertificates" .=) <$> _thpsscrSSLCertificates])
-
--- | An Instance Template resource.
---
--- /See:/ 'instanceTemplate' smart constructor.
-data InstanceTemplate = InstanceTemplate
-    { _itKind              :: !Text
-    , _itSelfLink          :: !(Maybe Text)
-    , _itName              :: !(Maybe Text)
-    , _itCreationTimestamp :: !(Maybe Text)
-    , _itId                :: !(Maybe (Textual Word64))
-    , _itDescription       :: !(Maybe Text)
-    , _itProperties        :: !(Maybe InstanceProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceTemplate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'itKind'
---
--- * 'itSelfLink'
---
--- * 'itName'
---
--- * 'itCreationTimestamp'
---
--- * 'itId'
---
--- * 'itDescription'
---
--- * 'itProperties'
-instanceTemplate
-    :: InstanceTemplate
-instanceTemplate =
-    InstanceTemplate
-    { _itKind = "compute#instanceTemplate"
-    , _itSelfLink = Nothing
-    , _itName = Nothing
-    , _itCreationTimestamp = Nothing
-    , _itId = Nothing
-    , _itDescription = Nothing
-    , _itProperties = Nothing
-    }
-
--- | [Output Only] The resource type, which is always
--- compute#instanceTemplate for instance templates.
-itKind :: Lens' InstanceTemplate Text
-itKind = lens _itKind (\ s a -> s{_itKind = a})
-
--- | [Output Only] The URL for this instance template. The server defines
--- this URL.
-itSelfLink :: Lens' InstanceTemplate (Maybe Text)
-itSelfLink
-  = lens _itSelfLink (\ s a -> s{_itSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-itName :: Lens' InstanceTemplate (Maybe Text)
-itName = lens _itName (\ s a -> s{_itName = a})
-
--- | [Output Only] The creation timestamp for this instance template in
--- RFC3339 text format.
-itCreationTimestamp :: Lens' InstanceTemplate (Maybe Text)
-itCreationTimestamp
-  = lens _itCreationTimestamp
-      (\ s a -> s{_itCreationTimestamp = a})
-
--- | [Output Only] A unique identifier for this instance template. The server
--- defines this identifier.
-itId :: Lens' InstanceTemplate (Maybe Word64)
-itId
-  = lens _itId (\ s a -> s{_itId = a}) .
-      mapping _Coerce
-
--- | An optional text description for the instance template.
-itDescription :: Lens' InstanceTemplate (Maybe Text)
-itDescription
-  = lens _itDescription
-      (\ s a -> s{_itDescription = a})
-
--- | The instance properties for this instance template.
-itProperties :: Lens' InstanceTemplate (Maybe InstanceProperties)
-itProperties
-  = lens _itProperties (\ s a -> s{_itProperties = a})
-
-instance FromJSON InstanceTemplate where
-        parseJSON
-          = withObject "InstanceTemplate"
-              (\ o ->
-                 InstanceTemplate <$>
-                   (o .:? "kind" .!= "compute#instanceTemplate") <*>
-                     (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description")
-                     <*> (o .:? "properties"))
-
-instance ToJSON InstanceTemplate where
-        toJSON InstanceTemplate{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _itKind),
-                  ("selfLink" .=) <$> _itSelfLink,
-                  ("name" .=) <$> _itName,
-                  ("creationTimestamp" .=) <$> _itCreationTimestamp,
-                  ("id" .=) <$> _itId,
-                  ("description" .=) <$> _itDescription,
-                  ("properties" .=) <$> _itProperties])
-
---
--- /See:/ 'zoneMaintenanceWindowsItem' smart constructor.
-data ZoneMaintenanceWindowsItem = ZoneMaintenanceWindowsItem
-    { _zmwiBeginTime   :: !(Maybe Text)
-    , _zmwiName        :: !(Maybe Text)
-    , _zmwiEndTime     :: !(Maybe Text)
-    , _zmwiDescription :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ZoneMaintenanceWindowsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'zmwiBeginTime'
---
--- * 'zmwiName'
---
--- * 'zmwiEndTime'
---
--- * 'zmwiDescription'
-zoneMaintenanceWindowsItem
-    :: ZoneMaintenanceWindowsItem
-zoneMaintenanceWindowsItem =
-    ZoneMaintenanceWindowsItem
-    { _zmwiBeginTime = Nothing
-    , _zmwiName = Nothing
-    , _zmwiEndTime = Nothing
-    , _zmwiDescription = Nothing
-    }
-
--- | [Output Only] Starting time of the maintenance window, in RFC3339
--- format.
-zmwiBeginTime :: Lens' ZoneMaintenanceWindowsItem (Maybe Text)
-zmwiBeginTime
-  = lens _zmwiBeginTime
-      (\ s a -> s{_zmwiBeginTime = a})
-
--- | [Output Only] Name of the maintenance window.
-zmwiName :: Lens' ZoneMaintenanceWindowsItem (Maybe Text)
-zmwiName = lens _zmwiName (\ s a -> s{_zmwiName = a})
-
--- | [Output Only] Ending time of the maintenance window, in RFC3339 format.
-zmwiEndTime :: Lens' ZoneMaintenanceWindowsItem (Maybe Text)
-zmwiEndTime
-  = lens _zmwiEndTime (\ s a -> s{_zmwiEndTime = a})
-
--- | [Output Only] Textual description of the maintenance window.
-zmwiDescription :: Lens' ZoneMaintenanceWindowsItem (Maybe Text)
-zmwiDescription
-  = lens _zmwiDescription
-      (\ s a -> s{_zmwiDescription = a})
-
-instance FromJSON ZoneMaintenanceWindowsItem where
-        parseJSON
-          = withObject "ZoneMaintenanceWindowsItem"
-              (\ o ->
-                 ZoneMaintenanceWindowsItem <$>
-                   (o .:? "beginTime") <*> (o .:? "name") <*>
-                     (o .:? "endTime")
-                     <*> (o .:? "description"))
-
-instance ToJSON ZoneMaintenanceWindowsItem where
-        toJSON ZoneMaintenanceWindowsItem{..}
-          = object
-              (catMaybes
-                 [("beginTime" .=) <$> _zmwiBeginTime,
-                  ("name" .=) <$> _zmwiName,
-                  ("endTime" .=) <$> _zmwiEndTime,
-                  ("description" .=) <$> _zmwiDescription])
-
---
--- /See:/ 'targetVPNGateway' smart constructor.
-data TargetVPNGateway = TargetVPNGateway
-    { _tvgStatus            :: !(Maybe TargetVPNGatewayStatus)
-    , _tvgKind              :: !Text
-    , _tvgNetwork           :: !(Maybe Text)
-    , _tvgSelfLink          :: !(Maybe Text)
-    , _tvgName              :: !(Maybe Text)
-    , _tvgCreationTimestamp :: !(Maybe Text)
-    , _tvgId                :: !(Maybe (Textual Word64))
-    , _tvgRegion            :: !(Maybe Text)
-    , _tvgTunnels           :: !(Maybe [Text])
-    , _tvgDescription       :: !(Maybe Text)
-    , _tvgForwardingRules   :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvgStatus'
---
--- * 'tvgKind'
---
--- * 'tvgNetwork'
---
--- * 'tvgSelfLink'
---
--- * 'tvgName'
---
--- * 'tvgCreationTimestamp'
---
--- * 'tvgId'
---
--- * 'tvgRegion'
---
--- * 'tvgTunnels'
---
--- * 'tvgDescription'
---
--- * 'tvgForwardingRules'
-targetVPNGateway
-    :: TargetVPNGateway
-targetVPNGateway =
-    TargetVPNGateway
-    { _tvgStatus = Nothing
-    , _tvgKind = "compute#targetVpnGateway"
-    , _tvgNetwork = Nothing
-    , _tvgSelfLink = Nothing
-    , _tvgName = Nothing
-    , _tvgCreationTimestamp = Nothing
-    , _tvgId = Nothing
-    , _tvgRegion = Nothing
-    , _tvgTunnels = Nothing
-    , _tvgDescription = Nothing
-    , _tvgForwardingRules = Nothing
-    }
-
--- | [Output Only] The status of the VPN gateway.
-tvgStatus :: Lens' TargetVPNGateway (Maybe TargetVPNGatewayStatus)
-tvgStatus
-  = lens _tvgStatus (\ s a -> s{_tvgStatus = a})
-
--- | [Output Only] Type of resource. Always compute#targetVpnGateway for
--- target VPN gateways.
-tvgKind :: Lens' TargetVPNGateway Text
-tvgKind = lens _tvgKind (\ s a -> s{_tvgKind = a})
-
--- | URL of the network to which this VPN gateway is attached. Provided by
--- the client when the VPN gateway is created.
-tvgNetwork :: Lens' TargetVPNGateway (Maybe Text)
-tvgNetwork
-  = lens _tvgNetwork (\ s a -> s{_tvgNetwork = a})
-
--- | [Output Only] Server-defined URL for the resource.
-tvgSelfLink :: Lens' TargetVPNGateway (Maybe Text)
-tvgSelfLink
-  = lens _tvgSelfLink (\ s a -> s{_tvgSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-tvgName :: Lens' TargetVPNGateway (Maybe Text)
-tvgName = lens _tvgName (\ s a -> s{_tvgName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-tvgCreationTimestamp :: Lens' TargetVPNGateway (Maybe Text)
-tvgCreationTimestamp
-  = lens _tvgCreationTimestamp
-      (\ s a -> s{_tvgCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-tvgId :: Lens' TargetVPNGateway (Maybe Word64)
-tvgId
-  = lens _tvgId (\ s a -> s{_tvgId = a}) .
-      mapping _Coerce
-
--- | [Output Only] URL of the region where the target VPN gateway resides.
-tvgRegion :: Lens' TargetVPNGateway (Maybe Text)
-tvgRegion
-  = lens _tvgRegion (\ s a -> s{_tvgRegion = a})
-
--- | [Output Only] A list of URLs to VpnTunnel resources. VpnTunnels are
--- created using compute.vpntunnels.insert and associated to a VPN gateway.
-tvgTunnels :: Lens' TargetVPNGateway [Text]
-tvgTunnels
-  = lens _tvgTunnels (\ s a -> s{_tvgTunnels = a}) .
-      _Default
-      . _Coerce
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-tvgDescription :: Lens' TargetVPNGateway (Maybe Text)
-tvgDescription
-  = lens _tvgDescription
-      (\ s a -> s{_tvgDescription = a})
-
--- | [Output Only] A list of URLs to the ForwardingRule resources.
--- ForwardingRules are created using compute.forwardingRules.insert and
--- associated to a VPN gateway.
-tvgForwardingRules :: Lens' TargetVPNGateway [Text]
-tvgForwardingRules
-  = lens _tvgForwardingRules
-      (\ s a -> s{_tvgForwardingRules = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetVPNGateway where
-        parseJSON
-          = withObject "TargetVPNGateway"
-              (\ o ->
-                 TargetVPNGateway <$>
-                   (o .:? "status") <*>
-                     (o .:? "kind" .!= "compute#targetVpnGateway")
-                     <*> (o .:? "network")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "region")
-                     <*> (o .:? "tunnels" .!= mempty)
-                     <*> (o .:? "description")
-                     <*> (o .:? "forwardingRules" .!= mempty))
-
-instance ToJSON TargetVPNGateway where
-        toJSON TargetVPNGateway{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _tvgStatus,
-                  Just ("kind" .= _tvgKind),
-                  ("network" .=) <$> _tvgNetwork,
-                  ("selfLink" .=) <$> _tvgSelfLink,
-                  ("name" .=) <$> _tvgName,
-                  ("creationTimestamp" .=) <$> _tvgCreationTimestamp,
-                  ("id" .=) <$> _tvgId, ("region" .=) <$> _tvgRegion,
-                  ("tunnels" .=) <$> _tvgTunnels,
-                  ("description" .=) <$> _tvgDescription,
-                  ("forwardingRules" .=) <$> _tvgForwardingRules])
-
---
--- /See:/ 'urlMapsValidateResponse' smart constructor.
-newtype URLMapsValidateResponse = URLMapsValidateResponse
-    { _umvrResult :: Maybe URLMapValidationResult
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMapsValidateResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umvrResult'
-urlMapsValidateResponse
-    :: URLMapsValidateResponse
-urlMapsValidateResponse =
-    URLMapsValidateResponse
-    { _umvrResult = Nothing
-    }
-
-umvrResult :: Lens' URLMapsValidateResponse (Maybe URLMapValidationResult)
-umvrResult
-  = lens _umvrResult (\ s a -> s{_umvrResult = a})
-
-instance FromJSON URLMapsValidateResponse where
-        parseJSON
-          = withObject "URLMapsValidateResponse"
-              (\ o -> URLMapsValidateResponse <$> (o .:? "result"))
-
-instance ToJSON URLMapsValidateResponse where
-        toJSON URLMapsValidateResponse{..}
-          = object (catMaybes [("result" .=) <$> _umvrResult])
-
--- | An SslCertificate resource. This resource provides a mechanism to upload
--- an SSL key and certificate to global HTTPS loadbalancer to serve secure
--- connections.
---
--- /See:/ 'sslCertificate' smart constructor.
-data SSLCertificate = SSLCertificate
-    { _scPrivateKey        :: !(Maybe Text)
-    , _scKind              :: !Text
-    , _scSelfLink          :: !(Maybe Text)
-    , _scName              :: !(Maybe Text)
-    , _scCreationTimestamp :: !(Maybe Text)
-    , _scId                :: !(Maybe (Textual Word64))
-    , _scCertificate       :: !(Maybe Text)
-    , _scDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SSLCertificate' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scPrivateKey'
---
--- * 'scKind'
---
--- * 'scSelfLink'
---
--- * 'scName'
---
--- * 'scCreationTimestamp'
---
--- * 'scId'
---
--- * 'scCertificate'
---
--- * 'scDescription'
-sslCertificate
-    :: SSLCertificate
-sslCertificate =
-    SSLCertificate
-    { _scPrivateKey = Nothing
-    , _scKind = "compute#sslCertificate"
-    , _scSelfLink = Nothing
-    , _scName = Nothing
-    , _scCreationTimestamp = Nothing
-    , _scId = Nothing
-    , _scCertificate = Nothing
-    , _scDescription = Nothing
-    }
-
--- | A write-only private key in PEM format. Only insert RPCs will include
--- this field.
-scPrivateKey :: Lens' SSLCertificate (Maybe Text)
-scPrivateKey
-  = lens _scPrivateKey (\ s a -> s{_scPrivateKey = a})
-
--- | [Output Only] Type of the resource. Always compute#sslCertificate for
--- SSL certificates.
-scKind :: Lens' SSLCertificate Text
-scKind = lens _scKind (\ s a -> s{_scKind = a})
-
--- | [Output only] Server-defined URL for the resource.
-scSelfLink :: Lens' SSLCertificate (Maybe Text)
-scSelfLink
-  = lens _scSelfLink (\ s a -> s{_scSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-scName :: Lens' SSLCertificate (Maybe Text)
-scName = lens _scName (\ s a -> s{_scName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-scCreationTimestamp :: Lens' SSLCertificate (Maybe Text)
-scCreationTimestamp
-  = lens _scCreationTimestamp
-      (\ s a -> s{_scCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-scId :: Lens' SSLCertificate (Maybe Word64)
-scId
-  = lens _scId (\ s a -> s{_scId = a}) .
-      mapping _Coerce
-
--- | A local certificate file. The certificate must be in PEM format. The
--- certificate chain must be no greater than 5 certs long. The chain must
--- include at least one intermediate cert.
-scCertificate :: Lens' SSLCertificate (Maybe Text)
-scCertificate
-  = lens _scCertificate
-      (\ s a -> s{_scCertificate = a})
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-scDescription :: Lens' SSLCertificate (Maybe Text)
-scDescription
-  = lens _scDescription
-      (\ s a -> s{_scDescription = a})
-
-instance FromJSON SSLCertificate where
-        parseJSON
-          = withObject "SSLCertificate"
-              (\ o ->
-                 SSLCertificate <$>
-                   (o .:? "privateKey") <*>
-                     (o .:? "kind" .!= "compute#sslCertificate")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "certificate")
-                     <*> (o .:? "description"))
-
-instance ToJSON SSLCertificate where
-        toJSON SSLCertificate{..}
-          = object
-              (catMaybes
-                 [("privateKey" .=) <$> _scPrivateKey,
-                  Just ("kind" .= _scKind),
-                  ("selfLink" .=) <$> _scSelfLink,
-                  ("name" .=) <$> _scName,
-                  ("creationTimestamp" .=) <$> _scCreationTimestamp,
-                  ("id" .=) <$> _scId,
-                  ("certificate" .=) <$> _scCertificate,
-                  ("description" .=) <$> _scDescription])
-
---
--- /See:/ 'urlMapReference' smart constructor.
-newtype URLMapReference = URLMapReference
-    { _umrURLMap :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMapReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umrURLMap'
-urlMapReference
-    :: URLMapReference
-urlMapReference =
-    URLMapReference
-    { _umrURLMap = Nothing
-    }
-
-umrURLMap :: Lens' URLMapReference (Maybe Text)
-umrURLMap
-  = lens _umrURLMap (\ s a -> s{_umrURLMap = a})
-
-instance FromJSON URLMapReference where
-        parseJSON
-          = withObject "URLMapReference"
-              (\ o -> URLMapReference <$> (o .:? "urlMap"))
-
-instance ToJSON URLMapReference where
-        toJSON URLMapReference{..}
-          = object (catMaybes [("urlMap" .=) <$> _umrURLMap])
-
---
--- /See:/ 'targetPoolsAddHealthCheckRequest' smart constructor.
-newtype TargetPoolsAddHealthCheckRequest = TargetPoolsAddHealthCheckRequest
-    { _tpahcrHealthChecks :: Maybe [HealthCheckReference]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsAddHealthCheckRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpahcrHealthChecks'
-targetPoolsAddHealthCheckRequest
-    :: TargetPoolsAddHealthCheckRequest
-targetPoolsAddHealthCheckRequest =
-    TargetPoolsAddHealthCheckRequest
-    { _tpahcrHealthChecks = Nothing
-    }
-
--- | Health check URLs to be added to targetPool.
-tpahcrHealthChecks :: Lens' TargetPoolsAddHealthCheckRequest [HealthCheckReference]
-tpahcrHealthChecks
-  = lens _tpahcrHealthChecks
-      (\ s a -> s{_tpahcrHealthChecks = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetPoolsAddHealthCheckRequest
-         where
-        parseJSON
-          = withObject "TargetPoolsAddHealthCheckRequest"
-              (\ o ->
-                 TargetPoolsAddHealthCheckRequest <$>
-                   (o .:? "healthChecks" .!= mempty))
-
-instance ToJSON TargetPoolsAddHealthCheckRequest
-         where
-        toJSON TargetPoolsAddHealthCheckRequest{..}
-          = object
-              (catMaybes
-                 [("healthChecks" .=) <$> _tpahcrHealthChecks])
-
--- | [Output Only] A map of scoped disk lists.
---
--- /See:/ 'diskAggregatedListItems' smart constructor.
-newtype DiskAggregatedListItems = DiskAggregatedListItems
-    { _daliAddtional :: HashMap Text DisksScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daliAddtional'
-diskAggregatedListItems
-    :: HashMap Text DisksScopedList -- ^ 'daliAddtional'
-    -> DiskAggregatedListItems
-diskAggregatedListItems pDaliAddtional_ =
-    DiskAggregatedListItems
-    { _daliAddtional = _Coerce # pDaliAddtional_
-    }
-
--- | [Output Only] Name of the scope containing this set of disks.
-daliAddtional :: Lens' DiskAggregatedListItems (HashMap Text DisksScopedList)
-daliAddtional
-  = lens _daliAddtional
-      (\ s a -> s{_daliAddtional = a})
-      . _Coerce
-
-instance FromJSON DiskAggregatedListItems where
-        parseJSON
-          = withObject "DiskAggregatedListItems"
-              (\ o ->
-                 DiskAggregatedListItems <$> (parseJSONObject o))
-
-instance ToJSON DiskAggregatedListItems where
-        toJSON = toJSON . _daliAddtional
-
--- | The location in Cloud Storage and naming method of the daily usage
--- report. Contains bucket_name and report_name prefix.
---
--- /See:/ 'usageExportLocation' smart constructor.
-data UsageExportLocation = UsageExportLocation
-    { _uelReportNamePrefix :: !(Maybe Text)
-    , _uelBucketName       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UsageExportLocation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uelReportNamePrefix'
---
--- * 'uelBucketName'
-usageExportLocation
-    :: UsageExportLocation
-usageExportLocation =
-    UsageExportLocation
-    { _uelReportNamePrefix = Nothing
-    , _uelBucketName = Nothing
-    }
-
--- | An optional prefix for the name of the usage report object stored in
--- bucketName. If not supplied, defaults to usage. The report is stored as
--- a CSV file named report_name_prefix_gce_YYYYMMDD.csv where YYYYMMDD is
--- the day of the usage according to Pacific Time. If you supply a prefix,
--- it should conform to Cloud Storage object naming conventions.
-uelReportNamePrefix :: Lens' UsageExportLocation (Maybe Text)
-uelReportNamePrefix
-  = lens _uelReportNamePrefix
-      (\ s a -> s{_uelReportNamePrefix = a})
-
--- | The name of an existing bucket in Cloud Storage where the usage report
--- object is stored. The Google Service Account is granted write access to
--- this bucket. This is just the bucket name, with no gs:\/\/ or
--- https:\/\/storage.googleapis.com\/ in front of it.
-uelBucketName :: Lens' UsageExportLocation (Maybe Text)
-uelBucketName
-  = lens _uelBucketName
-      (\ s a -> s{_uelBucketName = a})
-
-instance FromJSON UsageExportLocation where
-        parseJSON
-          = withObject "UsageExportLocation"
-              (\ o ->
-                 UsageExportLocation <$>
-                   (o .:? "reportNamePrefix") <*> (o .:? "bucketName"))
-
-instance ToJSON UsageExportLocation where
-        toJSON UsageExportLocation{..}
-          = object
-              (catMaybes
-                 [("reportNamePrefix" .=) <$> _uelReportNamePrefix,
-                  ("bucketName" .=) <$> _uelBucketName])
-
--- | Contains a list of zone resources.
---
--- /See:/ 'zoneList' smart constructor.
-data ZoneList = ZoneList
-    { _zlNextPageToken :: !(Maybe Text)
-    , _zlKind          :: !Text
-    , _zlItems         :: !(Maybe [Zone])
-    , _zlSelfLink      :: !(Maybe Text)
-    , _zlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ZoneList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'zlNextPageToken'
---
--- * 'zlKind'
---
--- * 'zlItems'
---
--- * 'zlSelfLink'
---
--- * 'zlId'
-zoneList
-    :: ZoneList
-zoneList =
-    ZoneList
-    { _zlNextPageToken = Nothing
-    , _zlKind = "compute#zoneList"
-    , _zlItems = Nothing
-    , _zlSelfLink = Nothing
-    , _zlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-zlNextPageToken :: Lens' ZoneList (Maybe Text)
-zlNextPageToken
-  = lens _zlNextPageToken
-      (\ s a -> s{_zlNextPageToken = a})
-
--- | Type of resource.
-zlKind :: Lens' ZoneList Text
-zlKind = lens _zlKind (\ s a -> s{_zlKind = a})
-
--- | [Output Only] A list of Zone resources.
-zlItems :: Lens' ZoneList [Zone]
-zlItems
-  = lens _zlItems (\ s a -> s{_zlItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-zlSelfLink :: Lens' ZoneList (Maybe Text)
-zlSelfLink
-  = lens _zlSelfLink (\ s a -> s{_zlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-zlId :: Lens' ZoneList (Maybe Text)
-zlId = lens _zlId (\ s a -> s{_zlId = a})
-
-instance FromJSON ZoneList where
-        parseJSON
-          = withObject "ZoneList"
-              (\ o ->
-                 ZoneList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#zoneList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON ZoneList where
-        toJSON ZoneList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _zlNextPageToken,
-                  Just ("kind" .= _zlKind), ("items" .=) <$> _zlItems,
-                  ("selfLink" .=) <$> _zlSelfLink,
-                  ("id" .=) <$> _zlId])
-
---
--- /See:/ 'managedInstance' smart constructor.
-data ManagedInstance = ManagedInstance
-    { _miLastAttempt    :: !(Maybe ManagedInstanceLastAttempt)
-    , _miCurrentAction  :: !(Maybe ManagedInstanceCurrentAction)
-    , _miId             :: !(Maybe (Textual Word64))
-    , _miInstanceStatus :: !(Maybe ManagedInstanceInstanceStatus)
-    , _miInstance       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ManagedInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miLastAttempt'
---
--- * 'miCurrentAction'
---
--- * 'miId'
---
--- * 'miInstanceStatus'
---
--- * 'miInstance'
-managedInstance
-    :: ManagedInstance
-managedInstance =
-    ManagedInstance
-    { _miLastAttempt = Nothing
-    , _miCurrentAction = Nothing
-    , _miId = Nothing
-    , _miInstanceStatus = Nothing
-    , _miInstance = Nothing
-    }
-
--- | [Output Only] Information about the last attempt to create or delete the
--- instance.
-miLastAttempt :: Lens' ManagedInstance (Maybe ManagedInstanceLastAttempt)
-miLastAttempt
-  = lens _miLastAttempt
-      (\ s a -> s{_miLastAttempt = a})
-
--- | [Output Only] The current action that the managed instance group has
--- scheduled for the instance. Possible values: - NONE The instance is
--- running, and the managed instance group does not have any scheduled
--- actions for this instance. - CREATING The managed instance group is
--- creating this instance. - RECREATING The managed instance group is
--- recreating this instance. - DELETING The managed instance group is
--- permanently deleting this instance. - ABANDONING The managed instance
--- group is abandoning this instance. The instance will be removed from the
--- instance group and from any target pools that are associated with this
--- group. - RESTARTING The managed instance group is restarting the
--- instance. - REFRESHING The managed instance group is applying
--- configuration changes to the instance without stopping it. For example,
--- the group can update the target pool list for an instance without
--- stopping that instance.
-miCurrentAction :: Lens' ManagedInstance (Maybe ManagedInstanceCurrentAction)
-miCurrentAction
-  = lens _miCurrentAction
-      (\ s a -> s{_miCurrentAction = a})
-
--- | [Output only] The unique identifier for this resource. This field is
--- empty when instance does not exist.
-miId :: Lens' ManagedInstance (Maybe Word64)
-miId
-  = lens _miId (\ s a -> s{_miId = a}) .
-      mapping _Coerce
-
--- | [Output Only] The status of the instance. This field is empty when the
--- instance does not exist.
-miInstanceStatus :: Lens' ManagedInstance (Maybe ManagedInstanceInstanceStatus)
-miInstanceStatus
-  = lens _miInstanceStatus
-      (\ s a -> s{_miInstanceStatus = a})
-
--- | [Output Only] The URL of the instance. The URL can exist even if the
--- instance has not yet been created.
-miInstance :: Lens' ManagedInstance (Maybe Text)
-miInstance
-  = lens _miInstance (\ s a -> s{_miInstance = a})
-
-instance FromJSON ManagedInstance where
-        parseJSON
-          = withObject "ManagedInstance"
-              (\ o ->
-                 ManagedInstance <$>
-                   (o .:? "lastAttempt") <*> (o .:? "currentAction") <*>
-                     (o .:? "id")
-                     <*> (o .:? "instanceStatus")
-                     <*> (o .:? "instance"))
-
-instance ToJSON ManagedInstance where
-        toJSON ManagedInstance{..}
-          = object
-              (catMaybes
-                 [("lastAttempt" .=) <$> _miLastAttempt,
-                  ("currentAction" .=) <$> _miCurrentAction,
-                  ("id" .=) <$> _miId,
-                  ("instanceStatus" .=) <$> _miInstanceStatus,
-                  ("instance" .=) <$> _miInstance])
-
--- | [Output Only] A map of filtered managed instance group lists.
---
--- /See:/ 'instanceGroupManagerAggregatedListItems' smart constructor.
-newtype InstanceGroupManagerAggregatedListItems = InstanceGroupManagerAggregatedListItems
-    { _igmaliAddtional :: HashMap Text InstanceGroupManagersScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagerAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmaliAddtional'
-instanceGroupManagerAggregatedListItems
-    :: HashMap Text InstanceGroupManagersScopedList -- ^ 'igmaliAddtional'
-    -> InstanceGroupManagerAggregatedListItems
-instanceGroupManagerAggregatedListItems pIgmaliAddtional_ =
-    InstanceGroupManagerAggregatedListItems
-    { _igmaliAddtional = _Coerce # pIgmaliAddtional_
-    }
-
--- | [Output Only] The name of the scope that contains this set of managed
--- instance groups.
-igmaliAddtional :: Lens' InstanceGroupManagerAggregatedListItems (HashMap Text InstanceGroupManagersScopedList)
-igmaliAddtional
-  = lens _igmaliAddtional
-      (\ s a -> s{_igmaliAddtional = a})
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupManagerAggregatedListItems where
-        parseJSON
-          = withObject
-              "InstanceGroupManagerAggregatedListItems"
-              (\ o ->
-                 InstanceGroupManagerAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON
-         InstanceGroupManagerAggregatedListItems where
-        toJSON = toJSON . _igmaliAddtional
-
---
--- /See:/ 'instanceGroupManagersDeleteInstancesRequest' smart constructor.
-newtype InstanceGroupManagersDeleteInstancesRequest = InstanceGroupManagersDeleteInstancesRequest
-    { _igmdirInstances :: Maybe [Text]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersDeleteInstancesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmdirInstances'
-instanceGroupManagersDeleteInstancesRequest
-    :: InstanceGroupManagersDeleteInstancesRequest
-instanceGroupManagersDeleteInstancesRequest =
-    InstanceGroupManagersDeleteInstancesRequest
-    { _igmdirInstances = Nothing
-    }
-
--- | The list of instances to delete from this managed instance group.
--- Specify one or more instance URLs.
-igmdirInstances :: Lens' InstanceGroupManagersDeleteInstancesRequest [Text]
-igmdirInstances
-  = lens _igmdirInstances
-      (\ s a -> s{_igmdirInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupManagersDeleteInstancesRequest where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersDeleteInstancesRequest"
-              (\ o ->
-                 InstanceGroupManagersDeleteInstancesRequest <$>
-                   (o .:? "instances" .!= mempty))
-
-instance ToJSON
-         InstanceGroupManagersDeleteInstancesRequest where
-        toJSON
-          InstanceGroupManagersDeleteInstancesRequest{..}
-          = object
-              (catMaybes [("instances" .=) <$> _igmdirInstances])
-
--- | Message containing information of one individual backend.
---
--- /See:/ 'backend' smart constructor.
-data Backend = Backend
-    { _bGroup              :: !(Maybe Text)
-    , _bBalancingMode      :: !(Maybe BackendBalancingMode)
-    , _bMaxUtilization     :: !(Maybe (Textual Double))
-    , _bMaxRate            :: !(Maybe (Textual Int32))
-    , _bMaxRatePerInstance :: !(Maybe (Textual Double))
-    , _bDescription        :: !(Maybe Text)
-    , _bCapacityScaler     :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Backend' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bGroup'
---
--- * 'bBalancingMode'
---
--- * 'bMaxUtilization'
---
--- * 'bMaxRate'
---
--- * 'bMaxRatePerInstance'
---
--- * 'bDescription'
---
--- * 'bCapacityScaler'
-backend
-    :: Backend
-backend =
-    Backend
-    { _bGroup = Nothing
-    , _bBalancingMode = Nothing
-    , _bMaxUtilization = Nothing
-    , _bMaxRate = Nothing
-    , _bMaxRatePerInstance = Nothing
-    , _bDescription = Nothing
-    , _bCapacityScaler = Nothing
-    }
-
--- | The fully-qualified URL of a zonal Instance Group resource. This
--- instance group defines the list of instances that serve traffic. Member
--- virtual machine instances from each instance group must live in the same
--- zone as the instance group itself. No two backends in a backend service
--- are allowed to use same Instance Group resource. Note that you must
--- specify an Instance Group resource using the fully-qualified URL, rather
--- than a partial URL.
-bGroup :: Lens' Backend (Maybe Text)
-bGroup = lens _bGroup (\ s a -> s{_bGroup = a})
-
--- | Specifies the balancing mode for this backend. The default is
--- UTILIZATION but available values are UTILIZATION and RATE.
-bBalancingMode :: Lens' Backend (Maybe BackendBalancingMode)
-bBalancingMode
-  = lens _bBalancingMode
-      (\ s a -> s{_bBalancingMode = a})
-
--- | Used when balancingMode is UTILIZATION. This ratio defines the CPU
--- utilization target for the group. The default is 0.8. Valid range is
--- [0.0, 1.0].
-bMaxUtilization :: Lens' Backend (Maybe Double)
-bMaxUtilization
-  = lens _bMaxUtilization
-      (\ s a -> s{_bMaxUtilization = a})
-      . mapping _Coerce
-
--- | The max RPS of the group. Can be used with either balancing mode, but
--- required if RATE mode. For RATE mode, either maxRate or
--- maxRatePerInstance must be set.
-bMaxRate :: Lens' Backend (Maybe Int32)
-bMaxRate
-  = lens _bMaxRate (\ s a -> s{_bMaxRate = a}) .
-      mapping _Coerce
-
--- | The max RPS that a single backed instance can handle. This is used to
--- calculate the capacity of the group. Can be used in either balancing
--- mode. For RATE mode, either maxRate or maxRatePerInstance must be set.
-bMaxRatePerInstance :: Lens' Backend (Maybe Double)
-bMaxRatePerInstance
-  = lens _bMaxRatePerInstance
-      (\ s a -> s{_bMaxRatePerInstance = a})
-      . mapping _Coerce
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-bDescription :: Lens' Backend (Maybe Text)
-bDescription
-  = lens _bDescription (\ s a -> s{_bDescription = a})
-
--- | A multiplier applied to the group\'s maximum servicing capacity (either
--- UTILIZATION or RATE). Default value is 1, which means the group will
--- serve up to 100% of its configured CPU or RPS (depending on
--- balancingMode). A setting of 0 means the group is completely drained,
--- offering 0% of its available CPU or RPS. Valid range is [0.0,1.0].
-bCapacityScaler :: Lens' Backend (Maybe Double)
-bCapacityScaler
-  = lens _bCapacityScaler
-      (\ s a -> s{_bCapacityScaler = a})
-      . mapping _Coerce
-
-instance FromJSON Backend where
-        parseJSON
-          = withObject "Backend"
-              (\ o ->
-                 Backend <$>
-                   (o .:? "group") <*> (o .:? "balancingMode") <*>
-                     (o .:? "maxUtilization")
-                     <*> (o .:? "maxRate")
-                     <*> (o .:? "maxRatePerInstance")
-                     <*> (o .:? "description")
-                     <*> (o .:? "capacityScaler"))
-
-instance ToJSON Backend where
-        toJSON Backend{..}
-          = object
-              (catMaybes
-                 [("group" .=) <$> _bGroup,
-                  ("balancingMode" .=) <$> _bBalancingMode,
-                  ("maxUtilization" .=) <$> _bMaxUtilization,
-                  ("maxRate" .=) <$> _bMaxRate,
-                  ("maxRatePerInstance" .=) <$> _bMaxRatePerInstance,
-                  ("description" .=) <$> _bDescription,
-                  ("capacityScaler" .=) <$> _bCapacityScaler])
-
--- | [Output Only] Informational warning which replaces the list of addresses
--- when the list is empty.
---
--- /See:/ 'targetVPNGatewaysScopedListWarning' smart constructor.
-data TargetVPNGatewaysScopedListWarning = TargetVPNGatewaysScopedListWarning
-    { _tvgslwData    :: !(Maybe [TargetVPNGatewaysScopedListWarningDataItem])
-    , _tvgslwCode    :: !(Maybe TargetVPNGatewaysScopedListWarningCode)
-    , _tvgslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGatewaysScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvgslwData'
---
--- * 'tvgslwCode'
---
--- * 'tvgslwMessage'
-targetVPNGatewaysScopedListWarning
-    :: TargetVPNGatewaysScopedListWarning
-targetVPNGatewaysScopedListWarning =
-    TargetVPNGatewaysScopedListWarning
-    { _tvgslwData = Nothing
-    , _tvgslwCode = Nothing
-    , _tvgslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-tvgslwData :: Lens' TargetVPNGatewaysScopedListWarning [TargetVPNGatewaysScopedListWarningDataItem]
-tvgslwData
-  = lens _tvgslwData (\ s a -> s{_tvgslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-tvgslwCode :: Lens' TargetVPNGatewaysScopedListWarning (Maybe TargetVPNGatewaysScopedListWarningCode)
-tvgslwCode
-  = lens _tvgslwCode (\ s a -> s{_tvgslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-tvgslwMessage :: Lens' TargetVPNGatewaysScopedListWarning (Maybe Text)
-tvgslwMessage
-  = lens _tvgslwMessage
-      (\ s a -> s{_tvgslwMessage = a})
-
-instance FromJSON TargetVPNGatewaysScopedListWarning
-         where
-        parseJSON
-          = withObject "TargetVPNGatewaysScopedListWarning"
-              (\ o ->
-                 TargetVPNGatewaysScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON TargetVPNGatewaysScopedListWarning
-         where
-        toJSON TargetVPNGatewaysScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _tvgslwData,
-                  ("code" .=) <$> _tvgslwCode,
-                  ("message" .=) <$> _tvgslwMessage])
-
--- | Contains a list of address resources.
---
--- /See:/ 'addressList' smart constructor.
-data AddressList = AddressList
-    { _alNextPageToken :: !(Maybe Text)
-    , _alKind          :: !Text
-    , _alItems         :: !(Maybe [Address])
-    , _alSelfLink      :: !(Maybe Text)
-    , _alId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddressList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'alNextPageToken'
---
--- * 'alKind'
---
--- * 'alItems'
---
--- * 'alSelfLink'
---
--- * 'alId'
-addressList
-    :: AddressList
-addressList =
-    AddressList
-    { _alNextPageToken = Nothing
-    , _alKind = "compute#addressList"
-    , _alItems = Nothing
-    , _alSelfLink = Nothing
-    , _alId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-alNextPageToken :: Lens' AddressList (Maybe Text)
-alNextPageToken
-  = lens _alNextPageToken
-      (\ s a -> s{_alNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#addressList for lists of
--- addresses.
-alKind :: Lens' AddressList Text
-alKind = lens _alKind (\ s a -> s{_alKind = a})
-
--- | [Output Only] A list of Address resources.
-alItems :: Lens' AddressList [Address]
-alItems
-  = lens _alItems (\ s a -> s{_alItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for the resource.
-alSelfLink :: Lens' AddressList (Maybe Text)
-alSelfLink
-  = lens _alSelfLink (\ s a -> s{_alSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-alId :: Lens' AddressList (Maybe Text)
-alId = lens _alId (\ s a -> s{_alId = a})
-
-instance FromJSON AddressList where
-        parseJSON
-          = withObject "AddressList"
-              (\ o ->
-                 AddressList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#addressList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON AddressList where
-        toJSON AddressList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _alNextPageToken,
-                  Just ("kind" .= _alKind), ("items" .=) <$> _alItems,
-                  ("selfLink" .=) <$> _alSelfLink,
-                  ("id" .=) <$> _alId])
-
--- | A map of scoped forwarding rule lists.
---
--- /See:/ 'forwardingRuleAggregatedListItems' smart constructor.
-newtype ForwardingRuleAggregatedListItems = ForwardingRuleAggregatedListItems
-    { _fraliAddtional :: HashMap Text ForwardingRulesScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRuleAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fraliAddtional'
-forwardingRuleAggregatedListItems
-    :: HashMap Text ForwardingRulesScopedList -- ^ 'fraliAddtional'
-    -> ForwardingRuleAggregatedListItems
-forwardingRuleAggregatedListItems pFraliAddtional_ =
-    ForwardingRuleAggregatedListItems
-    { _fraliAddtional = _Coerce # pFraliAddtional_
-    }
-
--- | Name of the scope containing this set of addresses.
-fraliAddtional :: Lens' ForwardingRuleAggregatedListItems (HashMap Text ForwardingRulesScopedList)
-fraliAddtional
-  = lens _fraliAddtional
-      (\ s a -> s{_fraliAddtional = a})
-      . _Coerce
-
-instance FromJSON ForwardingRuleAggregatedListItems
-         where
-        parseJSON
-          = withObject "ForwardingRuleAggregatedListItems"
-              (\ o ->
-                 ForwardingRuleAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON ForwardingRuleAggregatedListItems
-         where
-        toJSON = toJSON . _fraliAddtional
-
--- | [Output Only] A map of scoped operation lists.
---
--- /See:/ 'operationAggregatedListItems' smart constructor.
-newtype OperationAggregatedListItems = OperationAggregatedListItems
-    { _oaliAddtional :: HashMap Text OperationsScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oaliAddtional'
-operationAggregatedListItems
-    :: HashMap Text OperationsScopedList -- ^ 'oaliAddtional'
-    -> OperationAggregatedListItems
-operationAggregatedListItems pOaliAddtional_ =
-    OperationAggregatedListItems
-    { _oaliAddtional = _Coerce # pOaliAddtional_
-    }
-
--- | [Output Only] Name of the scope containing this set of operations.
-oaliAddtional :: Lens' OperationAggregatedListItems (HashMap Text OperationsScopedList)
-oaliAddtional
-  = lens _oaliAddtional
-      (\ s a -> s{_oaliAddtional = a})
-      . _Coerce
-
-instance FromJSON OperationAggregatedListItems where
-        parseJSON
-          = withObject "OperationAggregatedListItems"
-              (\ o ->
-                 OperationAggregatedListItems <$> (parseJSONObject o))
-
-instance ToJSON OperationAggregatedListItems where
-        toJSON = toJSON . _oaliAddtional
-
---
--- /See:/ 'instanceGroupManagerActionsSummary' smart constructor.
-data InstanceGroupManagerActionsSummary = InstanceGroupManagerActionsSummary
-    { _igmasDeleting   :: !(Maybe (Textual Int32))
-    , _igmasRestarting :: !(Maybe (Textual Int32))
-    , _igmasNone       :: !(Maybe (Textual Int32))
-    , _igmasCreating   :: !(Maybe (Textual Int32))
-    , _igmasRefreshing :: !(Maybe (Textual Int32))
-    , _igmasRecreating :: !(Maybe (Textual Int32))
-    , _igmasAbandoning :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagerActionsSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmasDeleting'
---
--- * 'igmasRestarting'
---
--- * 'igmasNone'
---
--- * 'igmasCreating'
---
--- * 'igmasRefreshing'
---
--- * 'igmasRecreating'
---
--- * 'igmasAbandoning'
-instanceGroupManagerActionsSummary
-    :: InstanceGroupManagerActionsSummary
-instanceGroupManagerActionsSummary =
-    InstanceGroupManagerActionsSummary
-    { _igmasDeleting = Nothing
-    , _igmasRestarting = Nothing
-    , _igmasNone = Nothing
-    , _igmasCreating = Nothing
-    , _igmasRefreshing = Nothing
-    , _igmasRecreating = Nothing
-    , _igmasAbandoning = Nothing
-    }
-
--- | [Output Only] The number of instances in the managed instance group that
--- are scheduled to be deleted or are currently being deleted.
-igmasDeleting :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasDeleting
-  = lens _igmasDeleting
-      (\ s a -> s{_igmasDeleting = a})
-      . mapping _Coerce
-
--- | [Output Only] The number of instances in the managed instance group that
--- are scheduled to be restarted or are currently being restarted.
-igmasRestarting :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasRestarting
-  = lens _igmasRestarting
-      (\ s a -> s{_igmasRestarting = a})
-      . mapping _Coerce
-
--- | [Output Only] The number of instances in the managed instance group that
--- are running and have no scheduled actions.
-igmasNone :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasNone
-  = lens _igmasNone (\ s a -> s{_igmasNone = a}) .
-      mapping _Coerce
-
--- | [Output Only] The number of instances in the managed instance group that
--- are scheduled to be created or are currently being created.
-igmasCreating :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasCreating
-  = lens _igmasCreating
-      (\ s a -> s{_igmasCreating = a})
-      . mapping _Coerce
-
--- | [Output Only] The number of instances in the managed instance group that
--- are being reconfigured with properties that do not require a restart or
--- a recreate action. For example, setting or removing target pools for the
--- instance.
-igmasRefreshing :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasRefreshing
-  = lens _igmasRefreshing
-      (\ s a -> s{_igmasRefreshing = a})
-      . mapping _Coerce
-
--- | [Output Only] The number of instances in the managed instance group that
--- are scheduled to be recreated or are currently being being recreated.
--- Recreating an instance deletes the existing root persistent disk and
--- creates a new disk from the image that is defined in the instance
--- template.
-igmasRecreating :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasRecreating
-  = lens _igmasRecreating
-      (\ s a -> s{_igmasRecreating = a})
-      . mapping _Coerce
-
--- | [Output Only] The total number of instances in the managed instance
--- group that are scheduled to be abandoned. Abandoning an instance removes
--- it from the managed instance group without deleting it.
-igmasAbandoning :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
-igmasAbandoning
-  = lens _igmasAbandoning
-      (\ s a -> s{_igmasAbandoning = a})
-      . mapping _Coerce
-
-instance FromJSON InstanceGroupManagerActionsSummary
-         where
-        parseJSON
-          = withObject "InstanceGroupManagerActionsSummary"
-              (\ o ->
-                 InstanceGroupManagerActionsSummary <$>
-                   (o .:? "deleting") <*> (o .:? "restarting") <*>
-                     (o .:? "none")
-                     <*> (o .:? "creating")
-                     <*> (o .:? "refreshing")
-                     <*> (o .:? "recreating")
-                     <*> (o .:? "abandoning"))
-
-instance ToJSON InstanceGroupManagerActionsSummary
-         where
-        toJSON InstanceGroupManagerActionsSummary{..}
-          = object
-              (catMaybes
-                 [("deleting" .=) <$> _igmasDeleting,
-                  ("restarting" .=) <$> _igmasRestarting,
-                  ("none" .=) <$> _igmasNone,
-                  ("creating" .=) <$> _igmasCreating,
-                  ("refreshing" .=) <$> _igmasRefreshing,
-                  ("recreating" .=) <$> _igmasRecreating,
-                  ("abandoning" .=) <$> _igmasAbandoning])
-
--- | A service account.
---
--- /See:/ 'serviceAccount' smart constructor.
-data ServiceAccount = ServiceAccount
-    { _saEmail  :: !(Maybe Text)
-    , _saScopes :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ServiceAccount' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'saEmail'
---
--- * 'saScopes'
-serviceAccount
-    :: ServiceAccount
-serviceAccount =
-    ServiceAccount
-    { _saEmail = Nothing
-    , _saScopes = Nothing
-    }
-
--- | Email address of the service account.
-saEmail :: Lens' ServiceAccount (Maybe Text)
-saEmail = lens _saEmail (\ s a -> s{_saEmail = a})
-
--- | The list of scopes to be made available for this service account.
-saScopes :: Lens' ServiceAccount [Text]
-saScopes
-  = lens _saScopes (\ s a -> s{_saScopes = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ServiceAccount where
-        parseJSON
-          = withObject "ServiceAccount"
-              (\ o ->
-                 ServiceAccount <$>
-                   (o .:? "email") <*> (o .:? "scopes" .!= mempty))
-
-instance ToJSON ServiceAccount where
-        toJSON ServiceAccount{..}
-          = object
-              (catMaybes
-                 [("email" .=) <$> _saEmail,
-                  ("scopes" .=) <$> _saScopes])
-
--- | Contains a list of Network resources.
---
--- /See:/ 'networkList' smart constructor.
-data NetworkList = NetworkList
-    { _nlNextPageToken :: !(Maybe Text)
-    , _nlKind          :: !Text
-    , _nlItems         :: !(Maybe [Network])
-    , _nlSelfLink      :: !(Maybe Text)
-    , _nlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nlNextPageToken'
---
--- * 'nlKind'
---
--- * 'nlItems'
---
--- * 'nlSelfLink'
---
--- * 'nlId'
-networkList
-    :: NetworkList
-networkList =
-    NetworkList
-    { _nlNextPageToken = Nothing
-    , _nlKind = "compute#networkList"
-    , _nlItems = Nothing
-    , _nlSelfLink = Nothing
-    , _nlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-nlNextPageToken :: Lens' NetworkList (Maybe Text)
-nlNextPageToken
-  = lens _nlNextPageToken
-      (\ s a -> s{_nlNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#networkList for lists of
--- networks.
-nlKind :: Lens' NetworkList Text
-nlKind = lens _nlKind (\ s a -> s{_nlKind = a})
-
--- | [Output Only] A list of Network resources.
-nlItems :: Lens' NetworkList [Network]
-nlItems
-  = lens _nlItems (\ s a -> s{_nlItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource .
-nlSelfLink :: Lens' NetworkList (Maybe Text)
-nlSelfLink
-  = lens _nlSelfLink (\ s a -> s{_nlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-nlId :: Lens' NetworkList (Maybe Text)
-nlId = lens _nlId (\ s a -> s{_nlId = a})
-
-instance FromJSON NetworkList where
-        parseJSON
-          = withObject "NetworkList"
-              (\ o ->
-                 NetworkList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#networkList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON NetworkList where
-        toJSON NetworkList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _nlNextPageToken,
-                  Just ("kind" .= _nlKind), ("items" .=) <$> _nlItems,
-                  ("selfLink" .=) <$> _nlSelfLink,
-                  ("id" .=) <$> _nlId])
-
---
--- /See:/ 'instanceGroupsListInstancesRequest' smart constructor.
-newtype InstanceGroupsListInstancesRequest = InstanceGroupsListInstancesRequest
-    { _iglirInstanceState :: Maybe InstanceGroupsListInstancesRequestInstanceState
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsListInstancesRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iglirInstanceState'
-instanceGroupsListInstancesRequest
-    :: InstanceGroupsListInstancesRequest
-instanceGroupsListInstancesRequest =
-    InstanceGroupsListInstancesRequest
-    { _iglirInstanceState = Nothing
-    }
-
--- | A filter for the state of the instances in the instance group. Valid
--- options are ALL or RUNNING. If you do not specify this parameter the
--- list includes all instances regardless of their state.
-iglirInstanceState :: Lens' InstanceGroupsListInstancesRequest (Maybe InstanceGroupsListInstancesRequestInstanceState)
-iglirInstanceState
-  = lens _iglirInstanceState
-      (\ s a -> s{_iglirInstanceState = a})
-
-instance FromJSON InstanceGroupsListInstancesRequest
-         where
-        parseJSON
-          = withObject "InstanceGroupsListInstancesRequest"
-              (\ o ->
-                 InstanceGroupsListInstancesRequest <$>
-                   (o .:? "instanceState"))
-
-instance ToJSON InstanceGroupsListInstancesRequest
-         where
-        toJSON InstanceGroupsListInstancesRequest{..}
-          = object
-              (catMaybes
-                 [("instanceState" .=) <$> _iglirInstanceState])
-
--- | A map of scoped target pool lists.
---
--- /See:/ 'targetPoolAggregatedListItems' smart constructor.
-newtype TargetPoolAggregatedListItems = TargetPoolAggregatedListItems
-    { _tpaliAddtional :: HashMap Text TargetPoolsScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpaliAddtional'
-targetPoolAggregatedListItems
-    :: HashMap Text TargetPoolsScopedList -- ^ 'tpaliAddtional'
-    -> TargetPoolAggregatedListItems
-targetPoolAggregatedListItems pTpaliAddtional_ =
-    TargetPoolAggregatedListItems
-    { _tpaliAddtional = _Coerce # pTpaliAddtional_
-    }
-
--- | Name of the scope containing this set of target pools.
-tpaliAddtional :: Lens' TargetPoolAggregatedListItems (HashMap Text TargetPoolsScopedList)
-tpaliAddtional
-  = lens _tpaliAddtional
-      (\ s a -> s{_tpaliAddtional = a})
-      . _Coerce
-
-instance FromJSON TargetPoolAggregatedListItems where
-        parseJSON
-          = withObject "TargetPoolAggregatedListItems"
-              (\ o ->
-                 TargetPoolAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON TargetPoolAggregatedListItems where
-        toJSON = toJSON . _tpaliAddtional
-
---
--- /See:/ 'targetInstancesScopedList' smart constructor.
-data TargetInstancesScopedList = TargetInstancesScopedList
-    { _tislWarning         :: !(Maybe TargetInstancesScopedListWarning)
-    , _tislTargetInstances :: !(Maybe [TargetInstance])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstancesScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tislWarning'
---
--- * 'tislTargetInstances'
-targetInstancesScopedList
-    :: TargetInstancesScopedList
-targetInstancesScopedList =
-    TargetInstancesScopedList
-    { _tislWarning = Nothing
-    , _tislTargetInstances = Nothing
-    }
-
--- | Informational warning which replaces the list of addresses when the list
--- is empty.
-tislWarning :: Lens' TargetInstancesScopedList (Maybe TargetInstancesScopedListWarning)
-tislWarning
-  = lens _tislWarning (\ s a -> s{_tislWarning = a})
-
--- | List of target instances contained in this scope.
-tislTargetInstances :: Lens' TargetInstancesScopedList [TargetInstance]
-tislTargetInstances
-  = lens _tislTargetInstances
-      (\ s a -> s{_tislTargetInstances = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON TargetInstancesScopedList where
-        parseJSON
-          = withObject "TargetInstancesScopedList"
-              (\ o ->
-                 TargetInstancesScopedList <$>
-                   (o .:? "warning") <*>
-                     (o .:? "targetInstances" .!= mempty))
-
-instance ToJSON TargetInstancesScopedList where
-        toJSON TargetInstancesScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _tislWarning,
-                  ("targetInstances" .=) <$> _tislTargetInstances])
-
--- | [Output Only] A map of scoped address lists.
---
--- /See:/ 'addressAggregatedListItems' smart constructor.
-newtype AddressAggregatedListItems = AddressAggregatedListItems
-    { _aAddtional :: HashMap Text AddressesScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddressAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aAddtional'
-addressAggregatedListItems
-    :: HashMap Text AddressesScopedList -- ^ 'aAddtional'
-    -> AddressAggregatedListItems
-addressAggregatedListItems pAAddtional_ =
-    AddressAggregatedListItems
-    { _aAddtional = _Coerce # pAAddtional_
-    }
-
--- | [Output Only] Name of the scope containing this set of addresses.
-aAddtional :: Lens' AddressAggregatedListItems (HashMap Text AddressesScopedList)
-aAddtional
-  = lens _aAddtional (\ s a -> s{_aAddtional = a}) .
-      _Coerce
-
-instance FromJSON AddressAggregatedListItems where
-        parseJSON
-          = withObject "AddressAggregatedListItems"
-              (\ o ->
-                 AddressAggregatedListItems <$> (parseJSONObject o))
-
-instance ToJSON AddressAggregatedListItems where
-        toJSON = toJSON . _aAddtional
-
--- | Contains a list of persistent autoscaler resources.
---
--- /See:/ 'autoscalerList' smart constructor.
-data AutoscalerList = AutoscalerList
-    { _autNextPageToken :: !(Maybe Text)
-    , _autKind          :: !Text
-    , _autItems         :: !(Maybe [Autoscaler])
-    , _autSelfLink      :: !(Maybe Text)
-    , _autId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalerList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'autNextPageToken'
---
--- * 'autKind'
---
--- * 'autItems'
---
--- * 'autSelfLink'
---
--- * 'autId'
-autoscalerList
-    :: AutoscalerList
-autoscalerList =
-    AutoscalerList
-    { _autNextPageToken = Nothing
-    , _autKind = "compute#autoscalerList"
-    , _autItems = Nothing
-    , _autSelfLink = Nothing
-    , _autId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-autNextPageToken :: Lens' AutoscalerList (Maybe Text)
-autNextPageToken
-  = lens _autNextPageToken
-      (\ s a -> s{_autNextPageToken = a})
-
--- | Type of resource.
-autKind :: Lens' AutoscalerList Text
-autKind = lens _autKind (\ s a -> s{_autKind = a})
-
--- | A list of Autoscaler resources.
-autItems :: Lens' AutoscalerList [Autoscaler]
-autItems
-  = lens _autItems (\ s a -> s{_autItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-autSelfLink :: Lens' AutoscalerList (Maybe Text)
-autSelfLink
-  = lens _autSelfLink (\ s a -> s{_autSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-autId :: Lens' AutoscalerList (Maybe Text)
-autId = lens _autId (\ s a -> s{_autId = a})
-
-instance FromJSON AutoscalerList where
-        parseJSON
-          = withObject "AutoscalerList"
-              (\ o ->
-                 AutoscalerList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#autoscalerList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON AutoscalerList where
-        toJSON AutoscalerList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _autNextPageToken,
-                  Just ("kind" .= _autKind),
-                  ("items" .=) <$> _autItems,
-                  ("selfLink" .=) <$> _autSelfLink,
-                  ("id" .=) <$> _autId])
-
---
--- /See:/ 'vpnTunnelAggregatedList' smart constructor.
-data VPNTunnelAggregatedList = VPNTunnelAggregatedList
-    { _vtalNextPageToken :: !(Maybe Text)
-    , _vtalKind          :: !Text
-    , _vtalItems         :: !(Maybe VPNTunnelAggregatedListItems)
-    , _vtalSelfLink      :: !(Maybe Text)
-    , _vtalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnelAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtalNextPageToken'
---
--- * 'vtalKind'
---
--- * 'vtalItems'
---
--- * 'vtalSelfLink'
---
--- * 'vtalId'
-vpnTunnelAggregatedList
-    :: VPNTunnelAggregatedList
-vpnTunnelAggregatedList =
-    VPNTunnelAggregatedList
-    { _vtalNextPageToken = Nothing
-    , _vtalKind = "compute#vpnTunnelAggregatedList"
-    , _vtalItems = Nothing
-    , _vtalSelfLink = Nothing
-    , _vtalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-vtalNextPageToken :: Lens' VPNTunnelAggregatedList (Maybe Text)
-vtalNextPageToken
-  = lens _vtalNextPageToken
-      (\ s a -> s{_vtalNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#vpnTunnel for VPN
--- tunnels.
-vtalKind :: Lens' VPNTunnelAggregatedList Text
-vtalKind = lens _vtalKind (\ s a -> s{_vtalKind = a})
-
--- | [Output Only] A map of scoped vpn tunnel lists.
-vtalItems :: Lens' VPNTunnelAggregatedList (Maybe VPNTunnelAggregatedListItems)
-vtalItems
-  = lens _vtalItems (\ s a -> s{_vtalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-vtalSelfLink :: Lens' VPNTunnelAggregatedList (Maybe Text)
-vtalSelfLink
-  = lens _vtalSelfLink (\ s a -> s{_vtalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-vtalId :: Lens' VPNTunnelAggregatedList (Maybe Text)
-vtalId = lens _vtalId (\ s a -> s{_vtalId = a})
-
-instance FromJSON VPNTunnelAggregatedList where
-        parseJSON
-          = withObject "VPNTunnelAggregatedList"
-              (\ o ->
-                 VPNTunnelAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#vpnTunnelAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON VPNTunnelAggregatedList where
-        toJSON VPNTunnelAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _vtalNextPageToken,
-                  Just ("kind" .= _vtalKind),
-                  ("items" .=) <$> _vtalItems,
-                  ("selfLink" .=) <$> _vtalSelfLink,
-                  ("id" .=) <$> _vtalId])
-
--- | An instance-attached disk resource.
---
--- /See:/ 'attachedDisk' smart constructor.
-data AttachedDisk = AttachedDisk
-    { _adKind             :: !Text
-    , _adMode             :: !(Maybe AttachedDiskMode)
-    , _adBoot             :: !(Maybe Bool)
-    , _adAutoDelete       :: !(Maybe Bool)
-    , _adInitializeParams :: !(Maybe AttachedDiskInitializeParams)
-    , _adDeviceName       :: !(Maybe Text)
-    , _adInterface        :: !(Maybe AttachedDiskInterface)
-    , _adSource           :: !(Maybe Text)
-    , _adLicenses         :: !(Maybe [Text])
-    , _adType             :: !(Maybe AttachedDiskType)
-    , _adIndex            :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachedDisk' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adKind'
---
--- * 'adMode'
---
--- * 'adBoot'
---
--- * 'adAutoDelete'
---
--- * 'adInitializeParams'
---
--- * 'adDeviceName'
---
--- * 'adInterface'
---
--- * 'adSource'
---
--- * 'adLicenses'
---
--- * 'adType'
---
--- * 'adIndex'
-attachedDisk
-    :: AttachedDisk
-attachedDisk =
-    AttachedDisk
-    { _adKind = "compute#attachedDisk"
-    , _adMode = Nothing
-    , _adBoot = Nothing
-    , _adAutoDelete = Nothing
-    , _adInitializeParams = Nothing
-    , _adDeviceName = Nothing
-    , _adInterface = Nothing
-    , _adSource = Nothing
-    , _adLicenses = Nothing
-    , _adType = Nothing
-    , _adIndex = Nothing
-    }
-
--- | [Output Only] Type of the resource. Always compute#attachedDisk for
--- attached disks.
-adKind :: Lens' AttachedDisk Text
-adKind = lens _adKind (\ s a -> s{_adKind = a})
-
--- | The mode in which to attach this disk, either READ_WRITE or READ_ONLY.
--- If not specified, the default is to attach the disk in READ_WRITE mode.
-adMode :: Lens' AttachedDisk (Maybe AttachedDiskMode)
-adMode = lens _adMode (\ s a -> s{_adMode = a})
-
--- | Indicates that this is a boot disk. The virtual machine will use the
--- first partition of the disk for its root filesystem.
-adBoot :: Lens' AttachedDisk (Maybe Bool)
-adBoot = lens _adBoot (\ s a -> s{_adBoot = a})
-
--- | Specifies whether the disk will be auto-deleted when the instance is
--- deleted (but not when the disk is detached from the instance).
-adAutoDelete :: Lens' AttachedDisk (Maybe Bool)
-adAutoDelete
-  = lens _adAutoDelete (\ s a -> s{_adAutoDelete = a})
-
--- | [Input Only] Specifies the parameters for a new disk that will be
--- created alongside the new instance. Use initialization parameters to
--- create boot disks or local SSDs attached to the new instance. This
--- property is mutually exclusive with the source property; you can only
--- define one or the other, but not both.
-adInitializeParams :: Lens' AttachedDisk (Maybe AttachedDiskInitializeParams)
-adInitializeParams
-  = lens _adInitializeParams
-      (\ s a -> s{_adInitializeParams = a})
-
--- | Specifies a unique device name of your choice that is reflected into the
--- \/dev\/disk\/by-id\/google-* tree of a Linux operating system running
--- within the instance. This name can be used to reference the device for
--- mounting, resizing, and so on, from within the instance. If not
--- specified, the server chooses a default device name to apply to this
--- disk, in the form persistent-disks-x, where x is a number assigned by
--- Google Compute Engine. This field is only applicable for persistent
--- disks.
-adDeviceName :: Lens' AttachedDisk (Maybe Text)
-adDeviceName
-  = lens _adDeviceName (\ s a -> s{_adDeviceName = a})
-
--- | Specifies the disk interface to use for attaching this disk, either SCSI
--- or NVME. The default is SCSI. For performance characteristics of SCSI
--- over NVMe, see Local SSD performance.
-adInterface :: Lens' AttachedDisk (Maybe AttachedDiskInterface)
-adInterface
-  = lens _adInterface (\ s a -> s{_adInterface = a})
-
--- | Specifies a valid partial or full URL to an existing Persistent Disk
--- resource. This field is only applicable for persistent disks.
-adSource :: Lens' AttachedDisk (Maybe Text)
-adSource = lens _adSource (\ s a -> s{_adSource = a})
-
--- | [Output Only] Any valid publicly visible licenses.
-adLicenses :: Lens' AttachedDisk [Text]
-adLicenses
-  = lens _adLicenses (\ s a -> s{_adLicenses = a}) .
-      _Default
-      . _Coerce
-
--- | Specifies the type of the disk, either SCRATCH or PERSISTENT. If not
--- specified, the default is PERSISTENT.
-adType :: Lens' AttachedDisk (Maybe AttachedDiskType)
-adType = lens _adType (\ s a -> s{_adType = a})
-
--- | Assigns a zero-based index to this disk, where 0 is reserved for the
--- boot disk. For example, if you have many disks attached to an instance,
--- each disk would have a unique index number. If not specified, the server
--- will choose an appropriate value.
-adIndex :: Lens' AttachedDisk (Maybe Int32)
-adIndex
-  = lens _adIndex (\ s a -> s{_adIndex = a}) .
-      mapping _Coerce
-
-instance FromJSON AttachedDisk where
-        parseJSON
-          = withObject "AttachedDisk"
-              (\ o ->
-                 AttachedDisk <$>
-                   (o .:? "kind" .!= "compute#attachedDisk") <*>
-                     (o .:? "mode")
-                     <*> (o .:? "boot")
-                     <*> (o .:? "autoDelete")
-                     <*> (o .:? "initializeParams")
-                     <*> (o .:? "deviceName")
-                     <*> (o .:? "interface")
-                     <*> (o .:? "source")
-                     <*> (o .:? "licenses" .!= mempty)
-                     <*> (o .:? "type")
-                     <*> (o .:? "index"))
-
-instance ToJSON AttachedDisk where
-        toJSON AttachedDisk{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _adKind), ("mode" .=) <$> _adMode,
-                  ("boot" .=) <$> _adBoot,
-                  ("autoDelete" .=) <$> _adAutoDelete,
-                  ("initializeParams" .=) <$> _adInitializeParams,
-                  ("deviceName" .=) <$> _adDeviceName,
-                  ("interface" .=) <$> _adInterface,
-                  ("source" .=) <$> _adSource,
-                  ("licenses" .=) <$> _adLicenses,
-                  ("type" .=) <$> _adType, ("index" .=) <$> _adIndex])
-
--- | Contains a list of disk type resources.
---
--- /See:/ 'diskTypeList' smart constructor.
-data DiskTypeList = DiskTypeList
-    { _dtlNextPageToken :: !(Maybe Text)
-    , _dtlKind          :: !Text
-    , _dtlItems         :: !(Maybe [DiskType])
-    , _dtlSelfLink      :: !(Maybe Text)
-    , _dtlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskTypeList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtlNextPageToken'
---
--- * 'dtlKind'
---
--- * 'dtlItems'
---
--- * 'dtlSelfLink'
---
--- * 'dtlId'
-diskTypeList
-    :: DiskTypeList
-diskTypeList =
-    DiskTypeList
-    { _dtlNextPageToken = Nothing
-    , _dtlKind = "compute#diskTypeList"
-    , _dtlItems = Nothing
-    , _dtlSelfLink = Nothing
-    , _dtlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-dtlNextPageToken :: Lens' DiskTypeList (Maybe Text)
-dtlNextPageToken
-  = lens _dtlNextPageToken
-      (\ s a -> s{_dtlNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#diskTypeList for disk
--- types.
-dtlKind :: Lens' DiskTypeList Text
-dtlKind = lens _dtlKind (\ s a -> s{_dtlKind = a})
-
--- | [Output Only] A list of Disk Type resources.
-dtlItems :: Lens' DiskTypeList [DiskType]
-dtlItems
-  = lens _dtlItems (\ s a -> s{_dtlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-dtlSelfLink :: Lens' DiskTypeList (Maybe Text)
-dtlSelfLink
-  = lens _dtlSelfLink (\ s a -> s{_dtlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-dtlId :: Lens' DiskTypeList (Maybe Text)
-dtlId = lens _dtlId (\ s a -> s{_dtlId = a})
-
-instance FromJSON DiskTypeList where
-        parseJSON
-          = withObject "DiskTypeList"
-              (\ o ->
-                 DiskTypeList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#diskTypeList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON DiskTypeList where
-        toJSON DiskTypeList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _dtlNextPageToken,
-                  Just ("kind" .= _dtlKind),
-                  ("items" .=) <$> _dtlItems,
-                  ("selfLink" .=) <$> _dtlSelfLink,
-                  ("id" .=) <$> _dtlId])
-
--- | Contains a list of Machine Type resources.
---
--- /See:/ 'machineTypeList' smart constructor.
-data MachineTypeList = MachineTypeList
-    { _mtlNextPageToken :: !(Maybe Text)
-    , _mtlKind          :: !Text
-    , _mtlItems         :: !(Maybe [MachineType])
-    , _mtlSelfLink      :: !(Maybe Text)
-    , _mtlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypeList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtlNextPageToken'
---
--- * 'mtlKind'
---
--- * 'mtlItems'
---
--- * 'mtlSelfLink'
---
--- * 'mtlId'
-machineTypeList
-    :: MachineTypeList
-machineTypeList =
-    MachineTypeList
-    { _mtlNextPageToken = Nothing
-    , _mtlKind = "compute#machineTypeList"
-    , _mtlItems = Nothing
-    , _mtlSelfLink = Nothing
-    , _mtlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-mtlNextPageToken :: Lens' MachineTypeList (Maybe Text)
-mtlNextPageToken
-  = lens _mtlNextPageToken
-      (\ s a -> s{_mtlNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#machineTypeList for lists
--- of machine types.
-mtlKind :: Lens' MachineTypeList Text
-mtlKind = lens _mtlKind (\ s a -> s{_mtlKind = a})
-
--- | [Output Only] A list of Machine Type resources.
-mtlItems :: Lens' MachineTypeList [MachineType]
-mtlItems
-  = lens _mtlItems (\ s a -> s{_mtlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-mtlSelfLink :: Lens' MachineTypeList (Maybe Text)
-mtlSelfLink
-  = lens _mtlSelfLink (\ s a -> s{_mtlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-mtlId :: Lens' MachineTypeList (Maybe Text)
-mtlId = lens _mtlId (\ s a -> s{_mtlId = a})
-
-instance FromJSON MachineTypeList where
-        parseJSON
-          = withObject "MachineTypeList"
-              (\ o ->
-                 MachineTypeList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#machineTypeList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON MachineTypeList where
-        toJSON MachineTypeList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _mtlNextPageToken,
-                  Just ("kind" .= _mtlKind),
-                  ("items" .=) <$> _mtlItems,
-                  ("selfLink" .=) <$> _mtlSelfLink,
-                  ("id" .=) <$> _mtlId])
-
--- | A list of TargetHttpProxy resources.
---
--- /See:/ 'targetHTTPProxyList' smart constructor.
-data TargetHTTPProxyList = TargetHTTPProxyList
-    { _thttpplNextPageToken :: !(Maybe Text)
-    , _thttpplKind          :: !Text
-    , _thttpplItems         :: !(Maybe [TargetHTTPProxy])
-    , _thttpplSelfLink      :: !(Maybe Text)
-    , _thttpplId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetHTTPProxyList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'thttpplNextPageToken'
---
--- * 'thttpplKind'
---
--- * 'thttpplItems'
---
--- * 'thttpplSelfLink'
---
--- * 'thttpplId'
-targetHTTPProxyList
-    :: TargetHTTPProxyList
-targetHTTPProxyList =
-    TargetHTTPProxyList
-    { _thttpplNextPageToken = Nothing
-    , _thttpplKind = "compute#targetHttpProxyList"
-    , _thttpplItems = Nothing
-    , _thttpplSelfLink = Nothing
-    , _thttpplId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-thttpplNextPageToken :: Lens' TargetHTTPProxyList (Maybe Text)
-thttpplNextPageToken
-  = lens _thttpplNextPageToken
-      (\ s a -> s{_thttpplNextPageToken = a})
-
--- | Type of resource. Always compute#targetHttpProxyList for lists of Target
--- HTTP proxies.
-thttpplKind :: Lens' TargetHTTPProxyList Text
-thttpplKind
-  = lens _thttpplKind (\ s a -> s{_thttpplKind = a})
-
--- | A list of TargetHttpProxy resources.
-thttpplItems :: Lens' TargetHTTPProxyList [TargetHTTPProxy]
-thttpplItems
-  = lens _thttpplItems (\ s a -> s{_thttpplItems = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-thttpplSelfLink :: Lens' TargetHTTPProxyList (Maybe Text)
-thttpplSelfLink
-  = lens _thttpplSelfLink
-      (\ s a -> s{_thttpplSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-thttpplId :: Lens' TargetHTTPProxyList (Maybe Text)
-thttpplId
-  = lens _thttpplId (\ s a -> s{_thttpplId = a})
-
-instance FromJSON TargetHTTPProxyList where
-        parseJSON
-          = withObject "TargetHTTPProxyList"
-              (\ o ->
-                 TargetHTTPProxyList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#targetHttpProxyList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetHTTPProxyList where
-        toJSON TargetHTTPProxyList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _thttpplNextPageToken,
-                  Just ("kind" .= _thttpplKind),
-                  ("items" .=) <$> _thttpplItems,
-                  ("selfLink" .=) <$> _thttpplSelfLink,
-                  ("id" .=) <$> _thttpplId])
-
---
--- /See:/ 'diskTypesScopedList' smart constructor.
-data DiskTypesScopedList = DiskTypesScopedList
-    { _dtslDiskTypes :: !(Maybe [DiskType])
-    , _dtslWarning   :: !(Maybe DiskTypesScopedListWarning)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskTypesScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtslDiskTypes'
---
--- * 'dtslWarning'
-diskTypesScopedList
-    :: DiskTypesScopedList
-diskTypesScopedList =
-    DiskTypesScopedList
-    { _dtslDiskTypes = Nothing
-    , _dtslWarning = Nothing
-    }
-
--- | [Output Only] List of disk types contained in this scope.
-dtslDiskTypes :: Lens' DiskTypesScopedList [DiskType]
-dtslDiskTypes
-  = lens _dtslDiskTypes
-      (\ s a -> s{_dtslDiskTypes = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Informational warning which replaces the list of disk
--- types when the list is empty.
-dtslWarning :: Lens' DiskTypesScopedList (Maybe DiskTypesScopedListWarning)
-dtslWarning
-  = lens _dtslWarning (\ s a -> s{_dtslWarning = a})
-
-instance FromJSON DiskTypesScopedList where
-        parseJSON
-          = withObject "DiskTypesScopedList"
-              (\ o ->
-                 DiskTypesScopedList <$>
-                   (o .:? "diskTypes" .!= mempty) <*> (o .:? "warning"))
-
-instance ToJSON DiskTypesScopedList where
-        toJSON DiskTypesScopedList{..}
-          = object
-              (catMaybes
-                 [("diskTypes" .=) <$> _dtslDiskTypes,
-                  ("warning" .=) <$> _dtslWarning])
-
---
--- /See:/ 'diskTypeAggregatedList' smart constructor.
-data DiskTypeAggregatedList = DiskTypeAggregatedList
-    { _dtalNextPageToken :: !(Maybe Text)
-    , _dtalKind          :: !Text
-    , _dtalItems         :: !(Maybe DiskTypeAggregatedListItems)
-    , _dtalSelfLink      :: !(Maybe Text)
-    , _dtalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskTypeAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtalNextPageToken'
---
--- * 'dtalKind'
---
--- * 'dtalItems'
---
--- * 'dtalSelfLink'
---
--- * 'dtalId'
-diskTypeAggregatedList
-    :: DiskTypeAggregatedList
-diskTypeAggregatedList =
-    DiskTypeAggregatedList
-    { _dtalNextPageToken = Nothing
-    , _dtalKind = "compute#diskTypeAggregatedList"
-    , _dtalItems = Nothing
-    , _dtalSelfLink = Nothing
-    , _dtalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-dtalNextPageToken :: Lens' DiskTypeAggregatedList (Maybe Text)
-dtalNextPageToken
-  = lens _dtalNextPageToken
-      (\ s a -> s{_dtalNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#diskTypeAggregatedList.
-dtalKind :: Lens' DiskTypeAggregatedList Text
-dtalKind = lens _dtalKind (\ s a -> s{_dtalKind = a})
-
--- | [Output Only] A map of scoped disk type lists.
-dtalItems :: Lens' DiskTypeAggregatedList (Maybe DiskTypeAggregatedListItems)
-dtalItems
-  = lens _dtalItems (\ s a -> s{_dtalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-dtalSelfLink :: Lens' DiskTypeAggregatedList (Maybe Text)
-dtalSelfLink
-  = lens _dtalSelfLink (\ s a -> s{_dtalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-dtalId :: Lens' DiskTypeAggregatedList (Maybe Text)
-dtalId = lens _dtalId (\ s a -> s{_dtalId = a})
-
-instance FromJSON DiskTypeAggregatedList where
-        parseJSON
-          = withObject "DiskTypeAggregatedList"
-              (\ o ->
-                 DiskTypeAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#diskTypeAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON DiskTypeAggregatedList where
-        toJSON DiskTypeAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _dtalNextPageToken,
-                  Just ("kind" .= _dtalKind),
-                  ("items" .=) <$> _dtalItems,
-                  ("selfLink" .=) <$> _dtalSelfLink,
-                  ("id" .=) <$> _dtalId])
-
--- | An HttpHealthCheck resource. This resource defines a template for how
--- individual instances should be checked for health, via HTTP.
---
--- /See:/ 'hTTPHealthCheck' smart constructor.
-data HTTPHealthCheck = HTTPHealthCheck
-    { _httphcHealthyThreshold   :: !(Maybe (Textual Int32))
-    , _httphcKind               :: !Text
-    , _httphcRequestPath        :: !(Maybe Text)
-    , _httphcSelfLink           :: !(Maybe Text)
-    , _httphcCheckIntervalSec   :: !(Maybe (Textual Int32))
-    , _httphcName               :: !(Maybe Text)
-    , _httphcCreationTimestamp  :: !(Maybe Text)
-    , _httphcId                 :: !(Maybe (Textual Word64))
-    , _httphcHost               :: !(Maybe Text)
-    , _httphcTimeoutSec         :: !(Maybe (Textual Int32))
-    , _httphcDescription        :: !(Maybe Text)
-    , _httphcUnhealthyThreshold :: !(Maybe (Textual Int32))
-    , _httphcPort               :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HTTPHealthCheck' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'httphcHealthyThreshold'
---
--- * 'httphcKind'
---
--- * 'httphcRequestPath'
---
--- * 'httphcSelfLink'
---
--- * 'httphcCheckIntervalSec'
---
--- * 'httphcName'
---
--- * 'httphcCreationTimestamp'
---
--- * 'httphcId'
---
--- * 'httphcHost'
---
--- * 'httphcTimeoutSec'
---
--- * 'httphcDescription'
---
--- * 'httphcUnhealthyThreshold'
---
--- * 'httphcPort'
-hTTPHealthCheck
-    :: HTTPHealthCheck
-hTTPHealthCheck =
-    HTTPHealthCheck
-    { _httphcHealthyThreshold = Nothing
-    , _httphcKind = "compute#httpHealthCheck"
-    , _httphcRequestPath = Nothing
-    , _httphcSelfLink = Nothing
-    , _httphcCheckIntervalSec = Nothing
-    , _httphcName = Nothing
-    , _httphcCreationTimestamp = Nothing
-    , _httphcId = Nothing
-    , _httphcHost = Nothing
-    , _httphcTimeoutSec = Nothing
-    , _httphcDescription = Nothing
-    , _httphcUnhealthyThreshold = Nothing
-    , _httphcPort = Nothing
-    }
-
--- | A so-far unhealthy instance will be marked healthy after this many
--- consecutive successes. The default value is 2.
-httphcHealthyThreshold :: Lens' HTTPHealthCheck (Maybe Int32)
-httphcHealthyThreshold
-  = lens _httphcHealthyThreshold
-      (\ s a -> s{_httphcHealthyThreshold = a})
-      . mapping _Coerce
-
--- | Type of the resource.
-httphcKind :: Lens' HTTPHealthCheck Text
-httphcKind
-  = lens _httphcKind (\ s a -> s{_httphcKind = a})
-
--- | The request path of the HTTP health check request. The default value is
--- \"\/\".
-httphcRequestPath :: Lens' HTTPHealthCheck (Maybe Text)
-httphcRequestPath
-  = lens _httphcRequestPath
-      (\ s a -> s{_httphcRequestPath = a})
-
--- | [Output Only] Server-defined URL for the resource.
-httphcSelfLink :: Lens' HTTPHealthCheck (Maybe Text)
-httphcSelfLink
-  = lens _httphcSelfLink
-      (\ s a -> s{_httphcSelfLink = a})
-
--- | How often (in seconds) to send a health check. The default value is 5
--- seconds.
-httphcCheckIntervalSec :: Lens' HTTPHealthCheck (Maybe Int32)
-httphcCheckIntervalSec
-  = lens _httphcCheckIntervalSec
-      (\ s a -> s{_httphcCheckIntervalSec = a})
-      . mapping _Coerce
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-httphcName :: Lens' HTTPHealthCheck (Maybe Text)
-httphcName
-  = lens _httphcName (\ s a -> s{_httphcName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-httphcCreationTimestamp :: Lens' HTTPHealthCheck (Maybe Text)
-httphcCreationTimestamp
-  = lens _httphcCreationTimestamp
-      (\ s a -> s{_httphcCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-httphcId :: Lens' HTTPHealthCheck (Maybe Word64)
-httphcId
-  = lens _httphcId (\ s a -> s{_httphcId = a}) .
-      mapping _Coerce
-
--- | The value of the host header in the HTTP health check request. If left
--- empty (default value), the public IP on behalf of which this health
--- check is performed will be used.
-httphcHost :: Lens' HTTPHealthCheck (Maybe Text)
-httphcHost
-  = lens _httphcHost (\ s a -> s{_httphcHost = a})
-
--- | How long (in seconds) to wait before claiming failure. The default value
--- is 5 seconds. It is invalid for timeoutSec to have greater value than
--- checkIntervalSec.
-httphcTimeoutSec :: Lens' HTTPHealthCheck (Maybe Int32)
-httphcTimeoutSec
-  = lens _httphcTimeoutSec
-      (\ s a -> s{_httphcTimeoutSec = a})
-      . mapping _Coerce
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-httphcDescription :: Lens' HTTPHealthCheck (Maybe Text)
-httphcDescription
-  = lens _httphcDescription
-      (\ s a -> s{_httphcDescription = a})
-
--- | A so-far healthy instance will be marked unhealthy after this many
--- consecutive failures. The default value is 2.
-httphcUnhealthyThreshold :: Lens' HTTPHealthCheck (Maybe Int32)
-httphcUnhealthyThreshold
-  = lens _httphcUnhealthyThreshold
-      (\ s a -> s{_httphcUnhealthyThreshold = a})
-      . mapping _Coerce
-
--- | The TCP port number for the HTTP health check request. The default value
--- is 80.
-httphcPort :: Lens' HTTPHealthCheck (Maybe Int32)
-httphcPort
-  = lens _httphcPort (\ s a -> s{_httphcPort = a}) .
-      mapping _Coerce
-
-instance FromJSON HTTPHealthCheck where
-        parseJSON
-          = withObject "HTTPHealthCheck"
-              (\ o ->
-                 HTTPHealthCheck <$>
-                   (o .:? "healthyThreshold") <*>
-                     (o .:? "kind" .!= "compute#httpHealthCheck")
-                     <*> (o .:? "requestPath")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "checkIntervalSec")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "host")
-                     <*> (o .:? "timeoutSec")
-                     <*> (o .:? "description")
-                     <*> (o .:? "unhealthyThreshold")
-                     <*> (o .:? "port"))
-
-instance ToJSON HTTPHealthCheck where
-        toJSON HTTPHealthCheck{..}
-          = object
-              (catMaybes
-                 [("healthyThreshold" .=) <$> _httphcHealthyThreshold,
-                  Just ("kind" .= _httphcKind),
-                  ("requestPath" .=) <$> _httphcRequestPath,
-                  ("selfLink" .=) <$> _httphcSelfLink,
-                  ("checkIntervalSec" .=) <$> _httphcCheckIntervalSec,
-                  ("name" .=) <$> _httphcName,
-                  ("creationTimestamp" .=) <$>
-                    _httphcCreationTimestamp,
-                  ("id" .=) <$> _httphcId, ("host" .=) <$> _httphcHost,
-                  ("timeoutSec" .=) <$> _httphcTimeoutSec,
-                  ("description" .=) <$> _httphcDescription,
-                  ("unhealthyThreshold" .=) <$>
-                    _httphcUnhealthyThreshold,
-                  ("port" .=) <$> _httphcPort])
-
---
--- /See:/ 'backendServiceGroupHealth' smart constructor.
-data BackendServiceGroupHealth = BackendServiceGroupHealth
-    { _bsghKind         :: !Text
-    , _bsghHealthStatus :: !(Maybe [HealthStatus])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BackendServiceGroupHealth' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bsghKind'
---
--- * 'bsghHealthStatus'
-backendServiceGroupHealth
-    :: BackendServiceGroupHealth
-backendServiceGroupHealth =
-    BackendServiceGroupHealth
-    { _bsghKind = "compute#backendServiceGroupHealth"
-    , _bsghHealthStatus = Nothing
-    }
-
--- | [Output Only] Type of resource. Always compute#backendServiceGroupHealth
--- for the health of backend services.
-bsghKind :: Lens' BackendServiceGroupHealth Text
-bsghKind = lens _bsghKind (\ s a -> s{_bsghKind = a})
-
-bsghHealthStatus :: Lens' BackendServiceGroupHealth [HealthStatus]
-bsghHealthStatus
-  = lens _bsghHealthStatus
-      (\ s a -> s{_bsghHealthStatus = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON BackendServiceGroupHealth where
-        parseJSON
-          = withObject "BackendServiceGroupHealth"
-              (\ o ->
-                 BackendServiceGroupHealth <$>
-                   (o .:? "kind" .!=
-                      "compute#backendServiceGroupHealth")
-                     <*> (o .:? "healthStatus" .!= mempty))
-
-instance ToJSON BackendServiceGroupHealth where
-        toJSON BackendServiceGroupHealth{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _bsghKind),
-                  ("healthStatus" .=) <$> _bsghHealthStatus])
-
---
--- /See:/ 'autoscalersScopedList' smart constructor.
-data AutoscalersScopedList = AutoscalersScopedList
-    { _aAutoscalers :: !(Maybe [Autoscaler])
-    , _aWarning     :: !(Maybe AutoscalersScopedListWarning)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalersScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aAutoscalers'
---
--- * 'aWarning'
-autoscalersScopedList
-    :: AutoscalersScopedList
-autoscalersScopedList =
-    AutoscalersScopedList
-    { _aAutoscalers = Nothing
-    , _aWarning = Nothing
-    }
-
--- | List of autoscalers contained in this scope.
-aAutoscalers :: Lens' AutoscalersScopedList [Autoscaler]
-aAutoscalers
-  = lens _aAutoscalers (\ s a -> s{_aAutoscalers = a})
-      . _Default
-      . _Coerce
-
--- | Informational warning which replaces the list of autoscalers when the
--- list is empty.
-aWarning :: Lens' AutoscalersScopedList (Maybe AutoscalersScopedListWarning)
-aWarning = lens _aWarning (\ s a -> s{_aWarning = a})
-
-instance FromJSON AutoscalersScopedList where
-        parseJSON
-          = withObject "AutoscalersScopedList"
-              (\ o ->
-                 AutoscalersScopedList <$>
-                   (o .:? "autoscalers" .!= mempty) <*>
-                     (o .:? "warning"))
-
-instance ToJSON AutoscalersScopedList where
-        toJSON AutoscalersScopedList{..}
-          = object
-              (catMaybes
-                 [("autoscalers" .=) <$> _aAutoscalers,
-                  ("warning" .=) <$> _aWarning])
-
---
--- /See:/ 'autoscalerAggregatedList' smart constructor.
-data AutoscalerAggregatedList = AutoscalerAggregatedList
-    { _aalNextPageToken :: !(Maybe Text)
-    , _aalKind          :: !Text
-    , _aalItems         :: !(Maybe AutoscalerAggregatedListItems)
-    , _aalSelfLink      :: !(Maybe Text)
-    , _aalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalerAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aalNextPageToken'
---
--- * 'aalKind'
---
--- * 'aalItems'
---
--- * 'aalSelfLink'
---
--- * 'aalId'
-autoscalerAggregatedList
-    :: AutoscalerAggregatedList
-autoscalerAggregatedList =
-    AutoscalerAggregatedList
-    { _aalNextPageToken = Nothing
-    , _aalKind = "compute#autoscalerAggregatedList"
-    , _aalItems = Nothing
-    , _aalSelfLink = Nothing
-    , _aalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-aalNextPageToken :: Lens' AutoscalerAggregatedList (Maybe Text)
-aalNextPageToken
-  = lens _aalNextPageToken
-      (\ s a -> s{_aalNextPageToken = a})
-
--- | Type of resource.
-aalKind :: Lens' AutoscalerAggregatedList Text
-aalKind = lens _aalKind (\ s a -> s{_aalKind = a})
-
--- | A map of scoped autoscaler lists.
-aalItems :: Lens' AutoscalerAggregatedList (Maybe AutoscalerAggregatedListItems)
-aalItems = lens _aalItems (\ s a -> s{_aalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-aalSelfLink :: Lens' AutoscalerAggregatedList (Maybe Text)
-aalSelfLink
-  = lens _aalSelfLink (\ s a -> s{_aalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-aalId :: Lens' AutoscalerAggregatedList (Maybe Text)
-aalId = lens _aalId (\ s a -> s{_aalId = a})
-
-instance FromJSON AutoscalerAggregatedList where
-        parseJSON
-          = withObject "AutoscalerAggregatedList"
-              (\ o ->
-                 AutoscalerAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#autoscalerAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON AutoscalerAggregatedList where
-        toJSON AutoscalerAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _aalNextPageToken,
-                  Just ("kind" .= _aalKind),
-                  ("items" .=) <$> _aalItems,
-                  ("selfLink" .=) <$> _aalSelfLink,
-                  ("id" .=) <$> _aalId])
-
--- | Cloud Autoscaler policy.
---
--- /See:/ 'autoscalingPolicy' smart constructor.
-data AutoscalingPolicy = AutoscalingPolicy
-    { _apCustomMetricUtilizations :: !(Maybe [AutoscalingPolicyCustomMetricUtilization])
-    , _apMaxNumReplicas           :: !(Maybe (Textual Int32))
-    , _apCPUUtilization           :: !(Maybe AutoscalingPolicyCPUUtilization)
-    , _apLoadBalancingUtilization :: !(Maybe AutoscalingPolicyLoadBalancingUtilization)
-    , _apMinNumReplicas           :: !(Maybe (Textual Int32))
-    , _apCoolDownPeriodSec        :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalingPolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'apCustomMetricUtilizations'
---
--- * 'apMaxNumReplicas'
---
--- * 'apCPUUtilization'
---
--- * 'apLoadBalancingUtilization'
---
--- * 'apMinNumReplicas'
---
--- * 'apCoolDownPeriodSec'
-autoscalingPolicy
-    :: AutoscalingPolicy
-autoscalingPolicy =
-    AutoscalingPolicy
-    { _apCustomMetricUtilizations = Nothing
-    , _apMaxNumReplicas = Nothing
-    , _apCPUUtilization = Nothing
-    , _apLoadBalancingUtilization = Nothing
-    , _apMinNumReplicas = Nothing
-    , _apCoolDownPeriodSec = Nothing
-    }
-
--- | Configuration parameters of autoscaling based on custom metric.
-apCustomMetricUtilizations :: Lens' AutoscalingPolicy [AutoscalingPolicyCustomMetricUtilization]
-apCustomMetricUtilizations
-  = lens _apCustomMetricUtilizations
-      (\ s a -> s{_apCustomMetricUtilizations = a})
-      . _Default
-      . _Coerce
-
--- | The maximum number of replicas that the Autoscaler can scale up to. This
--- field is required for config to be effective. Maximum number of replicas
--- should be not lower than minimal number of replicas. Absolute limit for
--- this value is defined in Autoscaler backend.
-apMaxNumReplicas :: Lens' AutoscalingPolicy (Maybe Int32)
-apMaxNumReplicas
-  = lens _apMaxNumReplicas
-      (\ s a -> s{_apMaxNumReplicas = a})
-      . mapping _Coerce
-
--- | TODO(jbartosik): Add support for scaling based on muliple utilization
--- metrics (take max recommendation). Exactly one utilization policy should
--- be provided. Configuration parameters of CPU based autoscaling policy.
-apCPUUtilization :: Lens' AutoscalingPolicy (Maybe AutoscalingPolicyCPUUtilization)
-apCPUUtilization
-  = lens _apCPUUtilization
-      (\ s a -> s{_apCPUUtilization = a})
-
--- | Configuration parameters of autoscaling based on load balancer.
-apLoadBalancingUtilization :: Lens' AutoscalingPolicy (Maybe AutoscalingPolicyLoadBalancingUtilization)
-apLoadBalancingUtilization
-  = lens _apLoadBalancingUtilization
-      (\ s a -> s{_apLoadBalancingUtilization = a})
-
--- | The minimum number of replicas that the Autoscaler can scale down to.
--- Can\'t be less than 0. If not provided Autoscaler will choose default
--- value depending on maximal number of replicas.
-apMinNumReplicas :: Lens' AutoscalingPolicy (Maybe Int32)
-apMinNumReplicas
-  = lens _apMinNumReplicas
-      (\ s a -> s{_apMinNumReplicas = a})
-      . mapping _Coerce
-
--- | The number of seconds that the Autoscaler should wait between two
--- succeeding changes to the number of virtual machines. You should define
--- an interval that is at least as long as the initialization time of a
--- virtual machine and the time it may take for replica pool to create the
--- virtual machine. The default is 60 seconds.
-apCoolDownPeriodSec :: Lens' AutoscalingPolicy (Maybe Int32)
-apCoolDownPeriodSec
-  = lens _apCoolDownPeriodSec
-      (\ s a -> s{_apCoolDownPeriodSec = a})
-      . mapping _Coerce
-
-instance FromJSON AutoscalingPolicy where
-        parseJSON
-          = withObject "AutoscalingPolicy"
-              (\ o ->
-                 AutoscalingPolicy <$>
-                   (o .:? "customMetricUtilizations" .!= mempty) <*>
-                     (o .:? "maxNumReplicas")
-                     <*> (o .:? "cpuUtilization")
-                     <*> (o .:? "loadBalancingUtilization")
-                     <*> (o .:? "minNumReplicas")
-                     <*> (o .:? "coolDownPeriodSec"))
-
-instance ToJSON AutoscalingPolicy where
-        toJSON AutoscalingPolicy{..}
-          = object
-              (catMaybes
-                 [("customMetricUtilizations" .=) <$>
-                    _apCustomMetricUtilizations,
-                  ("maxNumReplicas" .=) <$> _apMaxNumReplicas,
-                  ("cpuUtilization" .=) <$> _apCPUUtilization,
-                  ("loadBalancingUtilization" .=) <$>
-                    _apLoadBalancingUtilization,
-                  ("minNumReplicas" .=) <$> _apMinNumReplicas,
-                  ("coolDownPeriodSec" .=) <$> _apCoolDownPeriodSec])
-
--- | Contains a list of region resources.
---
--- /See:/ 'regionList' smart constructor.
-data RegionList = RegionList
-    { _regNextPageToken :: !(Maybe Text)
-    , _regKind          :: !Text
-    , _regItems         :: !(Maybe [Region])
-    , _regSelfLink      :: !(Maybe Text)
-    , _regId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RegionList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'regNextPageToken'
---
--- * 'regKind'
---
--- * 'regItems'
---
--- * 'regSelfLink'
---
--- * 'regId'
-regionList
-    :: RegionList
-regionList =
-    RegionList
-    { _regNextPageToken = Nothing
-    , _regKind = "compute#regionList"
-    , _regItems = Nothing
-    , _regSelfLink = Nothing
-    , _regId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-regNextPageToken :: Lens' RegionList (Maybe Text)
-regNextPageToken
-  = lens _regNextPageToken
-      (\ s a -> s{_regNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#regionList for lists of
--- regions.
-regKind :: Lens' RegionList Text
-regKind = lens _regKind (\ s a -> s{_regKind = a})
-
--- | [Output Only] A list of Region resources.
-regItems :: Lens' RegionList [Region]
-regItems
-  = lens _regItems (\ s a -> s{_regItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-regSelfLink :: Lens' RegionList (Maybe Text)
-regSelfLink
-  = lens _regSelfLink (\ s a -> s{_regSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-regId :: Lens' RegionList (Maybe Text)
-regId = lens _regId (\ s a -> s{_regId = a})
-
-instance FromJSON RegionList where
-        parseJSON
-          = withObject "RegionList"
-              (\ o ->
-                 RegionList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#regionList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON RegionList where
-        toJSON RegionList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _regNextPageToken,
-                  Just ("kind" .= _regKind),
-                  ("items" .=) <$> _regItems,
-                  ("selfLink" .=) <$> _regSelfLink,
-                  ("id" .=) <$> _regId])
-
--- | Contains a list of VpnTunnel resources.
---
--- /See:/ 'vpnTunnelList' smart constructor.
-data VPNTunnelList = VPNTunnelList
-    { _vtlNextPageToken :: !(Maybe Text)
-    , _vtlKind          :: !Text
-    , _vtlItems         :: !(Maybe [VPNTunnel])
-    , _vtlSelfLink      :: !(Maybe Text)
-    , _vtlId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnelList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtlNextPageToken'
---
--- * 'vtlKind'
---
--- * 'vtlItems'
---
--- * 'vtlSelfLink'
---
--- * 'vtlId'
-vpnTunnelList
-    :: VPNTunnelList
-vpnTunnelList =
-    VPNTunnelList
-    { _vtlNextPageToken = Nothing
-    , _vtlKind = "compute#vpnTunnelList"
-    , _vtlItems = Nothing
-    , _vtlSelfLink = Nothing
-    , _vtlId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-vtlNextPageToken :: Lens' VPNTunnelList (Maybe Text)
-vtlNextPageToken
-  = lens _vtlNextPageToken
-      (\ s a -> s{_vtlNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#vpnTunnel for VPN
--- tunnels.
-vtlKind :: Lens' VPNTunnelList Text
-vtlKind = lens _vtlKind (\ s a -> s{_vtlKind = a})
-
--- | [Output Only] A list of VpnTunnel resources.
-vtlItems :: Lens' VPNTunnelList [VPNTunnel]
-vtlItems
-  = lens _vtlItems (\ s a -> s{_vtlItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for the resource.
-vtlSelfLink :: Lens' VPNTunnelList (Maybe Text)
-vtlSelfLink
-  = lens _vtlSelfLink (\ s a -> s{_vtlSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-vtlId :: Lens' VPNTunnelList (Maybe Text)
-vtlId = lens _vtlId (\ s a -> s{_vtlId = a})
-
-instance FromJSON VPNTunnelList where
-        parseJSON
-          = withObject "VPNTunnelList"
-              (\ o ->
-                 VPNTunnelList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#vpnTunnelList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON VPNTunnelList where
-        toJSON VPNTunnelList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _vtlNextPageToken,
-                  Just ("kind" .= _vtlKind),
-                  ("items" .=) <$> _vtlItems,
-                  ("selfLink" .=) <$> _vtlSelfLink,
-                  ("id" .=) <$> _vtlId])
-
---
--- /See:/ 'machineTypeScratchDisksItem' smart constructor.
-newtype MachineTypeScratchDisksItem = MachineTypeScratchDisksItem
-    { _mtsdiDiskGb :: Maybe (Textual Int32)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypeScratchDisksItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtsdiDiskGb'
-machineTypeScratchDisksItem
-    :: MachineTypeScratchDisksItem
-machineTypeScratchDisksItem =
-    MachineTypeScratchDisksItem
-    { _mtsdiDiskGb = Nothing
-    }
-
--- | Size of the scratch disk, defined in GB.
-mtsdiDiskGb :: Lens' MachineTypeScratchDisksItem (Maybe Int32)
-mtsdiDiskGb
-  = lens _mtsdiDiskGb (\ s a -> s{_mtsdiDiskGb = a}) .
-      mapping _Coerce
-
-instance FromJSON MachineTypeScratchDisksItem where
-        parseJSON
-          = withObject "MachineTypeScratchDisksItem"
-              (\ o ->
-                 MachineTypeScratchDisksItem <$> (o .:? "diskGb"))
-
-instance ToJSON MachineTypeScratchDisksItem where
-        toJSON MachineTypeScratchDisksItem{..}
-          = object (catMaybes [("diskGb" .=) <$> _mtsdiDiskGb])
-
---
--- /See:/ 'machineTypesScopedList' smart constructor.
-data MachineTypesScopedList = MachineTypesScopedList
-    { _mtslMachineTypes :: !(Maybe [MachineType])
-    , _mtslWarning      :: !(Maybe MachineTypesScopedListWarning)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypesScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtslMachineTypes'
---
--- * 'mtslWarning'
-machineTypesScopedList
-    :: MachineTypesScopedList
-machineTypesScopedList =
-    MachineTypesScopedList
-    { _mtslMachineTypes = Nothing
-    , _mtslWarning = Nothing
-    }
-
--- | [Output Only] List of machine types contained in this scope.
-mtslMachineTypes :: Lens' MachineTypesScopedList [MachineType]
-mtslMachineTypes
-  = lens _mtslMachineTypes
-      (\ s a -> s{_mtslMachineTypes = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] An informational warning that appears when the machine
--- types list is empty.
-mtslWarning :: Lens' MachineTypesScopedList (Maybe MachineTypesScopedListWarning)
-mtslWarning
-  = lens _mtslWarning (\ s a -> s{_mtslWarning = a})
-
-instance FromJSON MachineTypesScopedList where
-        parseJSON
-          = withObject "MachineTypesScopedList"
-              (\ o ->
-                 MachineTypesScopedList <$>
-                   (o .:? "machineTypes" .!= mempty) <*>
-                     (o .:? "warning"))
-
-instance ToJSON MachineTypesScopedList where
-        toJSON MachineTypesScopedList{..}
-          = object
-              (catMaybes
-                 [("machineTypes" .=) <$> _mtslMachineTypes,
-                  ("warning" .=) <$> _mtslWarning])
-
---
--- /See:/ 'machineTypeAggregatedList' smart constructor.
-data MachineTypeAggregatedList = MachineTypeAggregatedList
-    { _mtalNextPageToken :: !(Maybe Text)
-    , _mtalKind          :: !Text
-    , _mtalItems         :: !(Maybe MachineTypeAggregatedListItems)
-    , _mtalSelfLink      :: !(Maybe Text)
-    , _mtalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypeAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtalNextPageToken'
---
--- * 'mtalKind'
---
--- * 'mtalItems'
---
--- * 'mtalSelfLink'
---
--- * 'mtalId'
-machineTypeAggregatedList
-    :: MachineTypeAggregatedList
-machineTypeAggregatedList =
-    MachineTypeAggregatedList
-    { _mtalNextPageToken = Nothing
-    , _mtalKind = "compute#machineTypeAggregatedList"
-    , _mtalItems = Nothing
-    , _mtalSelfLink = Nothing
-    , _mtalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-mtalNextPageToken :: Lens' MachineTypeAggregatedList (Maybe Text)
-mtalNextPageToken
-  = lens _mtalNextPageToken
-      (\ s a -> s{_mtalNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#machineTypeAggregatedList
--- for aggregated lists of machine types.
-mtalKind :: Lens' MachineTypeAggregatedList Text
-mtalKind = lens _mtalKind (\ s a -> s{_mtalKind = a})
-
--- | [Output Only] A map of scoped machine type lists.
-mtalItems :: Lens' MachineTypeAggregatedList (Maybe MachineTypeAggregatedListItems)
-mtalItems
-  = lens _mtalItems (\ s a -> s{_mtalItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-mtalSelfLink :: Lens' MachineTypeAggregatedList (Maybe Text)
-mtalSelfLink
-  = lens _mtalSelfLink (\ s a -> s{_mtalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-mtalId :: Lens' MachineTypeAggregatedList (Maybe Text)
-mtalId = lens _mtalId (\ s a -> s{_mtalId = a})
-
-instance FromJSON MachineTypeAggregatedList where
-        parseJSON
-          = withObject "MachineTypeAggregatedList"
-              (\ o ->
-                 MachineTypeAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#machineTypeAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON MachineTypeAggregatedList where
-        toJSON MachineTypeAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _mtalNextPageToken,
-                  Just ("kind" .= _mtalKind),
-                  ("items" .=) <$> _mtalItems,
-                  ("selfLink" .=) <$> _mtalSelfLink,
-                  ("id" .=) <$> _mtalId])
-
--- | A disk type resource.
---
--- /See:/ 'diskType' smart constructor.
-data DiskType = DiskType
-    { _dtKind              :: !Text
-    , _dtZone              :: !(Maybe Text)
-    , _dtSelfLink          :: !(Maybe Text)
-    , _dtName              :: !(Maybe Text)
-    , _dtCreationTimestamp :: !(Maybe Text)
-    , _dtId                :: !(Maybe (Textual Word64))
-    , _dtValidDiskSize     :: !(Maybe Text)
-    , _dtDescription       :: !(Maybe Text)
-    , _dtDefaultDiskSizeGb :: !(Maybe (Textual Int64))
-    , _dtDeprecated        :: !(Maybe DeprecationStatus)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskType' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtKind'
---
--- * 'dtZone'
---
--- * 'dtSelfLink'
---
--- * 'dtName'
---
--- * 'dtCreationTimestamp'
---
--- * 'dtId'
---
--- * 'dtValidDiskSize'
---
--- * 'dtDescription'
---
--- * 'dtDefaultDiskSizeGb'
---
--- * 'dtDeprecated'
-diskType
-    :: DiskType
-diskType =
-    DiskType
-    { _dtKind = "compute#diskType"
-    , _dtZone = Nothing
-    , _dtSelfLink = Nothing
-    , _dtName = Nothing
-    , _dtCreationTimestamp = Nothing
-    , _dtId = Nothing
-    , _dtValidDiskSize = Nothing
-    , _dtDescription = Nothing
-    , _dtDefaultDiskSizeGb = Nothing
-    , _dtDeprecated = Nothing
-    }
-
--- | [Output Only] Type of the resource. Always compute#diskType for disk
--- types.
-dtKind :: Lens' DiskType Text
-dtKind = lens _dtKind (\ s a -> s{_dtKind = a})
-
--- | [Output Only] URL of the zone where the disk type resides.
-dtZone :: Lens' DiskType (Maybe Text)
-dtZone = lens _dtZone (\ s a -> s{_dtZone = a})
-
--- | [Output Only] Server-defined URL for the resource.
-dtSelfLink :: Lens' DiskType (Maybe Text)
-dtSelfLink
-  = lens _dtSelfLink (\ s a -> s{_dtSelfLink = a})
-
--- | [Output Only] Name of the resource.
-dtName :: Lens' DiskType (Maybe Text)
-dtName = lens _dtName (\ s a -> s{_dtName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-dtCreationTimestamp :: Lens' DiskType (Maybe Text)
-dtCreationTimestamp
-  = lens _dtCreationTimestamp
-      (\ s a -> s{_dtCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-dtId :: Lens' DiskType (Maybe Word64)
-dtId
-  = lens _dtId (\ s a -> s{_dtId = a}) .
-      mapping _Coerce
-
--- | [Output Only] An optional textual description of the valid disk size,
--- such as \"10GB-10TB\".
-dtValidDiskSize :: Lens' DiskType (Maybe Text)
-dtValidDiskSize
-  = lens _dtValidDiskSize
-      (\ s a -> s{_dtValidDiskSize = a})
-
--- | [Output Only] An optional textual description of the resource.
-dtDescription :: Lens' DiskType (Maybe Text)
-dtDescription
-  = lens _dtDescription
-      (\ s a -> s{_dtDescription = a})
-
--- | [Output Only] Server-defined default disk size in GB.
-dtDefaultDiskSizeGb :: Lens' DiskType (Maybe Int64)
-dtDefaultDiskSizeGb
-  = lens _dtDefaultDiskSizeGb
-      (\ s a -> s{_dtDefaultDiskSizeGb = a})
-      . mapping _Coerce
-
--- | [Output Only] The deprecation status associated with this disk type.
-dtDeprecated :: Lens' DiskType (Maybe DeprecationStatus)
-dtDeprecated
-  = lens _dtDeprecated (\ s a -> s{_dtDeprecated = a})
-
-instance FromJSON DiskType where
-        parseJSON
-          = withObject "DiskType"
-              (\ o ->
-                 DiskType <$>
-                   (o .:? "kind" .!= "compute#diskType") <*>
-                     (o .:? "zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "validDiskSize")
-                     <*> (o .:? "description")
-                     <*> (o .:? "defaultDiskSizeGb")
-                     <*> (o .:? "deprecated"))
-
-instance ToJSON DiskType where
-        toJSON DiskType{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _dtKind), ("zone" .=) <$> _dtZone,
-                  ("selfLink" .=) <$> _dtSelfLink,
-                  ("name" .=) <$> _dtName,
-                  ("creationTimestamp" .=) <$> _dtCreationTimestamp,
-                  ("id" .=) <$> _dtId,
-                  ("validDiskSize" .=) <$> _dtValidDiskSize,
-                  ("description" .=) <$> _dtDescription,
-                  ("defaultDiskSizeGb" .=) <$> _dtDefaultDiskSizeGb,
-                  ("deprecated" .=) <$> _dtDeprecated])
-
--- | Message representing the validation result for a UrlMap.
---
--- /See:/ 'urlMapValidationResult' smart constructor.
-data URLMapValidationResult = URLMapValidationResult
-    { _umvrLoadErrors    :: !(Maybe [Text])
-    , _umvrLoadSucceeded :: !(Maybe Bool)
-    , _umvrTestPassed    :: !(Maybe Bool)
-    , _umvrTestFailures  :: !(Maybe [TestFailure])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMapValidationResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umvrLoadErrors'
---
--- * 'umvrLoadSucceeded'
---
--- * 'umvrTestPassed'
---
--- * 'umvrTestFailures'
-urlMapValidationResult
-    :: URLMapValidationResult
-urlMapValidationResult =
-    URLMapValidationResult
-    { _umvrLoadErrors = Nothing
-    , _umvrLoadSucceeded = Nothing
-    , _umvrTestPassed = Nothing
-    , _umvrTestFailures = Nothing
-    }
-
-umvrLoadErrors :: Lens' URLMapValidationResult [Text]
-umvrLoadErrors
-  = lens _umvrLoadErrors
-      (\ s a -> s{_umvrLoadErrors = a})
-      . _Default
-      . _Coerce
-
--- | Whether the given UrlMap can be successfully loaded. If false,
--- \'loadErrors\' indicates the reasons.
-umvrLoadSucceeded :: Lens' URLMapValidationResult (Maybe Bool)
-umvrLoadSucceeded
-  = lens _umvrLoadSucceeded
-      (\ s a -> s{_umvrLoadSucceeded = a})
-
--- | If successfully loaded, this field indicates whether the test passed. If
--- false, \'testFailures\'s indicate the reason of failure.
-umvrTestPassed :: Lens' URLMapValidationResult (Maybe Bool)
-umvrTestPassed
-  = lens _umvrTestPassed
-      (\ s a -> s{_umvrTestPassed = a})
-
-umvrTestFailures :: Lens' URLMapValidationResult [TestFailure]
-umvrTestFailures
-  = lens _umvrTestFailures
-      (\ s a -> s{_umvrTestFailures = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON URLMapValidationResult where
-        parseJSON
-          = withObject "URLMapValidationResult"
-              (\ o ->
-                 URLMapValidationResult <$>
-                   (o .:? "loadErrors" .!= mempty) <*>
-                     (o .:? "loadSucceeded")
-                     <*> (o .:? "testPassed")
-                     <*> (o .:? "testFailures" .!= mempty))
-
-instance ToJSON URLMapValidationResult where
-        toJSON URLMapValidationResult{..}
-          = object
-              (catMaybes
-                 [("loadErrors" .=) <$> _umvrLoadErrors,
-                  ("loadSucceeded" .=) <$> _umvrLoadSucceeded,
-                  ("testPassed" .=) <$> _umvrTestPassed,
-                  ("testFailures" .=) <$> _umvrTestFailures])
-
--- | A metadata key\/value entry.
---
--- /See:/ 'metadata' smart constructor.
-data Metadata = Metadata
-    { _mKind        :: !Text
-    , _mFingerprint :: !(Maybe (Textual Word8))
-    , _mItems       :: !(Maybe [MetadataItemsItem])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Metadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mKind'
---
--- * 'mFingerprint'
---
--- * 'mItems'
-metadata
-    :: Metadata
-metadata =
-    Metadata
-    { _mKind = "compute#metadata"
-    , _mFingerprint = Nothing
-    , _mItems = Nothing
-    }
-
--- | [Output Only] Type of the resource. Always compute#metadata for
--- metadata.
-mKind :: Lens' Metadata Text
-mKind = lens _mKind (\ s a -> s{_mKind = a})
-
--- | Specifies a fingerprint for this request, which is essentially a hash of
--- the metadata\'s contents and used for optimistic locking. The
--- fingerprint is initially generated by Compute Engine and changes after
--- every request to modify or update metadata. You must always provide an
--- up-to-date fingerprint hash in order to update or change metadata.
-mFingerprint :: Lens' Metadata (Maybe Word8)
-mFingerprint
-  = lens _mFingerprint (\ s a -> s{_mFingerprint = a})
-      . mapping _Coerce
-
--- | Array of key\/value pairs. The total size of all keys and values must be
--- less than 512 KB.
-mItems :: Lens' Metadata [MetadataItemsItem]
-mItems
-  = lens _mItems (\ s a -> s{_mItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Metadata where
-        parseJSON
-          = withObject "Metadata"
-              (\ o ->
-                 Metadata <$>
-                   (o .:? "kind" .!= "compute#metadata") <*>
-                     (o .:? "fingerprint")
-                     <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Metadata where
-        toJSON Metadata{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _mKind),
-                  ("fingerprint" .=) <$> _mFingerprint,
-                  ("items" .=) <$> _mItems])
-
---
--- /See:/ 'routeWarningsItem' smart constructor.
-data RouteWarningsItem = RouteWarningsItem
-    { _rwiData    :: !(Maybe [RouteWarningsItemDataItem])
-    , _rwiCode    :: !(Maybe RouteWarningsItemCode)
-    , _rwiMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteWarningsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rwiData'
---
--- * 'rwiCode'
---
--- * 'rwiMessage'
-routeWarningsItem
-    :: RouteWarningsItem
-routeWarningsItem =
-    RouteWarningsItem
-    { _rwiData = Nothing
-    , _rwiCode = Nothing
-    , _rwiMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-rwiData :: Lens' RouteWarningsItem [RouteWarningsItemDataItem]
-rwiData
-  = lens _rwiData (\ s a -> s{_rwiData = a}) . _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-rwiCode :: Lens' RouteWarningsItem (Maybe RouteWarningsItemCode)
-rwiCode = lens _rwiCode (\ s a -> s{_rwiCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-rwiMessage :: Lens' RouteWarningsItem (Maybe Text)
-rwiMessage
-  = lens _rwiMessage (\ s a -> s{_rwiMessage = a})
-
-instance FromJSON RouteWarningsItem where
-        parseJSON
-          = withObject "RouteWarningsItem"
-              (\ o ->
-                 RouteWarningsItem <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON RouteWarningsItem where
-        toJSON RouteWarningsItem{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _rwiData, ("code" .=) <$> _rwiCode,
-                  ("message" .=) <$> _rwiMessage])
-
---
--- /See:/ 'machineTypesScopedListWarningDataItem' smart constructor.
-data MachineTypesScopedListWarningDataItem = MachineTypesScopedListWarningDataItem
-    { _mtslwdiValue :: !(Maybe Text)
-    , _mtslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineTypesScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtslwdiValue'
---
--- * 'mtslwdiKey'
-machineTypesScopedListWarningDataItem
-    :: MachineTypesScopedListWarningDataItem
-machineTypesScopedListWarningDataItem =
-    MachineTypesScopedListWarningDataItem
-    { _mtslwdiValue = Nothing
-    , _mtslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-mtslwdiValue :: Lens' MachineTypesScopedListWarningDataItem (Maybe Text)
-mtslwdiValue
-  = lens _mtslwdiValue (\ s a -> s{_mtslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-mtslwdiKey :: Lens' MachineTypesScopedListWarningDataItem (Maybe Text)
-mtslwdiKey
-  = lens _mtslwdiKey (\ s a -> s{_mtslwdiKey = a})
-
-instance FromJSON
-         MachineTypesScopedListWarningDataItem where
-        parseJSON
-          = withObject "MachineTypesScopedListWarningDataItem"
-              (\ o ->
-                 MachineTypesScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON MachineTypesScopedListWarningDataItem
-         where
-        toJSON MachineTypesScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _mtslwdiValue,
-                  ("key" .=) <$> _mtslwdiKey])
-
---
--- /See:/ 'diskTypesScopedListWarningDataItem' smart constructor.
-data DiskTypesScopedListWarningDataItem = DiskTypesScopedListWarningDataItem
-    { _dtslwdiValue :: !(Maybe Text)
-    , _dtslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskTypesScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtslwdiValue'
---
--- * 'dtslwdiKey'
-diskTypesScopedListWarningDataItem
-    :: DiskTypesScopedListWarningDataItem
-diskTypesScopedListWarningDataItem =
-    DiskTypesScopedListWarningDataItem
-    { _dtslwdiValue = Nothing
-    , _dtslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-dtslwdiValue :: Lens' DiskTypesScopedListWarningDataItem (Maybe Text)
-dtslwdiValue
-  = lens _dtslwdiValue (\ s a -> s{_dtslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-dtslwdiKey :: Lens' DiskTypesScopedListWarningDataItem (Maybe Text)
-dtslwdiKey
-  = lens _dtslwdiKey (\ s a -> s{_dtslwdiKey = a})
-
-instance FromJSON DiskTypesScopedListWarningDataItem
-         where
-        parseJSON
-          = withObject "DiskTypesScopedListWarningDataItem"
-              (\ o ->
-                 DiskTypesScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON DiskTypesScopedListWarningDataItem
-         where
-        toJSON DiskTypesScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _dtslwdiValue,
-                  ("key" .=) <$> _dtslwdiKey])
-
--- | A TargetHttpProxy resource. This resource defines an HTTP proxy.
---
--- /See:/ 'targetHTTPProxy' smart constructor.
-data TargetHTTPProxy = TargetHTTPProxy
-    { _thttppURLMap            :: !(Maybe Text)
-    , _thttppKind              :: !Text
-    , _thttppSelfLink          :: !(Maybe Text)
-    , _thttppName              :: !(Maybe Text)
-    , _thttppCreationTimestamp :: !(Maybe Text)
-    , _thttppId                :: !(Maybe (Textual Word64))
-    , _thttppDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetHTTPProxy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'thttppURLMap'
---
--- * 'thttppKind'
---
--- * 'thttppSelfLink'
---
--- * 'thttppName'
---
--- * 'thttppCreationTimestamp'
---
--- * 'thttppId'
---
--- * 'thttppDescription'
-targetHTTPProxy
-    :: TargetHTTPProxy
-targetHTTPProxy =
-    TargetHTTPProxy
-    { _thttppURLMap = Nothing
-    , _thttppKind = "compute#targetHttpProxy"
-    , _thttppSelfLink = Nothing
-    , _thttppName = Nothing
-    , _thttppCreationTimestamp = Nothing
-    , _thttppId = Nothing
-    , _thttppDescription = Nothing
-    }
-
--- | URL to the UrlMap resource that defines the mapping from URL to the
--- BackendService.
-thttppURLMap :: Lens' TargetHTTPProxy (Maybe Text)
-thttppURLMap
-  = lens _thttppURLMap (\ s a -> s{_thttppURLMap = a})
-
--- | [Output Only] Type of resource. Always compute#operation for Operation
--- resources.
-thttppKind :: Lens' TargetHTTPProxy Text
-thttppKind
-  = lens _thttppKind (\ s a -> s{_thttppKind = a})
-
--- | [Output Only] Server-defined URL for the resource.
-thttppSelfLink :: Lens' TargetHTTPProxy (Maybe Text)
-thttppSelfLink
-  = lens _thttppSelfLink
-      (\ s a -> s{_thttppSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-thttppName :: Lens' TargetHTTPProxy (Maybe Text)
-thttppName
-  = lens _thttppName (\ s a -> s{_thttppName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-thttppCreationTimestamp :: Lens' TargetHTTPProxy (Maybe Text)
-thttppCreationTimestamp
-  = lens _thttppCreationTimestamp
-      (\ s a -> s{_thttppCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-thttppId :: Lens' TargetHTTPProxy (Maybe Word64)
-thttppId
-  = lens _thttppId (\ s a -> s{_thttppId = a}) .
-      mapping _Coerce
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-thttppDescription :: Lens' TargetHTTPProxy (Maybe Text)
-thttppDescription
-  = lens _thttppDescription
-      (\ s a -> s{_thttppDescription = a})
-
-instance FromJSON TargetHTTPProxy where
-        parseJSON
-          = withObject "TargetHTTPProxy"
-              (\ o ->
-                 TargetHTTPProxy <$>
-                   (o .:? "urlMap") <*>
-                     (o .:? "kind" .!= "compute#targetHttpProxy")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description"))
-
-instance ToJSON TargetHTTPProxy where
-        toJSON TargetHTTPProxy{..}
-          = object
-              (catMaybes
-                 [("urlMap" .=) <$> _thttppURLMap,
-                  Just ("kind" .= _thttppKind),
-                  ("selfLink" .=) <$> _thttppSelfLink,
-                  ("name" .=) <$> _thttppName,
-                  ("creationTimestamp" .=) <$>
-                    _thttppCreationTimestamp,
-                  ("id" .=) <$> _thttppId,
-                  ("description" .=) <$> _thttppDescription])
-
--- | A Machine Type resource.
---
--- /See:/ 'machineType' smart constructor.
-data MachineType = MachineType
-    { _mtKind                         :: !Text
-    , _mtImageSpaceGb                 :: !(Maybe (Textual Int32))
-    , _mtZone                         :: !(Maybe Text)
-    , _mtSelfLink                     :: !(Maybe Text)
-    , _mtName                         :: !(Maybe Text)
-    , _mtCreationTimestamp            :: !(Maybe Text)
-    , _mtScratchDisks                 :: !(Maybe [MachineTypeScratchDisksItem])
-    , _mtId                           :: !(Maybe (Textual Word64))
-    , _mtGuestCPUs                    :: !(Maybe (Textual Int32))
-    , _mtMaximumPersistentDisksSizeGb :: !(Maybe (Textual Int64))
-    , _mtMaximumPersistentDisks       :: !(Maybe (Textual Int32))
-    , _mtMemoryMb                     :: !(Maybe (Textual Int32))
-    , _mtDescription                  :: !(Maybe Text)
-    , _mtDeprecated                   :: !(Maybe DeprecationStatus)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MachineType' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtKind'
---
--- * 'mtImageSpaceGb'
---
--- * 'mtZone'
---
--- * 'mtSelfLink'
---
--- * 'mtName'
---
--- * 'mtCreationTimestamp'
---
--- * 'mtScratchDisks'
---
--- * 'mtId'
---
--- * 'mtGuestCPUs'
---
--- * 'mtMaximumPersistentDisksSizeGb'
---
--- * 'mtMaximumPersistentDisks'
---
--- * 'mtMemoryMb'
---
--- * 'mtDescription'
---
--- * 'mtDeprecated'
-machineType
-    :: MachineType
-machineType =
-    MachineType
-    { _mtKind = "compute#machineType"
-    , _mtImageSpaceGb = Nothing
-    , _mtZone = Nothing
-    , _mtSelfLink = Nothing
-    , _mtName = Nothing
-    , _mtCreationTimestamp = Nothing
-    , _mtScratchDisks = Nothing
-    , _mtId = Nothing
-    , _mtGuestCPUs = Nothing
-    , _mtMaximumPersistentDisksSizeGb = Nothing
-    , _mtMaximumPersistentDisks = Nothing
-    , _mtMemoryMb = Nothing
-    , _mtDescription = Nothing
-    , _mtDeprecated = Nothing
-    }
-
--- | Type of the resource.
-mtKind :: Lens' MachineType Text
-mtKind = lens _mtKind (\ s a -> s{_mtKind = a})
-
--- | [Deprecated] This property is deprecated and will never be populated
--- with any relevant values.
-mtImageSpaceGb :: Lens' MachineType (Maybe Int32)
-mtImageSpaceGb
-  = lens _mtImageSpaceGb
-      (\ s a -> s{_mtImageSpaceGb = a})
-      . mapping _Coerce
-
--- | [Output Only] The name of the zone where the machine type resides, such
--- as us-central1-a.
-mtZone :: Lens' MachineType (Maybe Text)
-mtZone = lens _mtZone (\ s a -> s{_mtZone = a})
-
--- | [Output Only] Server-defined URL for the resource.
-mtSelfLink :: Lens' MachineType (Maybe Text)
-mtSelfLink
-  = lens _mtSelfLink (\ s a -> s{_mtSelfLink = a})
-
--- | [Output Only] Name of the resource.
-mtName :: Lens' MachineType (Maybe Text)
-mtName = lens _mtName (\ s a -> s{_mtName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-mtCreationTimestamp :: Lens' MachineType (Maybe Text)
-mtCreationTimestamp
-  = lens _mtCreationTimestamp
-      (\ s a -> s{_mtCreationTimestamp = a})
-
--- | [Output Only] List of extended scratch disks assigned to the instance.
-mtScratchDisks :: Lens' MachineType [MachineTypeScratchDisksItem]
-mtScratchDisks
-  = lens _mtScratchDisks
-      (\ s a -> s{_mtScratchDisks = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-mtId :: Lens' MachineType (Maybe Word64)
-mtId
-  = lens _mtId (\ s a -> s{_mtId = a}) .
-      mapping _Coerce
-
--- | [Output Only] The tumber of CPUs exposed to the instance.
-mtGuestCPUs :: Lens' MachineType (Maybe Int32)
-mtGuestCPUs
-  = lens _mtGuestCPUs (\ s a -> s{_mtGuestCPUs = a}) .
-      mapping _Coerce
-
--- | [Output Only] Maximum total persistent disks size (GB) allowed.
-mtMaximumPersistentDisksSizeGb :: Lens' MachineType (Maybe Int64)
-mtMaximumPersistentDisksSizeGb
-  = lens _mtMaximumPersistentDisksSizeGb
-      (\ s a -> s{_mtMaximumPersistentDisksSizeGb = a})
-      . mapping _Coerce
-
--- | [Output Only] Maximum persistent disks allowed.
-mtMaximumPersistentDisks :: Lens' MachineType (Maybe Int32)
-mtMaximumPersistentDisks
-  = lens _mtMaximumPersistentDisks
-      (\ s a -> s{_mtMaximumPersistentDisks = a})
-      . mapping _Coerce
-
--- | [Output Only] The amount of physical memory available to the instance,
--- defined in MB.
-mtMemoryMb :: Lens' MachineType (Maybe Int32)
-mtMemoryMb
-  = lens _mtMemoryMb (\ s a -> s{_mtMemoryMb = a}) .
-      mapping _Coerce
-
--- | [Output Only] An optional textual description of the resource.
-mtDescription :: Lens' MachineType (Maybe Text)
-mtDescription
-  = lens _mtDescription
-      (\ s a -> s{_mtDescription = a})
-
--- | [Output Only] The deprecation status associated with this machine type.
-mtDeprecated :: Lens' MachineType (Maybe DeprecationStatus)
-mtDeprecated
-  = lens _mtDeprecated (\ s a -> s{_mtDeprecated = a})
-
-instance FromJSON MachineType where
-        parseJSON
-          = withObject "MachineType"
-              (\ o ->
-                 MachineType <$>
-                   (o .:? "kind" .!= "compute#machineType") <*>
-                     (o .:? "imageSpaceGb")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "scratchDisks" .!= mempty)
-                     <*> (o .:? "id")
-                     <*> (o .:? "guestCpus")
-                     <*> (o .:? "maximumPersistentDisksSizeGb")
-                     <*> (o .:? "maximumPersistentDisks")
-                     <*> (o .:? "memoryMb")
-                     <*> (o .:? "description")
-                     <*> (o .:? "deprecated"))
-
-instance ToJSON MachineType where
-        toJSON MachineType{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _mtKind),
-                  ("imageSpaceGb" .=) <$> _mtImageSpaceGb,
-                  ("zone" .=) <$> _mtZone,
-                  ("selfLink" .=) <$> _mtSelfLink,
-                  ("name" .=) <$> _mtName,
-                  ("creationTimestamp" .=) <$> _mtCreationTimestamp,
-                  ("scratchDisks" .=) <$> _mtScratchDisks,
-                  ("id" .=) <$> _mtId,
-                  ("guestCpus" .=) <$> _mtGuestCPUs,
-                  ("maximumPersistentDisksSizeGb" .=) <$>
-                    _mtMaximumPersistentDisksSizeGb,
-                  ("maximumPersistentDisks" .=) <$>
-                    _mtMaximumPersistentDisks,
-                  ("memoryMb" .=) <$> _mtMemoryMb,
-                  ("description" .=) <$> _mtDescription,
-                  ("deprecated" .=) <$> _mtDeprecated])
-
--- | [Output Only] If errors are generated during processing of the
--- operation, this field will be populated.
---
--- /See:/ 'operationError' smart constructor.
-newtype OperationError = OperationError
-    { _oeErrors :: Maybe [OperationErrorErrorsItem]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oeErrors'
-operationError
-    :: OperationError
-operationError =
-    OperationError
-    { _oeErrors = Nothing
-    }
-
--- | [Output Only] The array of errors encountered while processing this
--- operation.
-oeErrors :: Lens' OperationError [OperationErrorErrorsItem]
-oeErrors
-  = lens _oeErrors (\ s a -> s{_oeErrors = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON OperationError where
-        parseJSON
-          = withObject "OperationError"
-              (\ o ->
-                 OperationError <$> (o .:? "errors" .!= mempty))
-
-instance ToJSON OperationError where
-        toJSON OperationError{..}
-          = object (catMaybes [("errors" .=) <$> _oeErrors])
-
--- | Informational warning which replaces the list of addresses when the list
--- is empty.
---
--- /See:/ 'targetInstancesScopedListWarning' smart constructor.
-data TargetInstancesScopedListWarning = TargetInstancesScopedListWarning
-    { _tislwData    :: !(Maybe [TargetInstancesScopedListWarningDataItem])
-    , _tislwCode    :: !(Maybe TargetInstancesScopedListWarningCode)
-    , _tislwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetInstancesScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tislwData'
---
--- * 'tislwCode'
---
--- * 'tislwMessage'
-targetInstancesScopedListWarning
-    :: TargetInstancesScopedListWarning
-targetInstancesScopedListWarning =
-    TargetInstancesScopedListWarning
-    { _tislwData = Nothing
-    , _tislwCode = Nothing
-    , _tislwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-tislwData :: Lens' TargetInstancesScopedListWarning [TargetInstancesScopedListWarningDataItem]
-tislwData
-  = lens _tislwData (\ s a -> s{_tislwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-tislwCode :: Lens' TargetInstancesScopedListWarning (Maybe TargetInstancesScopedListWarningCode)
-tislwCode
-  = lens _tislwCode (\ s a -> s{_tislwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-tislwMessage :: Lens' TargetInstancesScopedListWarning (Maybe Text)
-tislwMessage
-  = lens _tislwMessage (\ s a -> s{_tislwMessage = a})
-
-instance FromJSON TargetInstancesScopedListWarning
-         where
-        parseJSON
-          = withObject "TargetInstancesScopedListWarning"
-              (\ o ->
-                 TargetInstancesScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON TargetInstancesScopedListWarning
-         where
-        toJSON TargetInstancesScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _tislwData,
-                  ("code" .=) <$> _tislwCode,
-                  ("message" .=) <$> _tislwMessage])
-
---
--- /See:/ 'autoscalersScopedListWarningDataItem' smart constructor.
-data AutoscalersScopedListWarningDataItem = AutoscalersScopedListWarningDataItem
-    { _aValue :: !(Maybe Text)
-    , _aKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalersScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aValue'
---
--- * 'aKey'
-autoscalersScopedListWarningDataItem
-    :: AutoscalersScopedListWarningDataItem
-autoscalersScopedListWarningDataItem =
-    AutoscalersScopedListWarningDataItem
-    { _aValue = Nothing
-    , _aKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-aValue :: Lens' AutoscalersScopedListWarningDataItem (Maybe Text)
-aValue = lens _aValue (\ s a -> s{_aValue = a})
-
--- | [Output Only] A key for the warning data.
-aKey :: Lens' AutoscalersScopedListWarningDataItem (Maybe Text)
-aKey = lens _aKey (\ s a -> s{_aKey = a})
-
-instance FromJSON
-         AutoscalersScopedListWarningDataItem where
-        parseJSON
-          = withObject "AutoscalersScopedListWarningDataItem"
-              (\ o ->
-                 AutoscalersScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON AutoscalersScopedListWarningDataItem
-         where
-        toJSON AutoscalersScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _aValue, ("key" .=) <$> _aKey])
-
---
--- /See:/ 'instanceGroupsListInstances' smart constructor.
-data InstanceGroupsListInstances = InstanceGroupsListInstances
-    { _igliNextPageToken :: !(Maybe Text)
-    , _igliKind          :: !Text
-    , _igliItems         :: !(Maybe [InstanceWithNamedPorts])
-    , _igliSelfLink      :: !(Maybe Text)
-    , _igliId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsListInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igliNextPageToken'
---
--- * 'igliKind'
---
--- * 'igliItems'
---
--- * 'igliSelfLink'
---
--- * 'igliId'
-instanceGroupsListInstances
-    :: InstanceGroupsListInstances
-instanceGroupsListInstances =
-    InstanceGroupsListInstances
-    { _igliNextPageToken = Nothing
-    , _igliKind = "compute#instanceGroupsListInstances"
-    , _igliItems = Nothing
-    , _igliSelfLink = Nothing
-    , _igliId = Nothing
-    }
-
--- | [Output Only] A token that is used to continue a truncated list request.
-igliNextPageToken :: Lens' InstanceGroupsListInstances (Maybe Text)
-igliNextPageToken
-  = lens _igliNextPageToken
-      (\ s a -> s{_igliNextPageToken = a})
-
--- | [Output Only] The resource type, which is always
--- compute#instanceGroupsListInstances for lists of instance groups.
-igliKind :: Lens' InstanceGroupsListInstances Text
-igliKind = lens _igliKind (\ s a -> s{_igliKind = a})
-
--- | [Output Only] A list of instances and any named ports that are assigned
--- to those instances.
-igliItems :: Lens' InstanceGroupsListInstances [InstanceWithNamedPorts]
-igliItems
-  = lens _igliItems (\ s a -> s{_igliItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The URL for this list of instance groups. The server
--- generates this URL.
-igliSelfLink :: Lens' InstanceGroupsListInstances (Maybe Text)
-igliSelfLink
-  = lens _igliSelfLink (\ s a -> s{_igliSelfLink = a})
-
--- | [Output Only] A unique identifier for this list of instance groups. The
--- server generates this identifier.
-igliId :: Lens' InstanceGroupsListInstances (Maybe Text)
-igliId = lens _igliId (\ s a -> s{_igliId = a})
-
-instance FromJSON InstanceGroupsListInstances where
-        parseJSON
-          = withObject "InstanceGroupsListInstances"
-              (\ o ->
-                 InstanceGroupsListInstances <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#instanceGroupsListInstances")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceGroupsListInstances where
-        toJSON InstanceGroupsListInstances{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _igliNextPageToken,
-                  Just ("kind" .= _igliKind),
-                  ("items" .=) <$> _igliItems,
-                  ("selfLink" .=) <$> _igliSelfLink,
-                  ("id" .=) <$> _igliId])
-
---
--- /See:/ 'autoscaler' smart constructor.
-data Autoscaler = Autoscaler
-    { _aaKind              :: !Text
-    , _aaZone              :: !(Maybe Text)
-    , _aaSelfLink          :: !(Maybe Text)
-    , _aaName              :: !(Maybe Text)
-    , _aaCreationTimestamp :: !(Maybe Text)
-    , _aaAutoscalingPolicy :: !(Maybe AutoscalingPolicy)
-    , _aaId                :: !(Maybe (Textual Word64))
-    , _aaDescription       :: !(Maybe Text)
-    , _aaTarget            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Autoscaler' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaKind'
---
--- * 'aaZone'
---
--- * 'aaSelfLink'
---
--- * 'aaName'
---
--- * 'aaCreationTimestamp'
---
--- * 'aaAutoscalingPolicy'
---
--- * 'aaId'
---
--- * 'aaDescription'
---
--- * 'aaTarget'
-autoscaler
-    :: Autoscaler
-autoscaler =
-    Autoscaler
-    { _aaKind = "compute#autoscaler"
-    , _aaZone = Nothing
-    , _aaSelfLink = Nothing
-    , _aaName = Nothing
-    , _aaCreationTimestamp = Nothing
-    , _aaAutoscalingPolicy = Nothing
-    , _aaId = Nothing
-    , _aaDescription = Nothing
-    , _aaTarget = Nothing
-    }
-
--- | Type of the resource.
-aaKind :: Lens' Autoscaler Text
-aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
-
--- | [Output Only] URL of the zone where the instance group resides.
-aaZone :: Lens' Autoscaler (Maybe Text)
-aaZone = lens _aaZone (\ s a -> s{_aaZone = a})
-
--- | [Output Only] Server-defined URL for the resource.
-aaSelfLink :: Lens' Autoscaler (Maybe Text)
-aaSelfLink
-  = lens _aaSelfLink (\ s a -> s{_aaSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-aaName :: Lens' Autoscaler (Maybe Text)
-aaName = lens _aaName (\ s a -> s{_aaName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-aaCreationTimestamp :: Lens' Autoscaler (Maybe Text)
-aaCreationTimestamp
-  = lens _aaCreationTimestamp
-      (\ s a -> s{_aaCreationTimestamp = a})
-
--- | Autoscaling configuration.
-aaAutoscalingPolicy :: Lens' Autoscaler (Maybe AutoscalingPolicy)
-aaAutoscalingPolicy
-  = lens _aaAutoscalingPolicy
-      (\ s a -> s{_aaAutoscalingPolicy = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-aaId :: Lens' Autoscaler (Maybe Word64)
-aaId
-  = lens _aaId (\ s a -> s{_aaId = a}) .
-      mapping _Coerce
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-aaDescription :: Lens' Autoscaler (Maybe Text)
-aaDescription
-  = lens _aaDescription
-      (\ s a -> s{_aaDescription = a})
-
--- | URL of Instance Group Manager or Replica Pool which will be controlled
--- by Autoscaler.
-aaTarget :: Lens' Autoscaler (Maybe Text)
-aaTarget = lens _aaTarget (\ s a -> s{_aaTarget = a})
-
-instance FromJSON Autoscaler where
-        parseJSON
-          = withObject "Autoscaler"
-              (\ o ->
-                 Autoscaler <$>
-                   (o .:? "kind" .!= "compute#autoscaler") <*>
-                     (o .:? "zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "autoscalingPolicy")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description")
-                     <*> (o .:? "target"))
-
-instance ToJSON Autoscaler where
-        toJSON Autoscaler{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _aaKind), ("zone" .=) <$> _aaZone,
-                  ("selfLink" .=) <$> _aaSelfLink,
-                  ("name" .=) <$> _aaName,
-                  ("creationTimestamp" .=) <$> _aaCreationTimestamp,
-                  ("autoscalingPolicy" .=) <$> _aaAutoscalingPolicy,
-                  ("id" .=) <$> _aaId,
-                  ("description" .=) <$> _aaDescription,
-                  ("target" .=) <$> _aaTarget])
-
--- | [Output Only] Informational warning which replaces the list of disks
--- when the list is empty.
---
--- /See:/ 'disksScopedListWarning' smart constructor.
-data DisksScopedListWarning = DisksScopedListWarning
-    { _dslwData    :: !(Maybe [DisksScopedListWarningDataItem])
-    , _dslwCode    :: !(Maybe DisksScopedListWarningCode)
-    , _dslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisksScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dslwData'
---
--- * 'dslwCode'
---
--- * 'dslwMessage'
-disksScopedListWarning
-    :: DisksScopedListWarning
-disksScopedListWarning =
-    DisksScopedListWarning
-    { _dslwData = Nothing
-    , _dslwCode = Nothing
-    , _dslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-dslwData :: Lens' DisksScopedListWarning [DisksScopedListWarningDataItem]
-dslwData
-  = lens _dslwData (\ s a -> s{_dslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-dslwCode :: Lens' DisksScopedListWarning (Maybe DisksScopedListWarningCode)
-dslwCode = lens _dslwCode (\ s a -> s{_dslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-dslwMessage :: Lens' DisksScopedListWarning (Maybe Text)
-dslwMessage
-  = lens _dslwMessage (\ s a -> s{_dslwMessage = a})
-
-instance FromJSON DisksScopedListWarning where
-        parseJSON
-          = withObject "DisksScopedListWarning"
-              (\ o ->
-                 DisksScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON DisksScopedListWarning where
-        toJSON DisksScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _dslwData,
-                  ("code" .=) <$> _dslwCode,
-                  ("message" .=) <$> _dslwMessage])
-
--- | A map of scoped target vpn gateway lists.
---
--- /See:/ 'targetVPNGatewayAggregatedListItems' smart constructor.
-newtype TargetVPNGatewayAggregatedListItems = TargetVPNGatewayAggregatedListItems
-    { _tvgaliAddtional :: HashMap Text TargetVPNGatewaysScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGatewayAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvgaliAddtional'
-targetVPNGatewayAggregatedListItems
-    :: HashMap Text TargetVPNGatewaysScopedList -- ^ 'tvgaliAddtional'
-    -> TargetVPNGatewayAggregatedListItems
-targetVPNGatewayAggregatedListItems pTvgaliAddtional_ =
-    TargetVPNGatewayAggregatedListItems
-    { _tvgaliAddtional = _Coerce # pTvgaliAddtional_
-    }
-
--- | [Output Only] Name of the scope containing this set of target vpn
--- gateways.
-tvgaliAddtional :: Lens' TargetVPNGatewayAggregatedListItems (HashMap Text TargetVPNGatewaysScopedList)
-tvgaliAddtional
-  = lens _tvgaliAddtional
-      (\ s a -> s{_tvgaliAddtional = a})
-      . _Coerce
-
-instance FromJSON TargetVPNGatewayAggregatedListItems
-         where
-        parseJSON
-          = withObject "TargetVPNGatewayAggregatedListItems"
-              (\ o ->
-                 TargetVPNGatewayAggregatedListItems <$>
-                   (parseJSONObject o))
-
-instance ToJSON TargetVPNGatewayAggregatedListItems
-         where
-        toJSON = toJSON . _tvgaliAddtional
-
--- | Informational warning which replaces the list of addresses when the list
--- is empty.
---
--- /See:/ 'targetPoolsScopedListWarning' smart constructor.
-data TargetPoolsScopedListWarning = TargetPoolsScopedListWarning
-    { _tpslwData    :: !(Maybe [TargetPoolsScopedListWarningDataItem])
-    , _tpslwCode    :: !(Maybe TargetPoolsScopedListWarningCode)
-    , _tpslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetPoolsScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tpslwData'
---
--- * 'tpslwCode'
---
--- * 'tpslwMessage'
-targetPoolsScopedListWarning
-    :: TargetPoolsScopedListWarning
-targetPoolsScopedListWarning =
-    TargetPoolsScopedListWarning
-    { _tpslwData = Nothing
-    , _tpslwCode = Nothing
-    , _tpslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-tpslwData :: Lens' TargetPoolsScopedListWarning [TargetPoolsScopedListWarningDataItem]
-tpslwData
-  = lens _tpslwData (\ s a -> s{_tpslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-tpslwCode :: Lens' TargetPoolsScopedListWarning (Maybe TargetPoolsScopedListWarningCode)
-tpslwCode
-  = lens _tpslwCode (\ s a -> s{_tpslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-tpslwMessage :: Lens' TargetPoolsScopedListWarning (Maybe Text)
-tpslwMessage
-  = lens _tpslwMessage (\ s a -> s{_tpslwMessage = a})
-
-instance FromJSON TargetPoolsScopedListWarning where
-        parseJSON
-          = withObject "TargetPoolsScopedListWarning"
-              (\ o ->
-                 TargetPoolsScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON TargetPoolsScopedListWarning where
-        toJSON TargetPoolsScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _tpslwData,
-                  ("code" .=) <$> _tpslwCode,
-                  ("message" .=) <$> _tpslwMessage])
-
---
--- /See:/ 'healthStatus' smart constructor.
-data HealthStatus = HealthStatus
-    { _hsIPAddress   :: !(Maybe Text)
-    , _hsHealthState :: !(Maybe HealthStatusHealthState)
-    , _hsPort        :: !(Maybe (Textual Int32))
-    , _hsInstance    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HealthStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hsIPAddress'
---
--- * 'hsHealthState'
---
--- * 'hsPort'
---
--- * 'hsInstance'
-healthStatus
-    :: HealthStatus
-healthStatus =
-    HealthStatus
-    { _hsIPAddress = Nothing
-    , _hsHealthState = Nothing
-    , _hsPort = Nothing
-    , _hsInstance = Nothing
-    }
-
--- | The IP address represented by this resource.
-hsIPAddress :: Lens' HealthStatus (Maybe Text)
-hsIPAddress
-  = lens _hsIPAddress (\ s a -> s{_hsIPAddress = a})
-
--- | Health state of the instance.
-hsHealthState :: Lens' HealthStatus (Maybe HealthStatusHealthState)
-hsHealthState
-  = lens _hsHealthState
-      (\ s a -> s{_hsHealthState = a})
-
--- | The port on the instance.
-hsPort :: Lens' HealthStatus (Maybe Int32)
-hsPort
-  = lens _hsPort (\ s a -> s{_hsPort = a}) .
-      mapping _Coerce
-
--- | URL of the instance resource.
-hsInstance :: Lens' HealthStatus (Maybe Text)
-hsInstance
-  = lens _hsInstance (\ s a -> s{_hsInstance = a})
-
-instance FromJSON HealthStatus where
-        parseJSON
-          = withObject "HealthStatus"
-              (\ o ->
-                 HealthStatus <$>
-                   (o .:? "ipAddress") <*> (o .:? "healthState") <*>
-                     (o .:? "port")
-                     <*> (o .:? "instance"))
-
-instance ToJSON HealthStatus where
-        toJSON HealthStatus{..}
-          = object
-              (catMaybes
-                 [("ipAddress" .=) <$> _hsIPAddress,
-                  ("healthState" .=) <$> _hsHealthState,
-                  ("port" .=) <$> _hsPort,
-                  ("instance" .=) <$> _hsInstance])
-
--- | Region resource.
---
--- /See:/ 'region' smart constructor.
-data Region = Region
-    { _rrStatus            :: !(Maybe RegionStatus)
-    , _rrZones             :: !(Maybe [Text])
-    , _rrKind              :: !Text
-    , _rrSelfLink          :: !(Maybe Text)
-    , _rrName              :: !(Maybe Text)
-    , _rrCreationTimestamp :: !(Maybe Text)
-    , _rrQuotas            :: !(Maybe [Quota])
-    , _rrId                :: !(Maybe (Textual Word64))
-    , _rrDescription       :: !(Maybe Text)
-    , _rrDeprecated        :: !(Maybe DeprecationStatus)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Region' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrStatus'
---
--- * 'rrZones'
---
--- * 'rrKind'
---
--- * 'rrSelfLink'
---
--- * 'rrName'
---
--- * 'rrCreationTimestamp'
---
--- * 'rrQuotas'
---
--- * 'rrId'
---
--- * 'rrDescription'
---
--- * 'rrDeprecated'
-region
-    :: Region
-region =
-    Region
-    { _rrStatus = Nothing
-    , _rrZones = Nothing
-    , _rrKind = "compute#region"
-    , _rrSelfLink = Nothing
-    , _rrName = Nothing
-    , _rrCreationTimestamp = Nothing
-    , _rrQuotas = Nothing
-    , _rrId = Nothing
-    , _rrDescription = Nothing
-    , _rrDeprecated = Nothing
-    }
-
--- | [Output Only] Status of the region, either UP or DOWN.
-rrStatus :: Lens' Region (Maybe RegionStatus)
-rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a})
-
--- | [Output Only] A list of zones available in this region, in the form of
--- resource URLs.
-rrZones :: Lens' Region [Text]
-rrZones
-  = lens _rrZones (\ s a -> s{_rrZones = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Type of the resource. Always compute#region for regions.
-rrKind :: Lens' Region Text
-rrKind = lens _rrKind (\ s a -> s{_rrKind = a})
-
--- | [Output Only] Server-defined URL for the resource.
-rrSelfLink :: Lens' Region (Maybe Text)
-rrSelfLink
-  = lens _rrSelfLink (\ s a -> s{_rrSelfLink = a})
-
--- | [Output Only] Name of the resource.
-rrName :: Lens' Region (Maybe Text)
-rrName = lens _rrName (\ s a -> s{_rrName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-rrCreationTimestamp :: Lens' Region (Maybe Text)
-rrCreationTimestamp
-  = lens _rrCreationTimestamp
-      (\ s a -> s{_rrCreationTimestamp = a})
-
--- | [Output Only] Quotas assigned to this region.
-rrQuotas :: Lens' Region [Quota]
-rrQuotas
-  = lens _rrQuotas (\ s a -> s{_rrQuotas = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Unique identifier for the resource; defined by the server
--- .
-rrId :: Lens' Region (Maybe Word64)
-rrId
-  = lens _rrId (\ s a -> s{_rrId = a}) .
-      mapping _Coerce
-
--- | [Output Only] Textual description of the resource.
-rrDescription :: Lens' Region (Maybe Text)
-rrDescription
-  = lens _rrDescription
-      (\ s a -> s{_rrDescription = a})
-
--- | [Output Only] The deprecation status associated with this region.
-rrDeprecated :: Lens' Region (Maybe DeprecationStatus)
-rrDeprecated
-  = lens _rrDeprecated (\ s a -> s{_rrDeprecated = a})
-
-instance FromJSON Region where
-        parseJSON
-          = withObject "Region"
-              (\ o ->
-                 Region <$>
-                   (o .:? "status") <*> (o .:? "zones" .!= mempty) <*>
-                     (o .:? "kind" .!= "compute#region")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "quotas" .!= mempty)
-                     <*> (o .:? "id")
-                     <*> (o .:? "description")
-                     <*> (o .:? "deprecated"))
-
-instance ToJSON Region where
-        toJSON Region{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _rrStatus,
-                  ("zones" .=) <$> _rrZones, Just ("kind" .= _rrKind),
-                  ("selfLink" .=) <$> _rrSelfLink,
-                  ("name" .=) <$> _rrName,
-                  ("creationTimestamp" .=) <$> _rrCreationTimestamp,
-                  ("quotas" .=) <$> _rrQuotas, ("id" .=) <$> _rrId,
-                  ("description" .=) <$> _rrDescription,
-                  ("deprecated" .=) <$> _rrDeprecated])
-
---
--- /See:/ 'vpnTunnel' smart constructor.
-data VPNTunnel = VPNTunnel
-    { _vtDetailedStatus    :: !(Maybe Text)
-    , _vtStatus            :: !(Maybe VPNTunnelStatus)
-    , _vtKind              :: !Text
-    , _vtPeerIP            :: !(Maybe Text)
-    , _vtTargetVPNGateway  :: !(Maybe Text)
-    , _vtSelfLink          :: !(Maybe Text)
-    , _vtSharedSecret      :: !(Maybe Text)
-    , _vtName              :: !(Maybe Text)
-    , _vtCreationTimestamp :: !(Maybe Text)
-    , _vtSharedSecretHash  :: !(Maybe Text)
-    , _vtId                :: !(Maybe (Textual Word64))
-    , _vtIkeVersion        :: !(Maybe (Textual Int32))
-    , _vtRegion            :: !(Maybe Text)
-    , _vtDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnel' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtDetailedStatus'
---
--- * 'vtStatus'
---
--- * 'vtKind'
---
--- * 'vtPeerIP'
---
--- * 'vtTargetVPNGateway'
---
--- * 'vtSelfLink'
---
--- * 'vtSharedSecret'
---
--- * 'vtName'
---
--- * 'vtCreationTimestamp'
---
--- * 'vtSharedSecretHash'
---
--- * 'vtId'
---
--- * 'vtIkeVersion'
---
--- * 'vtRegion'
---
--- * 'vtDescription'
-vpnTunnel
-    :: VPNTunnel
-vpnTunnel =
-    VPNTunnel
-    { _vtDetailedStatus = Nothing
-    , _vtStatus = Nothing
-    , _vtKind = "compute#vpnTunnel"
-    , _vtPeerIP = Nothing
-    , _vtTargetVPNGateway = Nothing
-    , _vtSelfLink = Nothing
-    , _vtSharedSecret = Nothing
-    , _vtName = Nothing
-    , _vtCreationTimestamp = Nothing
-    , _vtSharedSecretHash = Nothing
-    , _vtId = Nothing
-    , _vtIkeVersion = Nothing
-    , _vtRegion = Nothing
-    , _vtDescription = Nothing
-    }
-
--- | [Output Only] Detailed status message for the VPN tunnel.
-vtDetailedStatus :: Lens' VPNTunnel (Maybe Text)
-vtDetailedStatus
-  = lens _vtDetailedStatus
-      (\ s a -> s{_vtDetailedStatus = a})
-
--- | [Output Only] The status of the VPN tunnel.
-vtStatus :: Lens' VPNTunnel (Maybe VPNTunnelStatus)
-vtStatus = lens _vtStatus (\ s a -> s{_vtStatus = a})
-
--- | [Output Only] Type of resource. Always compute#vpnTunnel for VPN
--- tunnels.
-vtKind :: Lens' VPNTunnel Text
-vtKind = lens _vtKind (\ s a -> s{_vtKind = a})
-
--- | IP address of the peer VPN gateway.
-vtPeerIP :: Lens' VPNTunnel (Maybe Text)
-vtPeerIP = lens _vtPeerIP (\ s a -> s{_vtPeerIP = a})
-
--- | URL of the VPN gateway to which this VPN tunnel is associated. Provided
--- by the client when the VPN tunnel is created.
-vtTargetVPNGateway :: Lens' VPNTunnel (Maybe Text)
-vtTargetVPNGateway
-  = lens _vtTargetVPNGateway
-      (\ s a -> s{_vtTargetVPNGateway = a})
-
--- | [Output Only] Server-defined URL for the resource.
-vtSelfLink :: Lens' VPNTunnel (Maybe Text)
-vtSelfLink
-  = lens _vtSelfLink (\ s a -> s{_vtSelfLink = a})
-
--- | Shared secret used to set the secure session between the GCE VPN gateway
--- and the peer VPN gateway.
-vtSharedSecret :: Lens' VPNTunnel (Maybe Text)
-vtSharedSecret
-  = lens _vtSharedSecret
-      (\ s a -> s{_vtSharedSecret = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-vtName :: Lens' VPNTunnel (Maybe Text)
-vtName = lens _vtName (\ s a -> s{_vtName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-vtCreationTimestamp :: Lens' VPNTunnel (Maybe Text)
-vtCreationTimestamp
-  = lens _vtCreationTimestamp
-      (\ s a -> s{_vtCreationTimestamp = a})
-
--- | Hash of the shared secret.
-vtSharedSecretHash :: Lens' VPNTunnel (Maybe Text)
-vtSharedSecretHash
-  = lens _vtSharedSecretHash
-      (\ s a -> s{_vtSharedSecretHash = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-vtId :: Lens' VPNTunnel (Maybe Word64)
-vtId
-  = lens _vtId (\ s a -> s{_vtId = a}) .
-      mapping _Coerce
-
--- | IKE protocol version to use when establishing the VPN tunnel with peer
--- VPN gateway. Acceptable IKE versions are 1 or 2. Default version is 2.
-vtIkeVersion :: Lens' VPNTunnel (Maybe Int32)
-vtIkeVersion
-  = lens _vtIkeVersion (\ s a -> s{_vtIkeVersion = a})
-      . mapping _Coerce
-
--- | [Output Only] URL of the region where the VPN tunnel resides.
-vtRegion :: Lens' VPNTunnel (Maybe Text)
-vtRegion = lens _vtRegion (\ s a -> s{_vtRegion = a})
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-vtDescription :: Lens' VPNTunnel (Maybe Text)
-vtDescription
-  = lens _vtDescription
-      (\ s a -> s{_vtDescription = a})
-
-instance FromJSON VPNTunnel where
-        parseJSON
-          = withObject "VPNTunnel"
-              (\ o ->
-                 VPNTunnel <$>
-                   (o .:? "detailedStatus") <*> (o .:? "status") <*>
-                     (o .:? "kind" .!= "compute#vpnTunnel")
-                     <*> (o .:? "peerIp")
-                     <*> (o .:? "targetVpnGateway")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "sharedSecret")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "sharedSecretHash")
-                     <*> (o .:? "id")
-                     <*> (o .:? "ikeVersion")
-                     <*> (o .:? "region")
-                     <*> (o .:? "description"))
-
-instance ToJSON VPNTunnel where
-        toJSON VPNTunnel{..}
-          = object
-              (catMaybes
-                 [("detailedStatus" .=) <$> _vtDetailedStatus,
-                  ("status" .=) <$> _vtStatus,
-                  Just ("kind" .= _vtKind),
-                  ("peerIp" .=) <$> _vtPeerIP,
-                  ("targetVpnGateway" .=) <$> _vtTargetVPNGateway,
-                  ("selfLink" .=) <$> _vtSelfLink,
-                  ("sharedSecret" .=) <$> _vtSharedSecret,
-                  ("name" .=) <$> _vtName,
-                  ("creationTimestamp" .=) <$> _vtCreationTimestamp,
-                  ("sharedSecretHash" .=) <$> _vtSharedSecretHash,
-                  ("id" .=) <$> _vtId,
-                  ("ikeVersion" .=) <$> _vtIkeVersion,
-                  ("region" .=) <$> _vtRegion,
-                  ("description" .=) <$> _vtDescription])
-
--- | [Output Only] Informational warning which replaces the list of
--- operations when the list is empty.
---
--- /See:/ 'operationsScopedListWarning' smart constructor.
-data OperationsScopedListWarning = OperationsScopedListWarning
-    { _oslwData    :: !(Maybe [OperationsScopedListWarningDataItem])
-    , _oslwCode    :: !(Maybe OperationsScopedListWarningCode)
-    , _oslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationsScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oslwData'
---
--- * 'oslwCode'
---
--- * 'oslwMessage'
-operationsScopedListWarning
-    :: OperationsScopedListWarning
-operationsScopedListWarning =
-    OperationsScopedListWarning
-    { _oslwData = Nothing
-    , _oslwCode = Nothing
-    , _oslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-oslwData :: Lens' OperationsScopedListWarning [OperationsScopedListWarningDataItem]
-oslwData
-  = lens _oslwData (\ s a -> s{_oslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-oslwCode :: Lens' OperationsScopedListWarning (Maybe OperationsScopedListWarningCode)
-oslwCode = lens _oslwCode (\ s a -> s{_oslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-oslwMessage :: Lens' OperationsScopedListWarning (Maybe Text)
-oslwMessage
-  = lens _oslwMessage (\ s a -> s{_oslwMessage = a})
-
-instance FromJSON OperationsScopedListWarning where
-        parseJSON
-          = withObject "OperationsScopedListWarning"
-              (\ o ->
-                 OperationsScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON OperationsScopedListWarning where
-        toJSON OperationsScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _oslwData,
-                  ("code" .=) <$> _oslwCode,
-                  ("message" .=) <$> _oslwMessage])
-
--- | Sets the scheduling options for an Instance.
---
--- /See:/ 'scheduling' smart constructor.
-data Scheduling = Scheduling
-    { _sAutomaticRestart  :: !(Maybe Bool)
-    , _sOnHostMaintenance :: !(Maybe SchedulingOnHostMaintenance)
-    , _sPreemptible       :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Scheduling' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sAutomaticRestart'
---
--- * 'sOnHostMaintenance'
---
--- * 'sPreemptible'
-scheduling
-    :: Scheduling
-scheduling =
-    Scheduling
-    { _sAutomaticRestart = Nothing
-    , _sOnHostMaintenance = Nothing
-    , _sPreemptible = Nothing
-    }
-
--- | Specifies whether the instance should be automatically restarted if it
--- is terminated by Compute Engine (not terminated by a user). You can only
--- set the automatic restart option for standard instances. Preemptible
--- instances cannot be automatically restarted.
-sAutomaticRestart :: Lens' Scheduling (Maybe Bool)
-sAutomaticRestart
-  = lens _sAutomaticRestart
-      (\ s a -> s{_sAutomaticRestart = a})
-
--- | Defines the maintenance behavior for this instance. For standard
--- instances, the default behavior is MIGRATE. For preemptible instances,
--- the default and only possible behavior is TERMINATE. For more
--- information, see Setting maintenance behavior.
-sOnHostMaintenance :: Lens' Scheduling (Maybe SchedulingOnHostMaintenance)
-sOnHostMaintenance
-  = lens _sOnHostMaintenance
-      (\ s a -> s{_sOnHostMaintenance = a})
-
--- | Whether the instance is preemptible.
-sPreemptible :: Lens' Scheduling (Maybe Bool)
-sPreemptible
-  = lens _sPreemptible (\ s a -> s{_sPreemptible = a})
-
-instance FromJSON Scheduling where
-        parseJSON
-          = withObject "Scheduling"
-              (\ o ->
-                 Scheduling <$>
-                   (o .:? "automaticRestart") <*>
-                     (o .:? "onHostMaintenance")
-                     <*> (o .:? "preemptible"))
-
-instance ToJSON Scheduling where
-        toJSON Scheduling{..}
-          = object
-              (catMaybes
-                 [("automaticRestart" .=) <$> _sAutomaticRestart,
-                  ("onHostMaintenance" .=) <$> _sOnHostMaintenance,
-                  ("preemptible" .=) <$> _sPreemptible])
-
---
--- /See:/ 'vpnTunnelsScopedListWarningDataItem' smart constructor.
-data VPNTunnelsScopedListWarningDataItem = VPNTunnelsScopedListWarningDataItem
-    { _vtslwdiValue :: !(Maybe Text)
-    , _vtslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnelsScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtslwdiValue'
---
--- * 'vtslwdiKey'
-vpnTunnelsScopedListWarningDataItem
-    :: VPNTunnelsScopedListWarningDataItem
-vpnTunnelsScopedListWarningDataItem =
-    VPNTunnelsScopedListWarningDataItem
-    { _vtslwdiValue = Nothing
-    , _vtslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-vtslwdiValue :: Lens' VPNTunnelsScopedListWarningDataItem (Maybe Text)
-vtslwdiValue
-  = lens _vtslwdiValue (\ s a -> s{_vtslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-vtslwdiKey :: Lens' VPNTunnelsScopedListWarningDataItem (Maybe Text)
-vtslwdiKey
-  = lens _vtslwdiKey (\ s a -> s{_vtslwdiKey = a})
-
-instance FromJSON VPNTunnelsScopedListWarningDataItem
-         where
-        parseJSON
-          = withObject "VPNTunnelsScopedListWarningDataItem"
-              (\ o ->
-                 VPNTunnelsScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON VPNTunnelsScopedListWarningDataItem
-         where
-        toJSON VPNTunnelsScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _vtslwdiValue,
-                  ("key" .=) <$> _vtslwdiKey])
-
--- | Informational warning which replaces the list of forwarding rules when
--- the list is empty.
---
--- /See:/ 'forwardingRulesScopedListWarning' smart constructor.
-data ForwardingRulesScopedListWarning = ForwardingRulesScopedListWarning
-    { _frslwData    :: !(Maybe [ForwardingRulesScopedListWarningDataItem])
-    , _frslwCode    :: !(Maybe ForwardingRulesScopedListWarningCode)
-    , _frslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ForwardingRulesScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frslwData'
---
--- * 'frslwCode'
---
--- * 'frslwMessage'
-forwardingRulesScopedListWarning
-    :: ForwardingRulesScopedListWarning
-forwardingRulesScopedListWarning =
-    ForwardingRulesScopedListWarning
-    { _frslwData = Nothing
-    , _frslwCode = Nothing
-    , _frslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-frslwData :: Lens' ForwardingRulesScopedListWarning [ForwardingRulesScopedListWarningDataItem]
-frslwData
-  = lens _frslwData (\ s a -> s{_frslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-frslwCode :: Lens' ForwardingRulesScopedListWarning (Maybe ForwardingRulesScopedListWarningCode)
-frslwCode
-  = lens _frslwCode (\ s a -> s{_frslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-frslwMessage :: Lens' ForwardingRulesScopedListWarning (Maybe Text)
-frslwMessage
-  = lens _frslwMessage (\ s a -> s{_frslwMessage = a})
-
-instance FromJSON ForwardingRulesScopedListWarning
-         where
-        parseJSON
-          = withObject "ForwardingRulesScopedListWarning"
-              (\ o ->
-                 ForwardingRulesScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON ForwardingRulesScopedListWarning
-         where
-        toJSON ForwardingRulesScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _frslwData,
-                  ("code" .=) <$> _frslwCode,
-                  ("message" .=) <$> _frslwMessage])
-
--- | Contains a list of HttpHealthCheck resources.
---
--- /See:/ 'hTTPHealthCheckList' smart constructor.
-data HTTPHealthCheckList = HTTPHealthCheckList
-    { _httphclNextPageToken :: !(Maybe Text)
-    , _httphclKind          :: !Text
-    , _httphclItems         :: !(Maybe [HTTPHealthCheck])
-    , _httphclSelfLink      :: !(Maybe Text)
-    , _httphclId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HTTPHealthCheckList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'httphclNextPageToken'
---
--- * 'httphclKind'
---
--- * 'httphclItems'
---
--- * 'httphclSelfLink'
---
--- * 'httphclId'
-hTTPHealthCheckList
-    :: HTTPHealthCheckList
-hTTPHealthCheckList =
-    HTTPHealthCheckList
-    { _httphclNextPageToken = Nothing
-    , _httphclKind = "compute#httpHealthCheckList"
-    , _httphclItems = Nothing
-    , _httphclSelfLink = Nothing
-    , _httphclId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-httphclNextPageToken :: Lens' HTTPHealthCheckList (Maybe Text)
-httphclNextPageToken
-  = lens _httphclNextPageToken
-      (\ s a -> s{_httphclNextPageToken = a})
-
--- | Type of resource.
-httphclKind :: Lens' HTTPHealthCheckList Text
-httphclKind
-  = lens _httphclKind (\ s a -> s{_httphclKind = a})
-
--- | A list of HttpHealthCheck resources.
-httphclItems :: Lens' HTTPHealthCheckList [HTTPHealthCheck]
-httphclItems
-  = lens _httphclItems (\ s a -> s{_httphclItems = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-httphclSelfLink :: Lens' HTTPHealthCheckList (Maybe Text)
-httphclSelfLink
-  = lens _httphclSelfLink
-      (\ s a -> s{_httphclSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-httphclId :: Lens' HTTPHealthCheckList (Maybe Text)
-httphclId
-  = lens _httphclId (\ s a -> s{_httphclId = a})
-
-instance FromJSON HTTPHealthCheckList where
-        parseJSON
-          = withObject "HTTPHealthCheckList"
-              (\ o ->
-                 HTTPHealthCheckList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#httpHealthCheckList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON HTTPHealthCheckList where
-        toJSON HTTPHealthCheckList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _httphclNextPageToken,
-                  Just ("kind" .= _httphclKind),
-                  ("items" .=) <$> _httphclItems,
-                  ("selfLink" .=) <$> _httphclSelfLink,
-                  ("id" .=) <$> _httphclId])
-
--- | [Output Only] The warning that replaces the list of managed instance
--- groups when the list is empty.
---
--- /See:/ 'instanceGroupManagersScopedListWarning' smart constructor.
-data InstanceGroupManagersScopedListWarning = InstanceGroupManagersScopedListWarning
-    { _igmslwData    :: !(Maybe [InstanceGroupManagersScopedListWarningDataItem])
-    , _igmslwCode    :: !(Maybe InstanceGroupManagersScopedListWarningCode)
-    , _igmslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmslwData'
---
--- * 'igmslwCode'
---
--- * 'igmslwMessage'
-instanceGroupManagersScopedListWarning
-    :: InstanceGroupManagersScopedListWarning
-instanceGroupManagersScopedListWarning =
-    InstanceGroupManagersScopedListWarning
-    { _igmslwData = Nothing
-    , _igmslwCode = Nothing
-    , _igmslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-igmslwData :: Lens' InstanceGroupManagersScopedListWarning [InstanceGroupManagersScopedListWarningDataItem]
-igmslwData
-  = lens _igmslwData (\ s a -> s{_igmslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-igmslwCode :: Lens' InstanceGroupManagersScopedListWarning (Maybe InstanceGroupManagersScopedListWarningCode)
-igmslwCode
-  = lens _igmslwCode (\ s a -> s{_igmslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-igmslwMessage :: Lens' InstanceGroupManagersScopedListWarning (Maybe Text)
-igmslwMessage
-  = lens _igmslwMessage
-      (\ s a -> s{_igmslwMessage = a})
-
-instance FromJSON
-         InstanceGroupManagersScopedListWarning where
-        parseJSON
-          = withObject "InstanceGroupManagersScopedListWarning"
-              (\ o ->
-                 InstanceGroupManagersScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON
-         InstanceGroupManagersScopedListWarning where
-        toJSON InstanceGroupManagersScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _igmslwData,
-                  ("code" .=) <$> _igmslwCode,
-                  ("message" .=) <$> _igmslwMessage])
-
---
--- /See:/ 'urlMapsValidateRequest' smart constructor.
-newtype URLMapsValidateRequest = URLMapsValidateRequest
-    { _umvrResource :: Maybe URLMap
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMapsValidateRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umvrResource'
-urlMapsValidateRequest
-    :: URLMapsValidateRequest
-urlMapsValidateRequest =
-    URLMapsValidateRequest
-    { _umvrResource = Nothing
-    }
-
--- | Content of the UrlMap to be validated.
-umvrResource :: Lens' URLMapsValidateRequest (Maybe URLMap)
-umvrResource
-  = lens _umvrResource (\ s a -> s{_umvrResource = a})
-
-instance FromJSON URLMapsValidateRequest where
-        parseJSON
-          = withObject "URLMapsValidateRequest"
-              (\ o ->
-                 URLMapsValidateRequest <$> (o .:? "resource"))
-
-instance ToJSON URLMapsValidateRequest where
-        toJSON URLMapsValidateRequest{..}
-          = object
-              (catMaybes [("resource" .=) <$> _umvrResource])
-
---
--- /See:/ 'instanceGroupManagersSetTargetPoolsRequest' smart constructor.
-data InstanceGroupManagersSetTargetPoolsRequest = InstanceGroupManagersSetTargetPoolsRequest
-    { _igmstprFingerprint :: !(Maybe (Textual Word8))
-    , _igmstprTargetPools :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupManagersSetTargetPoolsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igmstprFingerprint'
---
--- * 'igmstprTargetPools'
-instanceGroupManagersSetTargetPoolsRequest
-    :: InstanceGroupManagersSetTargetPoolsRequest
-instanceGroupManagersSetTargetPoolsRequest =
-    InstanceGroupManagersSetTargetPoolsRequest
-    { _igmstprFingerprint = Nothing
-    , _igmstprTargetPools = Nothing
-    }
-
--- | The fingerprint of the target pools information. Use this optional
--- property to prevent conflicts when multiple users change the target
--- pools settings concurrently. Obtain the fingerprint with the
--- instanceGroupManagers.get method. Then, include the fingerprint in your
--- request to ensure that you do not overwrite changes that were applied
--- from another concurrent request.
-igmstprFingerprint :: Lens' InstanceGroupManagersSetTargetPoolsRequest (Maybe Word8)
-igmstprFingerprint
-  = lens _igmstprFingerprint
-      (\ s a -> s{_igmstprFingerprint = a})
-      . mapping _Coerce
-
--- | The list of target pool URLs that instances in this managed instance
--- group belong to. The managed instance group applies these target pools
--- to all of the instances in the group. Existing instances and new
--- instances in the group all receive these target pool settings.
-igmstprTargetPools :: Lens' InstanceGroupManagersSetTargetPoolsRequest [Text]
-igmstprTargetPools
-  = lens _igmstprTargetPools
-      (\ s a -> s{_igmstprTargetPools = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON
-         InstanceGroupManagersSetTargetPoolsRequest where
-        parseJSON
-          = withObject
-              "InstanceGroupManagersSetTargetPoolsRequest"
-              (\ o ->
-                 InstanceGroupManagersSetTargetPoolsRequest <$>
-                   (o .:? "fingerprint") <*>
-                     (o .:? "targetPools" .!= mempty))
-
-instance ToJSON
-         InstanceGroupManagersSetTargetPoolsRequest where
-        toJSON InstanceGroupManagersSetTargetPoolsRequest{..}
-          = object
-              (catMaybes
-                 [("fingerprint" .=) <$> _igmstprFingerprint,
-                  ("targetPools" .=) <$> _igmstprTargetPools])
-
--- | Contains a list of HttpsHealthCheck resources.
---
--- /See:/ 'httpsHealthCheckList' smart constructor.
-data HTTPSHealthCheckList = HTTPSHealthCheckList
-    { _hhclNextPageToken :: !(Maybe Text)
-    , _hhclKind          :: !Text
-    , _hhclItems         :: !(Maybe [HTTPSHealthCheck])
-    , _hhclSelfLink      :: !(Maybe Text)
-    , _hhclId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HTTPSHealthCheckList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hhclNextPageToken'
---
--- * 'hhclKind'
---
--- * 'hhclItems'
---
--- * 'hhclSelfLink'
---
--- * 'hhclId'
-httpsHealthCheckList
-    :: HTTPSHealthCheckList
-httpsHealthCheckList =
-    HTTPSHealthCheckList
-    { _hhclNextPageToken = Nothing
-    , _hhclKind = "compute#httpsHealthCheckList"
-    , _hhclItems = Nothing
-    , _hhclSelfLink = Nothing
-    , _hhclId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-hhclNextPageToken :: Lens' HTTPSHealthCheckList (Maybe Text)
-hhclNextPageToken
-  = lens _hhclNextPageToken
-      (\ s a -> s{_hhclNextPageToken = a})
-
--- | Type of resource.
-hhclKind :: Lens' HTTPSHealthCheckList Text
-hhclKind = lens _hhclKind (\ s a -> s{_hhclKind = a})
-
--- | A list of HttpsHealthCheck resources.
-hhclItems :: Lens' HTTPSHealthCheckList [HTTPSHealthCheck]
-hhclItems
-  = lens _hhclItems (\ s a -> s{_hhclItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-hhclSelfLink :: Lens' HTTPSHealthCheckList (Maybe Text)
-hhclSelfLink
-  = lens _hhclSelfLink (\ s a -> s{_hhclSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-hhclId :: Lens' HTTPSHealthCheckList (Maybe Text)
-hhclId = lens _hhclId (\ s a -> s{_hhclId = a})
-
-instance FromJSON HTTPSHealthCheckList where
-        parseJSON
-          = withObject "HTTPSHealthCheckList"
-              (\ o ->
-                 HTTPSHealthCheckList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#httpsHealthCheckList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON HTTPSHealthCheckList where
-        toJSON HTTPSHealthCheckList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _hhclNextPageToken,
-                  Just ("kind" .= _hhclKind),
-                  ("items" .=) <$> _hhclItems,
-                  ("selfLink" .=) <$> _hhclSelfLink,
-                  ("id" .=) <$> _hhclId])
-
---
--- /See:/ 'operationErrorErrorsItem' smart constructor.
-data OperationErrorErrorsItem = OperationErrorErrorsItem
-    { _oeeiLocation :: !(Maybe Text)
-    , _oeeiCode     :: !(Maybe Text)
-    , _oeeiMessage  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationErrorErrorsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oeeiLocation'
---
--- * 'oeeiCode'
---
--- * 'oeeiMessage'
-operationErrorErrorsItem
-    :: OperationErrorErrorsItem
-operationErrorErrorsItem =
-    OperationErrorErrorsItem
-    { _oeeiLocation = Nothing
-    , _oeeiCode = Nothing
-    , _oeeiMessage = Nothing
-    }
-
--- | [Output Only] Indicates the field in the request which caused the error.
--- This property is optional.
-oeeiLocation :: Lens' OperationErrorErrorsItem (Maybe Text)
-oeeiLocation
-  = lens _oeeiLocation (\ s a -> s{_oeeiLocation = a})
-
--- | [Output Only] The error type identifier for this error.
-oeeiCode :: Lens' OperationErrorErrorsItem (Maybe Text)
-oeeiCode = lens _oeeiCode (\ s a -> s{_oeeiCode = a})
-
--- | [Output Only] An optional, human-readable error message.
-oeeiMessage :: Lens' OperationErrorErrorsItem (Maybe Text)
-oeeiMessage
-  = lens _oeeiMessage (\ s a -> s{_oeeiMessage = a})
-
-instance FromJSON OperationErrorErrorsItem where
-        parseJSON
-          = withObject "OperationErrorErrorsItem"
-              (\ o ->
-                 OperationErrorErrorsItem <$>
-                   (o .:? "location") <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON OperationErrorErrorsItem where
-        toJSON OperationErrorErrorsItem{..}
-          = object
-              (catMaybes
-                 [("location" .=) <$> _oeeiLocation,
-                  ("code" .=) <$> _oeeiCode,
-                  ("message" .=) <$> _oeeiMessage])
-
--- | A license resource.
---
--- /See:/ 'license' smart constructor.
-data License = License
-    { _lChargesUseFee :: !(Maybe Bool)
-    , _lKind          :: !Text
-    , _lSelfLink      :: !(Maybe Text)
-    , _lName          :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'License' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lChargesUseFee'
---
--- * 'lKind'
---
--- * 'lSelfLink'
---
--- * 'lName'
-license
-    :: License
-license =
-    License
-    { _lChargesUseFee = Nothing
-    , _lKind = "compute#license"
-    , _lSelfLink = Nothing
-    , _lName = Nothing
-    }
-
--- | If true, the customer will be charged license fee for running software
--- that contains this license on an instance.
-lChargesUseFee :: Lens' License (Maybe Bool)
-lChargesUseFee
-  = lens _lChargesUseFee
-      (\ s a -> s{_lChargesUseFee = a})
-
--- | [Output Only] Type of resource. Always compute#license for licenses.
-lKind :: Lens' License Text
-lKind = lens _lKind (\ s a -> s{_lKind = a})
-
--- | [Output Only] Server-defined URL for the resource.
-lSelfLink :: Lens' License (Maybe Text)
-lSelfLink
-  = lens _lSelfLink (\ s a -> s{_lSelfLink = a})
-
--- | [Output Only] Name of the resource. The name is 1-63 characters long and
--- complies with RFC1035.
-lName :: Lens' License (Maybe Text)
-lName = lens _lName (\ s a -> s{_lName = a})
-
-instance FromJSON License where
-        parseJSON
-          = withObject "License"
-              (\ o ->
-                 License <$>
-                   (o .:? "chargesUseFee") <*>
-                     (o .:? "kind" .!= "compute#license")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name"))
-
-instance ToJSON License where
-        toJSON License{..}
-          = object
-              (catMaybes
-                 [("chargesUseFee" .=) <$> _lChargesUseFee,
-                  Just ("kind" .= _lKind),
-                  ("selfLink" .=) <$> _lSelfLink,
-                  ("name" .=) <$> _lName])
-
--- | A path-matching rule for a URL. If matched, will use the specified
--- BackendService to handle the traffic arriving at this URL.
---
--- /See:/ 'pathRule' smart constructor.
-data PathRule = PathRule
-    { _prService :: !(Maybe Text)
-    , _prPaths   :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PathRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prService'
---
--- * 'prPaths'
-pathRule
-    :: PathRule
-pathRule =
-    PathRule
-    { _prService = Nothing
-    , _prPaths = Nothing
-    }
-
--- | The URL of the BackendService resource if this rule is matched.
-prService :: Lens' PathRule (Maybe Text)
-prService
-  = lens _prService (\ s a -> s{_prService = a})
-
--- | The list of path patterns to match. Each must start with \/ and the only
--- place a * is allowed is at the end following a \/. The string fed to the
--- path matcher does not include any text after the first ? or #, and those
--- chars are not allowed here.
-prPaths :: Lens' PathRule [Text]
-prPaths
-  = lens _prPaths (\ s a -> s{_prPaths = a}) . _Default
-      . _Coerce
-
-instance FromJSON PathRule where
-        parseJSON
-          = withObject "PathRule"
-              (\ o ->
-                 PathRule <$>
-                   (o .:? "service") <*> (o .:? "paths" .!= mempty))
-
-instance ToJSON PathRule where
-        toJSON PathRule{..}
-          = object
-              (catMaybes
-                 [("service" .=) <$> _prService,
-                  ("paths" .=) <$> _prPaths])
-
--- | Contains a list of instance resources.
---
--- /See:/ 'instanceList' smart constructor.
-data InstanceList = InstanceList
-    { _insNextPageToken :: !(Maybe Text)
-    , _insKind          :: !Text
-    , _insItems         :: !(Maybe [Instance])
-    , _insSelfLink      :: !(Maybe Text)
-    , _insId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'insNextPageToken'
---
--- * 'insKind'
---
--- * 'insItems'
---
--- * 'insSelfLink'
---
--- * 'insId'
-instanceList
-    :: InstanceList
-instanceList =
-    InstanceList
-    { _insNextPageToken = Nothing
-    , _insKind = "compute#instanceList"
-    , _insItems = Nothing
-    , _insSelfLink = Nothing
-    , _insId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-insNextPageToken :: Lens' InstanceList (Maybe Text)
-insNextPageToken
-  = lens _insNextPageToken
-      (\ s a -> s{_insNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#instanceList for lists of
--- Instance resources.
-insKind :: Lens' InstanceList Text
-insKind = lens _insKind (\ s a -> s{_insKind = a})
-
--- | [Output Only] A list of Instance resources.
-insItems :: Lens' InstanceList [Instance]
-insItems
-  = lens _insItems (\ s a -> s{_insItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server defined URL for this resource.
-insSelfLink :: Lens' InstanceList (Maybe Text)
-insSelfLink
-  = lens _insSelfLink (\ s a -> s{_insSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-insId :: Lens' InstanceList (Maybe Text)
-insId = lens _insId (\ s a -> s{_insId = a})
-
-instance FromJSON InstanceList where
-        parseJSON
-          = withObject "InstanceList"
-              (\ o ->
-                 InstanceList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#instanceList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON InstanceList where
-        toJSON InstanceList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _insNextPageToken,
-                  Just ("kind" .= _insKind),
-                  ("items" .=) <$> _insItems,
-                  ("selfLink" .=) <$> _insSelfLink,
-                  ("id" .=) <$> _insId])
-
---
--- /See:/ 'managedInstanceLastAttempt' smart constructor.
-newtype ManagedInstanceLastAttempt = ManagedInstanceLastAttempt
-    { _milaErrors :: Maybe ManagedInstanceLastAttemptErrors
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ManagedInstanceLastAttempt' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'milaErrors'
-managedInstanceLastAttempt
-    :: ManagedInstanceLastAttempt
-managedInstanceLastAttempt =
-    ManagedInstanceLastAttempt
-    { _milaErrors = Nothing
-    }
-
--- | [Output Only] Encountered errors during the last attempt to create or
--- delete the instance.
-milaErrors :: Lens' ManagedInstanceLastAttempt (Maybe ManagedInstanceLastAttemptErrors)
-milaErrors
-  = lens _milaErrors (\ s a -> s{_milaErrors = a})
-
-instance FromJSON ManagedInstanceLastAttempt where
-        parseJSON
-          = withObject "ManagedInstanceLastAttempt"
-              (\ o ->
-                 ManagedInstanceLastAttempt <$> (o .:? "errors"))
-
-instance ToJSON ManagedInstanceLastAttempt where
-        toJSON ManagedInstanceLastAttempt{..}
-          = object (catMaybes [("errors" .=) <$> _milaErrors])
-
--- | Contains a list of BackendService resources.
---
--- /See:/ 'backendServiceList' smart constructor.
-data BackendServiceList = BackendServiceList
-    { _bslNextPageToken :: !(Maybe Text)
-    , _bslKind          :: !Text
-    , _bslItems         :: !(Maybe [BackendService])
-    , _bslSelfLink      :: !(Maybe Text)
-    , _bslId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BackendServiceList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bslNextPageToken'
---
--- * 'bslKind'
---
--- * 'bslItems'
---
--- * 'bslSelfLink'
---
--- * 'bslId'
-backendServiceList
-    :: BackendServiceList
-backendServiceList =
-    BackendServiceList
-    { _bslNextPageToken = Nothing
-    , _bslKind = "compute#backendServiceList"
-    , _bslItems = Nothing
-    , _bslSelfLink = Nothing
-    , _bslId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-bslNextPageToken :: Lens' BackendServiceList (Maybe Text)
-bslNextPageToken
-  = lens _bslNextPageToken
-      (\ s a -> s{_bslNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#backendServiceList for
--- lists of backend services.
-bslKind :: Lens' BackendServiceList Text
-bslKind = lens _bslKind (\ s a -> s{_bslKind = a})
-
--- | A list of BackendService resources.
-bslItems :: Lens' BackendServiceList [BackendService]
-bslItems
-  = lens _bslItems (\ s a -> s{_bslItems = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-bslSelfLink :: Lens' BackendServiceList (Maybe Text)
-bslSelfLink
-  = lens _bslSelfLink (\ s a -> s{_bslSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-bslId :: Lens' BackendServiceList (Maybe Text)
-bslId = lens _bslId (\ s a -> s{_bslId = a})
-
-instance FromJSON BackendServiceList where
-        parseJSON
-          = withObject "BackendServiceList"
-              (\ o ->
-                 BackendServiceList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#backendServiceList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON BackendServiceList where
-        toJSON BackendServiceList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _bslNextPageToken,
-                  Just ("kind" .= _bslKind),
-                  ("items" .=) <$> _bslItems,
-                  ("selfLink" .=) <$> _bslSelfLink,
-                  ("id" .=) <$> _bslId])
-
--- | [Output Only] An informational warning that replaces the list of
--- instance groups when the list is empty.
---
--- /See:/ 'instanceGroupsScopedListWarning' smart constructor.
-data InstanceGroupsScopedListWarning = InstanceGroupsScopedListWarning
-    { _igslwData    :: !(Maybe [InstanceGroupsScopedListWarningDataItem])
-    , _igslwCode    :: !(Maybe InstanceGroupsScopedListWarningCode)
-    , _igslwMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsScopedListWarning' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igslwData'
---
--- * 'igslwCode'
---
--- * 'igslwMessage'
-instanceGroupsScopedListWarning
-    :: InstanceGroupsScopedListWarning
-instanceGroupsScopedListWarning =
-    InstanceGroupsScopedListWarning
-    { _igslwData = Nothing
-    , _igslwCode = Nothing
-    , _igslwMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-igslwData :: Lens' InstanceGroupsScopedListWarning [InstanceGroupsScopedListWarningDataItem]
-igslwData
-  = lens _igslwData (\ s a -> s{_igslwData = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-igslwCode :: Lens' InstanceGroupsScopedListWarning (Maybe InstanceGroupsScopedListWarningCode)
-igslwCode
-  = lens _igslwCode (\ s a -> s{_igslwCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-igslwMessage :: Lens' InstanceGroupsScopedListWarning (Maybe Text)
-igslwMessage
-  = lens _igslwMessage (\ s a -> s{_igslwMessage = a})
-
-instance FromJSON InstanceGroupsScopedListWarning
-         where
-        parseJSON
-          = withObject "InstanceGroupsScopedListWarning"
-              (\ o ->
-                 InstanceGroupsScopedListWarning <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON InstanceGroupsScopedListWarning where
-        toJSON InstanceGroupsScopedListWarning{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _igslwData,
-                  ("code" .=) <$> _igslwCode,
-                  ("message" .=) <$> _igslwMessage])
-
--- | CPU utilization policy.
---
--- /See:/ 'autoscalingPolicyCPUUtilization' smart constructor.
-newtype AutoscalingPolicyCPUUtilization = AutoscalingPolicyCPUUtilization
-    { _apcuUtilizationTarget :: Maybe (Textual Double)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AutoscalingPolicyCPUUtilization' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'apcuUtilizationTarget'
-autoscalingPolicyCPUUtilization
-    :: AutoscalingPolicyCPUUtilization
-autoscalingPolicyCPUUtilization =
-    AutoscalingPolicyCPUUtilization
-    { _apcuUtilizationTarget = Nothing
-    }
-
--- | The target utilization that the Autoscaler should maintain. It is
--- represented as a fraction of used cores. For example: 6 cores used in
--- 8-core VM are represented here as 0.75. Must be a float value between
--- (0, 1]. If not defined, the default is 0.8.
-apcuUtilizationTarget :: Lens' AutoscalingPolicyCPUUtilization (Maybe Double)
-apcuUtilizationTarget
-  = lens _apcuUtilizationTarget
-      (\ s a -> s{_apcuUtilizationTarget = a})
-      . mapping _Coerce
-
-instance FromJSON AutoscalingPolicyCPUUtilization
-         where
-        parseJSON
-          = withObject "AutoscalingPolicyCPUUtilization"
-              (\ o ->
-                 AutoscalingPolicyCPUUtilization <$>
-                   (o .:? "utilizationTarget"))
-
-instance ToJSON AutoscalingPolicyCPUUtilization where
-        toJSON AutoscalingPolicyCPUUtilization{..}
-          = object
-              (catMaybes
-                 [("utilizationTarget" .=) <$>
-                    _apcuUtilizationTarget])
-
---
--- /See:/ 'instanceGroupsScopedListWarningDataItem' smart constructor.
-data InstanceGroupsScopedListWarningDataItem = InstanceGroupsScopedListWarningDataItem
-    { _igslwdiValue :: !(Maybe Text)
-    , _igslwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igslwdiValue'
---
--- * 'igslwdiKey'
-instanceGroupsScopedListWarningDataItem
-    :: InstanceGroupsScopedListWarningDataItem
-instanceGroupsScopedListWarningDataItem =
-    InstanceGroupsScopedListWarningDataItem
-    { _igslwdiValue = Nothing
-    , _igslwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-igslwdiValue :: Lens' InstanceGroupsScopedListWarningDataItem (Maybe Text)
-igslwdiValue
-  = lens _igslwdiValue (\ s a -> s{_igslwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-igslwdiKey :: Lens' InstanceGroupsScopedListWarningDataItem (Maybe Text)
-igslwdiKey
-  = lens _igslwdiKey (\ s a -> s{_igslwdiKey = a})
-
-instance FromJSON
-         InstanceGroupsScopedListWarningDataItem where
-        parseJSON
-          = withObject
-              "InstanceGroupsScopedListWarningDataItem"
-              (\ o ->
-                 InstanceGroupsScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON
-         InstanceGroupsScopedListWarningDataItem where
-        toJSON InstanceGroupsScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _igslwdiValue,
-                  ("key" .=) <$> _igslwdiKey])
-
---
--- /See:/ 'resourceGroupReference' smart constructor.
-newtype ResourceGroupReference = ResourceGroupReference
-    { _rgrGroup :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResourceGroupReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rgrGroup'
-resourceGroupReference
-    :: ResourceGroupReference
-resourceGroupReference =
-    ResourceGroupReference
-    { _rgrGroup = Nothing
-    }
-
--- | A URI referencing one of the resource views listed in the backend
--- service.
-rgrGroup :: Lens' ResourceGroupReference (Maybe Text)
-rgrGroup = lens _rgrGroup (\ s a -> s{_rgrGroup = a})
-
-instance FromJSON ResourceGroupReference where
-        parseJSON
-          = withObject "ResourceGroupReference"
-              (\ o -> ResourceGroupReference <$> (o .:? "group"))
-
-instance ToJSON ResourceGroupReference where
-        toJSON ResourceGroupReference{..}
-          = object (catMaybes [("group" .=) <$> _rgrGroup])
-
--- | A Firewall resource.
---
--- /See:/ 'firewall' smart constructor.
-data Firewall = Firewall
-    { _fSourceTags        :: !(Maybe [Text])
-    , _fKind              :: !Text
-    , _fTargetTags        :: !(Maybe [Text])
-    , _fNetwork           :: !(Maybe Text)
-    , _fSourceRanges      :: !(Maybe [Text])
-    , _fSelfLink          :: !(Maybe Text)
-    , _fName              :: !(Maybe Text)
-    , _fCreationTimestamp :: !(Maybe Text)
-    , _fId                :: !(Maybe (Textual Word64))
-    , _fAllowed           :: !(Maybe [FirewallAllowedItem])
-    , _fDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Firewall' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fSourceTags'
---
--- * 'fKind'
---
--- * 'fTargetTags'
---
--- * 'fNetwork'
---
--- * 'fSourceRanges'
---
--- * 'fSelfLink'
---
--- * 'fName'
---
--- * 'fCreationTimestamp'
---
--- * 'fId'
---
--- * 'fAllowed'
---
--- * 'fDescription'
-firewall
-    :: Firewall
-firewall =
-    Firewall
-    { _fSourceTags = Nothing
-    , _fKind = "compute#firewall"
-    , _fTargetTags = Nothing
-    , _fNetwork = Nothing
-    , _fSourceRanges = Nothing
-    , _fSelfLink = Nothing
-    , _fName = Nothing
-    , _fCreationTimestamp = Nothing
-    , _fId = Nothing
-    , _fAllowed = Nothing
-    , _fDescription = Nothing
-    }
-
--- | A list of instance tags which this rule applies to. One or both of
--- sourceRanges and sourceTags may be set. If both properties are set, an
--- inbound connection is allowed if the range matches the sourceRanges OR
--- the tag of the source matches the sourceTags property. The connection
--- does not need to match both properties.
-fSourceTags :: Lens' Firewall [Text]
-fSourceTags
-  = lens _fSourceTags (\ s a -> s{_fSourceTags = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Ony] Type of the resource. Always compute#firewall for firewall
--- rules.
-fKind :: Lens' Firewall Text
-fKind = lens _fKind (\ s a -> s{_fKind = a})
-
--- | A list of instance tags indicating sets of instances located in the
--- network that may make network connections as specified in allowed[]. If
--- no targetTags are specified, the firewall rule applies to all instances
--- on the specified network.
-fTargetTags :: Lens' Firewall [Text]
-fTargetTags
-  = lens _fTargetTags (\ s a -> s{_fTargetTags = a}) .
-      _Default
-      . _Coerce
-
--- | URL of the network resource for this firewall rule. This field is
--- required for creating an instance but optional when creating a firewall
--- rule. If not specified when creating a firewall rule, the default
--- network is used: global\/networks\/default If you choose to specify this
--- property, you can specify the network as a full or partial URL. For
--- example, the following are all valid URLs: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/myproject\/global\/networks\/my-network
--- - projects\/myproject\/global\/networks\/my-network -
--- global\/networks\/default
-fNetwork :: Lens' Firewall (Maybe Text)
-fNetwork = lens _fNetwork (\ s a -> s{_fNetwork = a})
-
--- | The IP address blocks that this rule applies to, expressed in CIDR
--- format. One or both of sourceRanges and sourceTags may be set. If both
--- properties are set, an inbound connection is allowed if the range
--- matches the sourceRanges OR the tag of the source matches the sourceTags
--- property. The connection does not need to match both properties.
-fSourceRanges :: Lens' Firewall [Text]
-fSourceRanges
-  = lens _fSourceRanges
-      (\ s a -> s{_fSourceRanges = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for the resource.
-fSelfLink :: Lens' Firewall (Maybe Text)
-fSelfLink
-  = lens _fSelfLink (\ s a -> s{_fSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-fName :: Lens' Firewall (Maybe Text)
-fName = lens _fName (\ s a -> s{_fName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-fCreationTimestamp :: Lens' Firewall (Maybe Text)
-fCreationTimestamp
-  = lens _fCreationTimestamp
-      (\ s a -> s{_fCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-fId :: Lens' Firewall (Maybe Word64)
-fId
-  = lens _fId (\ s a -> s{_fId = a}) . mapping _Coerce
-
--- | The list of rules specified by this firewall. Each rule specifies a
--- protocol and port-range tuple that describes a permitted connection.
-fAllowed :: Lens' Firewall [FirewallAllowedItem]
-fAllowed
-  = lens _fAllowed (\ s a -> s{_fAllowed = a}) .
-      _Default
-      . _Coerce
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-fDescription :: Lens' Firewall (Maybe Text)
-fDescription
-  = lens _fDescription (\ s a -> s{_fDescription = a})
-
-instance FromJSON Firewall where
-        parseJSON
-          = withObject "Firewall"
-              (\ o ->
-                 Firewall <$>
-                   (o .:? "sourceTags" .!= mempty) <*>
-                     (o .:? "kind" .!= "compute#firewall")
-                     <*> (o .:? "targetTags" .!= mempty)
-                     <*> (o .:? "network")
-                     <*> (o .:? "sourceRanges" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "allowed" .!= mempty)
-                     <*> (o .:? "description"))
-
-instance ToJSON Firewall where
-        toJSON Firewall{..}
-          = object
-              (catMaybes
-                 [("sourceTags" .=) <$> _fSourceTags,
-                  Just ("kind" .= _fKind),
-                  ("targetTags" .=) <$> _fTargetTags,
-                  ("network" .=) <$> _fNetwork,
-                  ("sourceRanges" .=) <$> _fSourceRanges,
-                  ("selfLink" .=) <$> _fSelfLink,
-                  ("name" .=) <$> _fName,
-                  ("creationTimestamp" .=) <$> _fCreationTimestamp,
-                  ("id" .=) <$> _fId, ("allowed" .=) <$> _fAllowed,
-                  ("description" .=) <$> _fDescription])
-
--- | UrlMaps A host-matching rule for a URL. If matched, will use the named
--- PathMatcher to select the BackendService.
---
--- /See:/ 'hostRule' smart constructor.
-data HostRule = HostRule
-    { _hrHosts       :: !(Maybe [Text])
-    , _hrDescription :: !(Maybe Text)
-    , _hrPathMatcher :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hrHosts'
---
--- * 'hrDescription'
---
--- * 'hrPathMatcher'
-hostRule
-    :: HostRule
-hostRule =
-    HostRule
-    { _hrHosts = Nothing
-    , _hrDescription = Nothing
-    , _hrPathMatcher = Nothing
-    }
-
--- | The list of host patterns to match. They must be valid hostnames, except
--- * will match any string of ([a-z0-9-.]*). In that case, * must be the
--- first character and must be followed in the pattern by either - or ..
-hrHosts :: Lens' HostRule [Text]
-hrHosts
-  = lens _hrHosts (\ s a -> s{_hrHosts = a}) . _Default
-      . _Coerce
-
--- | An optional textual description.
-hrDescription :: Lens' HostRule (Maybe Text)
-hrDescription
-  = lens _hrDescription
-      (\ s a -> s{_hrDescription = a})
-
--- | The name of the PathMatcher to use to match the path portion of the URL
--- if the hostRule matches the URL\'s host portion.
-hrPathMatcher :: Lens' HostRule (Maybe Text)
-hrPathMatcher
-  = lens _hrPathMatcher
-      (\ s a -> s{_hrPathMatcher = a})
-
-instance FromJSON HostRule where
-        parseJSON
-          = withObject "HostRule"
-              (\ o ->
-                 HostRule <$>
-                   (o .:? "hosts" .!= mempty) <*> (o .:? "description")
-                     <*> (o .:? "pathMatcher"))
-
-instance ToJSON HostRule where
-        toJSON HostRule{..}
-          = object
-              (catMaybes
-                 [("hosts" .=) <$> _hrHosts,
-                  ("description" .=) <$> _hrDescription,
-                  ("pathMatcher" .=) <$> _hrPathMatcher])
-
--- | A quotas entry.
---
--- /See:/ 'quota' smart constructor.
-data Quota = Quota
-    { _qMetric :: !(Maybe QuotaMetric)
-    , _qLimit  :: !(Maybe (Textual Double))
-    , _qUsage  :: !(Maybe (Textual Double))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Quota' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qMetric'
---
--- * 'qLimit'
---
--- * 'qUsage'
-quota
-    :: Quota
-quota =
-    Quota
-    { _qMetric = Nothing
-    , _qLimit = Nothing
-    , _qUsage = Nothing
-    }
-
--- | [Output Only] Name of the quota metric.
-qMetric :: Lens' Quota (Maybe QuotaMetric)
-qMetric = lens _qMetric (\ s a -> s{_qMetric = a})
-
--- | [Output Only] Quota limit for this metric.
-qLimit :: Lens' Quota (Maybe Double)
-qLimit
-  = lens _qLimit (\ s a -> s{_qLimit = a}) .
-      mapping _Coerce
-
--- | [Output Only] Current usage of this metric.
-qUsage :: Lens' Quota (Maybe Double)
-qUsage
-  = lens _qUsage (\ s a -> s{_qUsage = a}) .
-      mapping _Coerce
-
-instance FromJSON Quota where
-        parseJSON
-          = withObject "Quota"
-              (\ o ->
-                 Quota <$>
-                   (o .:? "metric") <*> (o .:? "limit") <*>
-                     (o .:? "usage"))
-
-instance ToJSON Quota where
-        toJSON Quota{..}
-          = object
-              (catMaybes
-                 [("metric" .=) <$> _qMetric,
-                  ("limit" .=) <$> _qLimit, ("usage" .=) <$> _qUsage])
-
---
--- /See:/ 'instanceGroup' smart constructor.
-data InstanceGroup = InstanceGroup
-    { _iiSize              :: !(Maybe (Textual Int32))
-    , _iiKind              :: !Text
-    , _iiFingerprint       :: !(Maybe (Textual Word8))
-    , _iiNetwork           :: !(Maybe Text)
-    , _iiZone              :: !(Maybe Text)
-    , _iiSelfLink          :: !(Maybe Text)
-    , _iiName              :: !(Maybe Text)
-    , _iiCreationTimestamp :: !(Maybe Text)
-    , _iiId                :: !(Maybe (Textual Word64))
-    , _iiDescription       :: !(Maybe Text)
-    , _iiNamedPorts        :: !(Maybe [NamedPort])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iiSize'
---
--- * 'iiKind'
---
--- * 'iiFingerprint'
---
--- * 'iiNetwork'
---
--- * 'iiZone'
---
--- * 'iiSelfLink'
---
--- * 'iiName'
---
--- * 'iiCreationTimestamp'
---
--- * 'iiId'
---
--- * 'iiDescription'
---
--- * 'iiNamedPorts'
-instanceGroup
-    :: InstanceGroup
-instanceGroup =
-    InstanceGroup
-    { _iiSize = Nothing
-    , _iiKind = "compute#instanceGroup"
-    , _iiFingerprint = Nothing
-    , _iiNetwork = Nothing
-    , _iiZone = Nothing
-    , _iiSelfLink = Nothing
-    , _iiName = Nothing
-    , _iiCreationTimestamp = Nothing
-    , _iiId = Nothing
-    , _iiDescription = Nothing
-    , _iiNamedPorts = Nothing
-    }
-
--- | [Output Only] The total number of instances in the instance group.
-iiSize :: Lens' InstanceGroup (Maybe Int32)
-iiSize
-  = lens _iiSize (\ s a -> s{_iiSize = a}) .
-      mapping _Coerce
-
--- | [Output Only] The resource type, which is always compute#instanceGroup
--- for instance groups.
-iiKind :: Lens' InstanceGroup Text
-iiKind = lens _iiKind (\ s a -> s{_iiKind = a})
-
--- | [Output Only] The fingerprint of the named ports. The system uses this
--- fingerprint to detect conflicts when multiple users change the named
--- ports concurrently.
-iiFingerprint :: Lens' InstanceGroup (Maybe Word8)
-iiFingerprint
-  = lens _iiFingerprint
-      (\ s a -> s{_iiFingerprint = a})
-      . mapping _Coerce
-
--- | [Output Only] The URL of the network to which all instances in the
--- instance group belong.
-iiNetwork :: Lens' InstanceGroup (Maybe Text)
-iiNetwork
-  = lens _iiNetwork (\ s a -> s{_iiNetwork = a})
-
--- | [Output Only] The URL of the zone where the instance group is located.
-iiZone :: Lens' InstanceGroup (Maybe Text)
-iiZone = lens _iiZone (\ s a -> s{_iiZone = a})
-
--- | [Output Only] The URL for this instance group. The server generates this
--- URL.
-iiSelfLink :: Lens' InstanceGroup (Maybe Text)
-iiSelfLink
-  = lens _iiSelfLink (\ s a -> s{_iiSelfLink = a})
-
--- | The name of the instance group. The name must be 1-63 characters long,
--- and comply with RFC1035.
-iiName :: Lens' InstanceGroup (Maybe Text)
-iiName = lens _iiName (\ s a -> s{_iiName = a})
-
--- | [Output Only] The creation timestamp for this instance group in RFC3339
--- text format.
-iiCreationTimestamp :: Lens' InstanceGroup (Maybe Text)
-iiCreationTimestamp
-  = lens _iiCreationTimestamp
-      (\ s a -> s{_iiCreationTimestamp = a})
-
--- | [Output Only] A unique identifier for this resource type. The server
--- generates this identifier.
-iiId :: Lens' InstanceGroup (Maybe Word64)
-iiId
-  = lens _iiId (\ s a -> s{_iiId = a}) .
-      mapping _Coerce
-
--- | An optional text description for the instance group.
-iiDescription :: Lens' InstanceGroup (Maybe Text)
-iiDescription
-  = lens _iiDescription
-      (\ s a -> s{_iiDescription = a})
-
--- | Assigns a name to a port number. For example: {name: \"http\", port: 80}
--- This allows the system to reference ports by the assigned name instead
--- of a port number. Named ports can also contain multiple ports. For
--- example: [{name: \"http\", port: 80},{name: \"http\", port: 8080}] Named
--- ports apply to all instances in this instance group.
-iiNamedPorts :: Lens' InstanceGroup [NamedPort]
-iiNamedPorts
-  = lens _iiNamedPorts (\ s a -> s{_iiNamedPorts = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON InstanceGroup where
-        parseJSON
-          = withObject "InstanceGroup"
-              (\ o ->
-                 InstanceGroup <$>
-                   (o .:? "size") <*>
-                     (o .:? "kind" .!= "compute#instanceGroup")
-                     <*> (o .:? "fingerprint")
-                     <*> (o .:? "network")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description")
-                     <*> (o .:? "namedPorts" .!= mempty))
-
-instance ToJSON InstanceGroup where
-        toJSON InstanceGroup{..}
-          = object
-              (catMaybes
-                 [("size" .=) <$> _iiSize, Just ("kind" .= _iiKind),
-                  ("fingerprint" .=) <$> _iiFingerprint,
-                  ("network" .=) <$> _iiNetwork,
-                  ("zone" .=) <$> _iiZone,
-                  ("selfLink" .=) <$> _iiSelfLink,
-                  ("name" .=) <$> _iiName,
-                  ("creationTimestamp" .=) <$> _iiCreationTimestamp,
-                  ("id" .=) <$> _iiId,
-                  ("description" .=) <$> _iiDescription,
-                  ("namedPorts" .=) <$> _iiNamedPorts])
-
--- | Contains a list of Snapshot resources.
---
--- /See:/ 'snapshotList' smart constructor.
-data SnapshotList = SnapshotList
-    { _slNextPageToken :: !(Maybe Text)
-    , _slKind          :: !Text
-    , _slItems         :: !(Maybe [Snapshot])
-    , _slSelfLink      :: !(Maybe Text)
-    , _slId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'slNextPageToken'
---
--- * 'slKind'
---
--- * 'slItems'
---
--- * 'slSelfLink'
---
--- * 'slId'
-snapshotList
-    :: SnapshotList
-snapshotList =
-    SnapshotList
-    { _slNextPageToken = Nothing
-    , _slKind = "compute#snapshotList"
-    , _slItems = Nothing
-    , _slSelfLink = Nothing
-    , _slId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-slNextPageToken :: Lens' SnapshotList (Maybe Text)
-slNextPageToken
-  = lens _slNextPageToken
-      (\ s a -> s{_slNextPageToken = a})
-
--- | Type of resource.
-slKind :: Lens' SnapshotList Text
-slKind = lens _slKind (\ s a -> s{_slKind = a})
-
--- | A list of Snapshot resources.
-slItems :: Lens' SnapshotList [Snapshot]
-slItems
-  = lens _slItems (\ s a -> s{_slItems = a}) . _Default
-      . _Coerce
-
--- | [Output Only] Server-defined URL for this resource.
-slSelfLink :: Lens' SnapshotList (Maybe Text)
-slSelfLink
-  = lens _slSelfLink (\ s a -> s{_slSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-slId :: Lens' SnapshotList (Maybe Text)
-slId = lens _slId (\ s a -> s{_slId = a})
-
-instance FromJSON SnapshotList where
-        parseJSON
-          = withObject "SnapshotList"
-              (\ o ->
-                 SnapshotList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#snapshotList")
-                     <*> (o .:? "items" .!= mempty)
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON SnapshotList where
-        toJSON SnapshotList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _slNextPageToken,
-                  Just ("kind" .= _slKind), ("items" .=) <$> _slItems,
-                  ("selfLink" .=) <$> _slSelfLink,
-                  ("id" .=) <$> _slId])
-
---
--- /See:/ 'testFailure' smart constructor.
-data TestFailure = TestFailure
-    { _tfPath            :: !(Maybe Text)
-    , _tfExpectedService :: !(Maybe Text)
-    , _tfHost            :: !(Maybe Text)
-    , _tfActualService   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TestFailure' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tfPath'
---
--- * 'tfExpectedService'
---
--- * 'tfHost'
---
--- * 'tfActualService'
-testFailure
-    :: TestFailure
-testFailure =
-    TestFailure
-    { _tfPath = Nothing
-    , _tfExpectedService = Nothing
-    , _tfHost = Nothing
-    , _tfActualService = Nothing
-    }
-
-tfPath :: Lens' TestFailure (Maybe Text)
-tfPath = lens _tfPath (\ s a -> s{_tfPath = a})
-
-tfExpectedService :: Lens' TestFailure (Maybe Text)
-tfExpectedService
-  = lens _tfExpectedService
-      (\ s a -> s{_tfExpectedService = a})
-
-tfHost :: Lens' TestFailure (Maybe Text)
-tfHost = lens _tfHost (\ s a -> s{_tfHost = a})
-
-tfActualService :: Lens' TestFailure (Maybe Text)
-tfActualService
-  = lens _tfActualService
-      (\ s a -> s{_tfActualService = a})
-
-instance FromJSON TestFailure where
-        parseJSON
-          = withObject "TestFailure"
-              (\ o ->
-                 TestFailure <$>
-                   (o .:? "path") <*> (o .:? "expectedService") <*>
-                     (o .:? "host")
-                     <*> (o .:? "actualService"))
-
-instance ToJSON TestFailure where
-        toJSON TestFailure{..}
-          = object
-              (catMaybes
-                 [("path" .=) <$> _tfPath,
-                  ("expectedService" .=) <$> _tfExpectedService,
-                  ("host" .=) <$> _tfHost,
-                  ("actualService" .=) <$> _tfActualService])
-
--- | An instance\'s serial console output.
---
--- /See:/ 'serialPortOutput' smart constructor.
-data SerialPortOutput = SerialPortOutput
-    { _spoContents :: !(Maybe Text)
-    , _spoKind     :: !Text
-    , _spoSelfLink :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SerialPortOutput' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'spoContents'
---
--- * 'spoKind'
---
--- * 'spoSelfLink'
-serialPortOutput
-    :: SerialPortOutput
-serialPortOutput =
-    SerialPortOutput
-    { _spoContents = Nothing
-    , _spoKind = "compute#serialPortOutput"
-    , _spoSelfLink = Nothing
-    }
-
--- | [Output Only] The contents of the console output.
-spoContents :: Lens' SerialPortOutput (Maybe Text)
-spoContents
-  = lens _spoContents (\ s a -> s{_spoContents = a})
-
--- | [Output Only] Type of the resource. Always compute#serialPortOutput for
--- serial port output.
-spoKind :: Lens' SerialPortOutput Text
-spoKind = lens _spoKind (\ s a -> s{_spoKind = a})
-
--- | [Output Only] Server defined URL for the resource.
-spoSelfLink :: Lens' SerialPortOutput (Maybe Text)
-spoSelfLink
-  = lens _spoSelfLink (\ s a -> s{_spoSelfLink = a})
-
-instance FromJSON SerialPortOutput where
-        parseJSON
-          = withObject "SerialPortOutput"
-              (\ o ->
-                 SerialPortOutput <$>
-                   (o .:? "contents") <*>
-                     (o .:? "kind" .!= "compute#serialPortOutput")
-                     <*> (o .:? "selfLink"))
-
-instance ToJSON SerialPortOutput where
-        toJSON SerialPortOutput{..}
-          = object
-              (catMaybes
-                 [("contents" .=) <$> _spoContents,
-                  Just ("kind" .= _spoKind),
-                  ("selfLink" .=) <$> _spoSelfLink])
-
---
--- /See:/ 'targetVPNGatewayAggregatedList' smart constructor.
-data TargetVPNGatewayAggregatedList = TargetVPNGatewayAggregatedList
-    { _tvgalNextPageToken :: !(Maybe Text)
-    , _tvgalKind          :: !Text
-    , _tvgalItems         :: !(Maybe TargetVPNGatewayAggregatedListItems)
-    , _tvgalSelfLink      :: !(Maybe Text)
-    , _tvgalId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGatewayAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvgalNextPageToken'
---
--- * 'tvgalKind'
---
--- * 'tvgalItems'
---
--- * 'tvgalSelfLink'
---
--- * 'tvgalId'
-targetVPNGatewayAggregatedList
-    :: TargetVPNGatewayAggregatedList
-targetVPNGatewayAggregatedList =
-    TargetVPNGatewayAggregatedList
-    { _tvgalNextPageToken = Nothing
-    , _tvgalKind = "compute#targetVpnGatewayAggregatedList"
-    , _tvgalItems = Nothing
-    , _tvgalSelfLink = Nothing
-    , _tvgalId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-tvgalNextPageToken :: Lens' TargetVPNGatewayAggregatedList (Maybe Text)
-tvgalNextPageToken
-  = lens _tvgalNextPageToken
-      (\ s a -> s{_tvgalNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#targetVpnGateway for
--- target VPN gateways.
-tvgalKind :: Lens' TargetVPNGatewayAggregatedList Text
-tvgalKind
-  = lens _tvgalKind (\ s a -> s{_tvgalKind = a})
-
--- | A map of scoped target vpn gateway lists.
-tvgalItems :: Lens' TargetVPNGatewayAggregatedList (Maybe TargetVPNGatewayAggregatedListItems)
-tvgalItems
-  = lens _tvgalItems (\ s a -> s{_tvgalItems = a})
-
--- | [Output Only] Server-defined URL for the resource.
-tvgalSelfLink :: Lens' TargetVPNGatewayAggregatedList (Maybe Text)
-tvgalSelfLink
-  = lens _tvgalSelfLink
-      (\ s a -> s{_tvgalSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource. Defined by the server.
-tvgalId :: Lens' TargetVPNGatewayAggregatedList (Maybe Text)
-tvgalId = lens _tvgalId (\ s a -> s{_tvgalId = a})
-
-instance FromJSON TargetVPNGatewayAggregatedList
-         where
-        parseJSON
-          = withObject "TargetVPNGatewayAggregatedList"
-              (\ o ->
-                 TargetVPNGatewayAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!=
-                        "compute#targetVpnGatewayAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON TargetVPNGatewayAggregatedList where
-        toJSON TargetVPNGatewayAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _tvgalNextPageToken,
-                  Just ("kind" .= _tvgalKind),
-                  ("items" .=) <$> _tvgalItems,
-                  ("selfLink" .=) <$> _tvgalSelfLink,
-                  ("id" .=) <$> _tvgalId])
-
---
--- /See:/ 'metadataItemsItem' smart constructor.
-data MetadataItemsItem = MetadataItemsItem
-    { _miiValue :: !(Maybe Text)
-    , _miiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MetadataItemsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miiValue'
---
--- * 'miiKey'
-metadataItemsItem
-    :: MetadataItemsItem
-metadataItemsItem =
-    MetadataItemsItem
-    { _miiValue = Nothing
-    , _miiKey = Nothing
-    }
-
--- | Value for the metadata entry. These are free-form strings, and only have
--- meaning as interpreted by the image running in the instance. The only
--- restriction placed on values is that their size must be less than or
--- equal to 32768 bytes.
-miiValue :: Lens' MetadataItemsItem (Maybe Text)
-miiValue = lens _miiValue (\ s a -> s{_miiValue = a})
-
--- | Key for the metadata entry. Keys must conform to the following regexp:
--- [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected
--- as part of a URL in the metadata server. Additionally, to avoid
--- ambiguity, keys must not conflict with any other metadata keys for the
--- project.
-miiKey :: Lens' MetadataItemsItem (Maybe Text)
-miiKey = lens _miiKey (\ s a -> s{_miiKey = a})
-
-instance FromJSON MetadataItemsItem where
-        parseJSON
-          = withObject "MetadataItemsItem"
-              (\ o ->
-                 MetadataItemsItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON MetadataItemsItem where
-        toJSON MetadataItemsItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _miiValue, ("key" .=) <$> _miiKey])
-
--- | A TargetHttpsProxy resource. This resource defines an HTTPS proxy.
---
--- /See:/ 'targetHTTPSProxy' smart constructor.
-data TargetHTTPSProxy = TargetHTTPSProxy
-    { _thpURLMap            :: !(Maybe Text)
-    , _thpSSLCertificates   :: !(Maybe [Text])
-    , _thpKind              :: !Text
-    , _thpSelfLink          :: !(Maybe Text)
-    , _thpName              :: !(Maybe Text)
-    , _thpCreationTimestamp :: !(Maybe Text)
-    , _thpId                :: !(Maybe (Textual Word64))
-    , _thpDescription       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetHTTPSProxy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'thpURLMap'
---
--- * 'thpSSLCertificates'
---
--- * 'thpKind'
---
--- * 'thpSelfLink'
---
--- * 'thpName'
---
--- * 'thpCreationTimestamp'
---
--- * 'thpId'
---
--- * 'thpDescription'
-targetHTTPSProxy
-    :: TargetHTTPSProxy
-targetHTTPSProxy =
-    TargetHTTPSProxy
-    { _thpURLMap = Nothing
-    , _thpSSLCertificates = Nothing
-    , _thpKind = "compute#targetHttpsProxy"
-    , _thpSelfLink = Nothing
-    , _thpName = Nothing
-    , _thpCreationTimestamp = Nothing
-    , _thpId = Nothing
-    , _thpDescription = Nothing
-    }
-
--- | URL to the UrlMap resource that defines the mapping from URL to the
--- BackendService.
-thpURLMap :: Lens' TargetHTTPSProxy (Maybe Text)
-thpURLMap
-  = lens _thpURLMap (\ s a -> s{_thpURLMap = a})
-
--- | URLs to SslCertificate resources that are used to authenticate
--- connections to Backends. Currently exactly one SSL certificate must be
--- specified.
-thpSSLCertificates :: Lens' TargetHTTPSProxy [Text]
-thpSSLCertificates
-  = lens _thpSSLCertificates
-      (\ s a -> s{_thpSSLCertificates = a})
-      . _Default
-      . _Coerce
-
--- | Type of the resource.
-thpKind :: Lens' TargetHTTPSProxy Text
-thpKind = lens _thpKind (\ s a -> s{_thpKind = a})
-
--- | [Output Only] Server-defined URL for the resource.
-thpSelfLink :: Lens' TargetHTTPSProxy (Maybe Text)
-thpSelfLink
-  = lens _thpSelfLink (\ s a -> s{_thpSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-thpName :: Lens' TargetHTTPSProxy (Maybe Text)
-thpName = lens _thpName (\ s a -> s{_thpName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-thpCreationTimestamp :: Lens' TargetHTTPSProxy (Maybe Text)
-thpCreationTimestamp
-  = lens _thpCreationTimestamp
-      (\ s a -> s{_thpCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-thpId :: Lens' TargetHTTPSProxy (Maybe Word64)
-thpId
-  = lens _thpId (\ s a -> s{_thpId = a}) .
-      mapping _Coerce
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-thpDescription :: Lens' TargetHTTPSProxy (Maybe Text)
-thpDescription
-  = lens _thpDescription
-      (\ s a -> s{_thpDescription = a})
-
-instance FromJSON TargetHTTPSProxy where
-        parseJSON
-          = withObject "TargetHTTPSProxy"
-              (\ o ->
-                 TargetHTTPSProxy <$>
-                   (o .:? "urlMap") <*>
-                     (o .:? "sslCertificates" .!= mempty)
-                     <*> (o .:? "kind" .!= "compute#targetHttpsProxy")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "description"))
-
-instance ToJSON TargetHTTPSProxy where
-        toJSON TargetHTTPSProxy{..}
-          = object
-              (catMaybes
-                 [("urlMap" .=) <$> _thpURLMap,
-                  ("sslCertificates" .=) <$> _thpSSLCertificates,
-                  Just ("kind" .= _thpKind),
-                  ("selfLink" .=) <$> _thpSelfLink,
-                  ("name" .=) <$> _thpName,
-                  ("creationTimestamp" .=) <$> _thpCreationTimestamp,
-                  ("id" .=) <$> _thpId,
-                  ("description" .=) <$> _thpDescription])
-
---
--- /See:/ 'targetVPNGatewaysScopedList' smart constructor.
-data TargetVPNGatewaysScopedList = TargetVPNGatewaysScopedList
-    { _tvgslTargetVPNGateways :: !(Maybe [TargetVPNGateway])
-    , _tvgslWarning           :: !(Maybe TargetVPNGatewaysScopedListWarning)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetVPNGatewaysScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tvgslTargetVPNGateways'
---
--- * 'tvgslWarning'
-targetVPNGatewaysScopedList
-    :: TargetVPNGatewaysScopedList
-targetVPNGatewaysScopedList =
-    TargetVPNGatewaysScopedList
-    { _tvgslTargetVPNGateways = Nothing
-    , _tvgslWarning = Nothing
-    }
-
--- | [Output Only] List of target vpn gateways contained in this scope.
-tvgslTargetVPNGateways :: Lens' TargetVPNGatewaysScopedList [TargetVPNGateway]
-tvgslTargetVPNGateways
-  = lens _tvgslTargetVPNGateways
-      (\ s a -> s{_tvgslTargetVPNGateways = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Informational warning which replaces the list of addresses
--- when the list is empty.
-tvgslWarning :: Lens' TargetVPNGatewaysScopedList (Maybe TargetVPNGatewaysScopedListWarning)
-tvgslWarning
-  = lens _tvgslWarning (\ s a -> s{_tvgslWarning = a})
-
-instance FromJSON TargetVPNGatewaysScopedList where
-        parseJSON
-          = withObject "TargetVPNGatewaysScopedList"
-              (\ o ->
-                 TargetVPNGatewaysScopedList <$>
-                   (o .:? "targetVpnGateways" .!= mempty) <*>
-                     (o .:? "warning"))
-
-instance ToJSON TargetVPNGatewaysScopedList where
-        toJSON TargetVPNGatewaysScopedList{..}
-          = object
-              (catMaybes
-                 [("targetVpnGateways" .=) <$>
-                    _tvgslTargetVPNGateways,
-                  ("warning" .=) <$> _tvgslWarning])
-
--- | An access configuration attached to an instance\'s network interface.
---
--- /See:/ 'accessConfig' smart constructor.
-data AccessConfig = AccessConfig
-    { _acKind  :: !Text
-    , _acName  :: !(Maybe Text)
-    , _acNATIP :: !(Maybe Text)
-    , _acType  :: !AccessConfigType
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccessConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acKind'
---
--- * 'acName'
---
--- * 'acNATIP'
---
--- * 'acType'
-accessConfig
-    :: AccessConfig
-accessConfig =
-    AccessConfig
-    { _acKind = "compute#accessConfig"
-    , _acName = Nothing
-    , _acNATIP = Nothing
-    , _acType = OneToOneNAT
-    }
-
--- | [Output Only] Type of the resource. Always compute#accessConfig for
--- access configs.
-acKind :: Lens' AccessConfig Text
-acKind = lens _acKind (\ s a -> s{_acKind = a})
-
--- | Name of this access configuration.
-acName :: Lens' AccessConfig (Maybe Text)
-acName = lens _acName (\ s a -> s{_acName = a})
-
--- | An external IP address associated with this instance. Specify an unused
--- static external IP address available to the project or leave this field
--- undefined to use an IP from a shared ephemeral IP address pool. If you
--- specify a static external IP address, it must live in the same region as
--- the zone of the instance.
-acNATIP :: Lens' AccessConfig (Maybe Text)
-acNATIP = lens _acNATIP (\ s a -> s{_acNATIP = a})
-
--- | The type of configuration. The default and only option is
--- ONE_TO_ONE_NAT.
-acType :: Lens' AccessConfig AccessConfigType
-acType = lens _acType (\ s a -> s{_acType = a})
-
-instance FromJSON AccessConfig where
-        parseJSON
-          = withObject "AccessConfig"
-              (\ o ->
-                 AccessConfig <$>
-                   (o .:? "kind" .!= "compute#accessConfig") <*>
-                     (o .:? "name")
-                     <*> (o .:? "natIP")
-                     <*> (o .:? "type" .!= OneToOneNAT))
-
-instance ToJSON AccessConfig where
-        toJSON AccessConfig{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _acKind), ("name" .=) <$> _acName,
-                  ("natIP" .=) <$> _acNATIP, Just ("type" .= _acType)])
-
---
--- /See:/ 'managedInstanceLastAttemptErrorsErrorsItem' smart constructor.
-data ManagedInstanceLastAttemptErrorsErrorsItem = ManagedInstanceLastAttemptErrorsErrorsItem
-    { _milaeeiLocation :: !(Maybe Text)
-    , _milaeeiCode     :: !(Maybe Text)
-    , _milaeeiMessage  :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ManagedInstanceLastAttemptErrorsErrorsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'milaeeiLocation'
---
--- * 'milaeeiCode'
---
--- * 'milaeeiMessage'
-managedInstanceLastAttemptErrorsErrorsItem
-    :: ManagedInstanceLastAttemptErrorsErrorsItem
-managedInstanceLastAttemptErrorsErrorsItem =
-    ManagedInstanceLastAttemptErrorsErrorsItem
-    { _milaeeiLocation = Nothing
-    , _milaeeiCode = Nothing
-    , _milaeeiMessage = Nothing
-    }
-
--- | [Output Only] Indicates the field in the request which caused the error.
--- This property is optional.
-milaeeiLocation :: Lens' ManagedInstanceLastAttemptErrorsErrorsItem (Maybe Text)
-milaeeiLocation
-  = lens _milaeeiLocation
-      (\ s a -> s{_milaeeiLocation = a})
-
--- | [Output Only] The error type identifier for this error.
-milaeeiCode :: Lens' ManagedInstanceLastAttemptErrorsErrorsItem (Maybe Text)
-milaeeiCode
-  = lens _milaeeiCode (\ s a -> s{_milaeeiCode = a})
-
--- | [Output Only] An optional, human-readable error message.
-milaeeiMessage :: Lens' ManagedInstanceLastAttemptErrorsErrorsItem (Maybe Text)
-milaeeiMessage
-  = lens _milaeeiMessage
-      (\ s a -> s{_milaeeiMessage = a})
-
-instance FromJSON
-         ManagedInstanceLastAttemptErrorsErrorsItem where
-        parseJSON
-          = withObject
-              "ManagedInstanceLastAttemptErrorsErrorsItem"
-              (\ o ->
-                 ManagedInstanceLastAttemptErrorsErrorsItem <$>
-                   (o .:? "location") <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON
-         ManagedInstanceLastAttemptErrorsErrorsItem where
-        toJSON ManagedInstanceLastAttemptErrorsErrorsItem{..}
-          = object
-              (catMaybes
-                 [("location" .=) <$> _milaeeiLocation,
-                  ("code" .=) <$> _milaeeiCode,
-                  ("message" .=) <$> _milaeeiMessage])
-
---
--- /See:/ 'instancesScopedListWarningDataItem' smart constructor.
-data InstancesScopedListWarningDataItem = InstancesScopedListWarningDataItem
-    { _islwdiValue :: !(Maybe Text)
-    , _islwdiKey   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstancesScopedListWarningDataItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'islwdiValue'
---
--- * 'islwdiKey'
-instancesScopedListWarningDataItem
-    :: InstancesScopedListWarningDataItem
-instancesScopedListWarningDataItem =
-    InstancesScopedListWarningDataItem
-    { _islwdiValue = Nothing
-    , _islwdiKey = Nothing
-    }
-
--- | [Output Only] A warning data value corresponding to the key.
-islwdiValue :: Lens' InstancesScopedListWarningDataItem (Maybe Text)
-islwdiValue
-  = lens _islwdiValue (\ s a -> s{_islwdiValue = a})
-
--- | [Output Only] A key for the warning data.
-islwdiKey :: Lens' InstancesScopedListWarningDataItem (Maybe Text)
-islwdiKey
-  = lens _islwdiKey (\ s a -> s{_islwdiKey = a})
-
-instance FromJSON InstancesScopedListWarningDataItem
-         where
-        parseJSON
-          = withObject "InstancesScopedListWarningDataItem"
-              (\ o ->
-                 InstancesScopedListWarningDataItem <$>
-                   (o .:? "value") <*> (o .:? "key"))
-
-instance ToJSON InstancesScopedListWarningDataItem
-         where
-        toJSON InstancesScopedListWarningDataItem{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _islwdiValue,
-                  ("key" .=) <$> _islwdiKey])
-
--- | A BackendService resource. This resource defines a group of backend
--- virtual machines together with their serving capacity.
---
--- /See:/ 'backendService' smart constructor.
-data BackendService = BackendService
-    { _bsBackends          :: !(Maybe [Backend])
-    , _bsKind              :: !Text
-    , _bsFingerprint       :: !(Maybe (Textual Word8))
-    , _bsProtocol          :: !(Maybe BackendServiceProtocol)
-    , _bsSelfLink          :: !(Maybe Text)
-    , _bsName              :: !(Maybe Text)
-    , _bsCreationTimestamp :: !(Maybe Text)
-    , _bsId                :: !(Maybe (Textual Word64))
-    , _bsTimeoutSec        :: !(Maybe (Textual Int32))
-    , _bsDescription       :: !(Maybe Text)
-    , _bsPortName          :: !(Maybe Text)
-    , _bsHealthChecks      :: !(Maybe [Text])
-    , _bsPort              :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BackendService' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bsBackends'
---
--- * 'bsKind'
---
--- * 'bsFingerprint'
---
--- * 'bsProtocol'
---
--- * 'bsSelfLink'
---
--- * 'bsName'
---
--- * 'bsCreationTimestamp'
---
--- * 'bsId'
---
--- * 'bsTimeoutSec'
---
--- * 'bsDescription'
---
--- * 'bsPortName'
---
--- * 'bsHealthChecks'
---
--- * 'bsPort'
-backendService
-    :: BackendService
-backendService =
-    BackendService
-    { _bsBackends = Nothing
-    , _bsKind = "compute#backendService"
-    , _bsFingerprint = Nothing
-    , _bsProtocol = Nothing
-    , _bsSelfLink = Nothing
-    , _bsName = Nothing
-    , _bsCreationTimestamp = Nothing
-    , _bsId = Nothing
-    , _bsTimeoutSec = Nothing
-    , _bsDescription = Nothing
-    , _bsPortName = Nothing
-    , _bsHealthChecks = Nothing
-    , _bsPort = Nothing
-    }
-
--- | The list of backends that serve this BackendService.
-bsBackends :: Lens' BackendService [Backend]
-bsBackends
-  = lens _bsBackends (\ s a -> s{_bsBackends = a}) .
-      _Default
-      . _Coerce
-
--- | [Output Only] Type of resource. Always compute#backendService for
--- backend services.
-bsKind :: Lens' BackendService Text
-bsKind = lens _bsKind (\ s a -> s{_bsKind = a})
-
--- | Fingerprint of this resource. A hash of the contents stored in this
--- object. This field is used in optimistic locking. This field will be
--- ignored when inserting a BackendService. An up-to-date fingerprint must
--- be provided in order to update the BackendService.
-bsFingerprint :: Lens' BackendService (Maybe Word8)
-bsFingerprint
-  = lens _bsFingerprint
-      (\ s a -> s{_bsFingerprint = a})
-      . mapping _Coerce
-
-bsProtocol :: Lens' BackendService (Maybe BackendServiceProtocol)
-bsProtocol
-  = lens _bsProtocol (\ s a -> s{_bsProtocol = a})
-
--- | [Output Only] Server-defined URL for the resource.
-bsSelfLink :: Lens' BackendService (Maybe Text)
-bsSelfLink
-  = lens _bsSelfLink (\ s a -> s{_bsSelfLink = a})
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-bsName :: Lens' BackendService (Maybe Text)
-bsName = lens _bsName (\ s a -> s{_bsName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-bsCreationTimestamp :: Lens' BackendService (Maybe Text)
-bsCreationTimestamp
-  = lens _bsCreationTimestamp
-      (\ s a -> s{_bsCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-bsId :: Lens' BackendService (Maybe Word64)
-bsId
-  = lens _bsId (\ s a -> s{_bsId = a}) .
-      mapping _Coerce
-
--- | How many seconds to wait for the backend before considering it a failed
--- request. Default is 30 seconds.
-bsTimeoutSec :: Lens' BackendService (Maybe Int32)
-bsTimeoutSec
-  = lens _bsTimeoutSec (\ s a -> s{_bsTimeoutSec = a})
-      . mapping _Coerce
-
--- | An optional textual description of the resource. Provided by the client
--- when the resource is created.
-bsDescription :: Lens' BackendService (Maybe Text)
-bsDescription
-  = lens _bsDescription
-      (\ s a -> s{_bsDescription = a})
-
--- | Name of backend port. The same name should appear in the resource views
--- referenced by this service. Required.
-bsPortName :: Lens' BackendService (Maybe Text)
-bsPortName
-  = lens _bsPortName (\ s a -> s{_bsPortName = a})
-
--- | The list of URLs to the HttpHealthCheck resource for health checking
--- this BackendService. Currently at most one health check can be
--- specified, and a health check is required.
-bsHealthChecks :: Lens' BackendService [Text]
-bsHealthChecks
-  = lens _bsHealthChecks
-      (\ s a -> s{_bsHealthChecks = a})
-      . _Default
-      . _Coerce
-
--- | Deprecated in favor of port name. The TCP port to connect on the
--- backend. The default value is 80.
-bsPort :: Lens' BackendService (Maybe Int32)
-bsPort
-  = lens _bsPort (\ s a -> s{_bsPort = a}) .
-      mapping _Coerce
-
-instance FromJSON BackendService where
-        parseJSON
-          = withObject "BackendService"
-              (\ o ->
-                 BackendService <$>
-                   (o .:? "backends" .!= mempty) <*>
-                     (o .:? "kind" .!= "compute#backendService")
-                     <*> (o .:? "fingerprint")
-                     <*> (o .:? "protocol")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "timeoutSec")
-                     <*> (o .:? "description")
-                     <*> (o .:? "portName")
-                     <*> (o .:? "healthChecks" .!= mempty)
-                     <*> (o .:? "port"))
-
-instance ToJSON BackendService where
-        toJSON BackendService{..}
-          = object
-              (catMaybes
-                 [("backends" .=) <$> _bsBackends,
-                  Just ("kind" .= _bsKind),
-                  ("fingerprint" .=) <$> _bsFingerprint,
-                  ("protocol" .=) <$> _bsProtocol,
-                  ("selfLink" .=) <$> _bsSelfLink,
-                  ("name" .=) <$> _bsName,
-                  ("creationTimestamp" .=) <$> _bsCreationTimestamp,
-                  ("id" .=) <$> _bsId,
-                  ("timeoutSec" .=) <$> _bsTimeoutSec,
-                  ("description" .=) <$> _bsDescription,
-                  ("portName" .=) <$> _bsPortName,
-                  ("healthChecks" .=) <$> _bsHealthChecks,
-                  ("port" .=) <$> _bsPort])
-
---
--- /See:/ 'instanceMoveRequest' smart constructor.
-data InstanceMoveRequest = InstanceMoveRequest
-    { _imrTargetInstance  :: !(Maybe Text)
-    , _imrDestinationZone :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceMoveRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'imrTargetInstance'
---
--- * 'imrDestinationZone'
-instanceMoveRequest
-    :: InstanceMoveRequest
-instanceMoveRequest =
-    InstanceMoveRequest
-    { _imrTargetInstance = Nothing
-    , _imrDestinationZone = Nothing
-    }
-
--- | The URL of the target instance to move. This can be a full or partial
--- URL. For example, the following are all valid URLs to an instance: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/instances\/instance
--- - projects\/project\/zones\/zone\/instances\/instance -
--- zones\/zone\/instances\/instance
-imrTargetInstance :: Lens' InstanceMoveRequest (Maybe Text)
-imrTargetInstance
-  = lens _imrTargetInstance
-      (\ s a -> s{_imrTargetInstance = a})
-
--- | The URL of the destination zone to move the instance to. This can be a
--- full or partial URL. For example, the following are all valid URLs to a
--- zone: -
--- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone
--- - projects\/project\/zones\/zone - zones\/zone
-imrDestinationZone :: Lens' InstanceMoveRequest (Maybe Text)
-imrDestinationZone
-  = lens _imrDestinationZone
-      (\ s a -> s{_imrDestinationZone = a})
-
-instance FromJSON InstanceMoveRequest where
-        parseJSON
-          = withObject "InstanceMoveRequest"
-              (\ o ->
-                 InstanceMoveRequest <$>
-                   (o .:? "targetInstance") <*>
-                     (o .:? "destinationZone"))
-
-instance ToJSON InstanceMoveRequest where
-        toJSON InstanceMoveRequest{..}
-          = object
-              (catMaybes
-                 [("targetInstance" .=) <$> _imrTargetInstance,
-                  ("destinationZone" .=) <$> _imrDestinationZone])
-
---
--- /See:/ 'instanceGroupsScopedList' smart constructor.
-data InstanceGroupsScopedList = InstanceGroupsScopedList
-    { _igslWarning        :: !(Maybe InstanceGroupsScopedListWarning)
-    , _igslInstanceGroups :: !(Maybe [InstanceGroup])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceGroupsScopedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igslWarning'
---
--- * 'igslInstanceGroups'
-instanceGroupsScopedList
-    :: InstanceGroupsScopedList
-instanceGroupsScopedList =
-    InstanceGroupsScopedList
-    { _igslWarning = Nothing
-    , _igslInstanceGroups = Nothing
-    }
-
--- | [Output Only] An informational warning that replaces the list of
--- instance groups when the list is empty.
-igslWarning :: Lens' InstanceGroupsScopedList (Maybe InstanceGroupsScopedListWarning)
-igslWarning
-  = lens _igslWarning (\ s a -> s{_igslWarning = a})
-
--- | [Output Only] The list of instance groups that are contained in this
--- scope.
-igslInstanceGroups :: Lens' InstanceGroupsScopedList [InstanceGroup]
-igslInstanceGroups
-  = lens _igslInstanceGroups
-      (\ s a -> s{_igslInstanceGroups = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON InstanceGroupsScopedList where
-        parseJSON
-          = withObject "InstanceGroupsScopedList"
-              (\ o ->
-                 InstanceGroupsScopedList <$>
-                   (o .:? "warning") <*>
-                     (o .:? "instanceGroups" .!= mempty))
-
-instance ToJSON InstanceGroupsScopedList where
-        toJSON InstanceGroupsScopedList{..}
-          = object
-              (catMaybes
-                 [("warning" .=) <$> _igslWarning,
-                  ("instanceGroups" .=) <$> _igslInstanceGroups])
-
--- | An HttpsHealthCheck resource. This resource defines a template for how
--- individual instances should be checked for health, via HTTPS.
---
--- /See:/ 'httpsHealthCheck' smart constructor.
-data HTTPSHealthCheck = HTTPSHealthCheck
-    { _hhcHealthyThreshold   :: !(Maybe (Textual Int32))
-    , _hhcKind               :: !Text
-    , _hhcRequestPath        :: !(Maybe Text)
-    , _hhcSelfLink           :: !(Maybe Text)
-    , _hhcCheckIntervalSec   :: !(Maybe (Textual Int32))
-    , _hhcName               :: !(Maybe Text)
-    , _hhcCreationTimestamp  :: !(Maybe Text)
-    , _hhcId                 :: !(Maybe (Textual Word64))
-    , _hhcHost               :: !(Maybe Text)
-    , _hhcTimeoutSec         :: !(Maybe (Textual Int32))
-    , _hhcDescription        :: !(Maybe Text)
-    , _hhcUnhealthyThreshold :: !(Maybe (Textual Int32))
-    , _hhcPort               :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HTTPSHealthCheck' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hhcHealthyThreshold'
---
--- * 'hhcKind'
---
--- * 'hhcRequestPath'
---
--- * 'hhcSelfLink'
---
--- * 'hhcCheckIntervalSec'
---
--- * 'hhcName'
---
--- * 'hhcCreationTimestamp'
---
--- * 'hhcId'
---
--- * 'hhcHost'
---
--- * 'hhcTimeoutSec'
---
--- * 'hhcDescription'
---
--- * 'hhcUnhealthyThreshold'
---
--- * 'hhcPort'
-httpsHealthCheck
-    :: HTTPSHealthCheck
-httpsHealthCheck =
-    HTTPSHealthCheck
-    { _hhcHealthyThreshold = Nothing
-    , _hhcKind = "compute#httpsHealthCheck"
-    , _hhcRequestPath = Nothing
-    , _hhcSelfLink = Nothing
-    , _hhcCheckIntervalSec = Nothing
-    , _hhcName = Nothing
-    , _hhcCreationTimestamp = Nothing
-    , _hhcId = Nothing
-    , _hhcHost = Nothing
-    , _hhcTimeoutSec = Nothing
-    , _hhcDescription = Nothing
-    , _hhcUnhealthyThreshold = Nothing
-    , _hhcPort = Nothing
-    }
-
--- | A so-far unhealthy instance will be marked healthy after this many
--- consecutive successes. The default value is 2.
-hhcHealthyThreshold :: Lens' HTTPSHealthCheck (Maybe Int32)
-hhcHealthyThreshold
-  = lens _hhcHealthyThreshold
-      (\ s a -> s{_hhcHealthyThreshold = a})
-      . mapping _Coerce
-
--- | Type of the resource.
-hhcKind :: Lens' HTTPSHealthCheck Text
-hhcKind = lens _hhcKind (\ s a -> s{_hhcKind = a})
-
--- | The request path of the HTTPS health check request. The default value is
--- \"\/\".
-hhcRequestPath :: Lens' HTTPSHealthCheck (Maybe Text)
-hhcRequestPath
-  = lens _hhcRequestPath
-      (\ s a -> s{_hhcRequestPath = a})
-
--- | [Output Only] Server-defined URL for the resource.
-hhcSelfLink :: Lens' HTTPSHealthCheck (Maybe Text)
-hhcSelfLink
-  = lens _hhcSelfLink (\ s a -> s{_hhcSelfLink = a})
-
--- | How often (in seconds) to send a health check. The default value is 5
--- seconds.
-hhcCheckIntervalSec :: Lens' HTTPSHealthCheck (Maybe Int32)
-hhcCheckIntervalSec
-  = lens _hhcCheckIntervalSec
-      (\ s a -> s{_hhcCheckIntervalSec = a})
-      . mapping _Coerce
-
--- | Name of the resource. Provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-hhcName :: Lens' HTTPSHealthCheck (Maybe Text)
-hhcName = lens _hhcName (\ s a -> s{_hhcName = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-hhcCreationTimestamp :: Lens' HTTPSHealthCheck (Maybe Text)
-hhcCreationTimestamp
-  = lens _hhcCreationTimestamp
-      (\ s a -> s{_hhcCreationTimestamp = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-hhcId :: Lens' HTTPSHealthCheck (Maybe Word64)
-hhcId
-  = lens _hhcId (\ s a -> s{_hhcId = a}) .
-      mapping _Coerce
-
--- | The value of the host header in the HTTPS health check request. If left
--- empty (default value), the public IP on behalf of which this health
--- check is performed will be used.
-hhcHost :: Lens' HTTPSHealthCheck (Maybe Text)
-hhcHost = lens _hhcHost (\ s a -> s{_hhcHost = a})
-
--- | How long (in seconds) to wait before claiming failure. The default value
--- is 5 seconds. It is invalid for timeoutSec to have a greater value than
--- checkIntervalSec.
-hhcTimeoutSec :: Lens' HTTPSHealthCheck (Maybe Int32)
-hhcTimeoutSec
-  = lens _hhcTimeoutSec
-      (\ s a -> s{_hhcTimeoutSec = a})
-      . mapping _Coerce
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-hhcDescription :: Lens' HTTPSHealthCheck (Maybe Text)
-hhcDescription
-  = lens _hhcDescription
-      (\ s a -> s{_hhcDescription = a})
-
--- | A so-far healthy instance will be marked unhealthy after this many
--- consecutive failures. The default value is 2.
-hhcUnhealthyThreshold :: Lens' HTTPSHealthCheck (Maybe Int32)
-hhcUnhealthyThreshold
-  = lens _hhcUnhealthyThreshold
-      (\ s a -> s{_hhcUnhealthyThreshold = a})
-      . mapping _Coerce
-
--- | The TCP port number for the HTTPS health check request. The default
--- value is 443.
-hhcPort :: Lens' HTTPSHealthCheck (Maybe Int32)
-hhcPort
-  = lens _hhcPort (\ s a -> s{_hhcPort = a}) .
-      mapping _Coerce
-
-instance FromJSON HTTPSHealthCheck where
-        parseJSON
-          = withObject "HTTPSHealthCheck"
-              (\ o ->
-                 HTTPSHealthCheck <$>
-                   (o .:? "healthyThreshold") <*>
-                     (o .:? "kind" .!= "compute#httpsHealthCheck")
-                     <*> (o .:? "requestPath")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "checkIntervalSec")
-                     <*> (o .:? "name")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "id")
-                     <*> (o .:? "host")
-                     <*> (o .:? "timeoutSec")
-                     <*> (o .:? "description")
-                     <*> (o .:? "unhealthyThreshold")
-                     <*> (o .:? "port"))
-
-instance ToJSON HTTPSHealthCheck where
-        toJSON HTTPSHealthCheck{..}
-          = object
-              (catMaybes
-                 [("healthyThreshold" .=) <$> _hhcHealthyThreshold,
-                  Just ("kind" .= _hhcKind),
-                  ("requestPath" .=) <$> _hhcRequestPath,
-                  ("selfLink" .=) <$> _hhcSelfLink,
-                  ("checkIntervalSec" .=) <$> _hhcCheckIntervalSec,
-                  ("name" .=) <$> _hhcName,
-                  ("creationTimestamp" .=) <$> _hhcCreationTimestamp,
-                  ("id" .=) <$> _hhcId, ("host" .=) <$> _hhcHost,
-                  ("timeoutSec" .=) <$> _hhcTimeoutSec,
-                  ("description" .=) <$> _hhcDescription,
-                  ("unhealthyThreshold" .=) <$> _hhcUnhealthyThreshold,
-                  ("port" .=) <$> _hhcPort])
-
--- | [Output Only] A map of scoped vpn tunnel lists.
---
--- /See:/ 'vpnTunnelAggregatedListItems' smart constructor.
-newtype VPNTunnelAggregatedListItems = VPNTunnelAggregatedListItems
-    { _vtaliAddtional :: HashMap Text VPNTunnelsScopedList
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNTunnelAggregatedListItems' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtaliAddtional'
-vpnTunnelAggregatedListItems
-    :: HashMap Text VPNTunnelsScopedList -- ^ 'vtaliAddtional'
-    -> VPNTunnelAggregatedListItems
-vpnTunnelAggregatedListItems pVtaliAddtional_ =
-    VPNTunnelAggregatedListItems
-    { _vtaliAddtional = _Coerce # pVtaliAddtional_
-    }
-
--- | Name of the scope containing this set of vpn tunnels.
-vtaliAddtional :: Lens' VPNTunnelAggregatedListItems (HashMap Text VPNTunnelsScopedList)
-vtaliAddtional
-  = lens _vtaliAddtional
-      (\ s a -> s{_vtaliAddtional = a})
-      . _Coerce
-
-instance FromJSON VPNTunnelAggregatedListItems where
-        parseJSON
-          = withObject "VPNTunnelAggregatedListItems"
-              (\ o ->
-                 VPNTunnelAggregatedListItems <$> (parseJSONObject o))
-
-instance ToJSON VPNTunnelAggregatedListItems where
-        toJSON = toJSON . _vtaliAddtional
-
--- | A set of instance tags.
---
--- /See:/ 'tags' smart constructor.
-data Tags = Tags
-    { _tFingerprint :: !(Maybe (Textual Word8))
-    , _tItems       :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Tags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tFingerprint'
---
--- * 'tItems'
-tags
-    :: Tags
-tags =
-    Tags
-    { _tFingerprint = Nothing
-    , _tItems = Nothing
-    }
-
--- | Specifies a fingerprint for this request, which is essentially a hash of
--- the metadata\'s contents and used for optimistic locking. The
--- fingerprint is initially generated by Compute Engine and changes after
--- every request to modify or update metadata. You must always provide an
--- up-to-date fingerprint hash in order to update or change metadata. To
--- see the latest fingerprint, make get() request to the instance.
-tFingerprint :: Lens' Tags (Maybe Word8)
-tFingerprint
-  = lens _tFingerprint (\ s a -> s{_tFingerprint = a})
-      . mapping _Coerce
-
--- | An array of tags. Each tag must be 1-63 characters long, and comply with
--- RFC1035.
-tItems :: Lens' Tags [Text]
-tItems
-  = lens _tItems (\ s a -> s{_tItems = a}) . _Default .
-      _Coerce
-
-instance FromJSON Tags where
-        parseJSON
-          = withObject "Tags"
-              (\ o ->
-                 Tags <$>
-                   (o .:? "fingerprint") <*> (o .:? "items" .!= mempty))
-
-instance ToJSON Tags where
-        toJSON Tags{..}
-          = object
-              (catMaybes
-                 [("fingerprint" .=) <$> _tFingerprint,
-                  ("items" .=) <$> _tItems])
-
---
--- /See:/ 'addressAggregatedList' smart constructor.
-data AddressAggregatedList = AddressAggregatedList
-    { _addNextPageToken :: !(Maybe Text)
-    , _addKind          :: !Text
-    , _addItems         :: !(Maybe AddressAggregatedListItems)
-    , _addSelfLink      :: !(Maybe Text)
-    , _addId            :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AddressAggregatedList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'addNextPageToken'
---
--- * 'addKind'
---
--- * 'addItems'
---
--- * 'addSelfLink'
---
--- * 'addId'
-addressAggregatedList
-    :: AddressAggregatedList
-addressAggregatedList =
-    AddressAggregatedList
-    { _addNextPageToken = Nothing
-    , _addKind = "compute#addressAggregatedList"
-    , _addItems = Nothing
-    , _addSelfLink = Nothing
-    , _addId = Nothing
-    }
-
--- | [Output Only] A token used to continue a truncated list request.
-addNextPageToken :: Lens' AddressAggregatedList (Maybe Text)
-addNextPageToken
-  = lens _addNextPageToken
-      (\ s a -> s{_addNextPageToken = a})
-
--- | [Output Only] Type of resource. Always compute#addressAggregatedList for
--- aggregated lists of addresses.
-addKind :: Lens' AddressAggregatedList Text
-addKind = lens _addKind (\ s a -> s{_addKind = a})
-
--- | [Output Only] A map of scoped address lists.
-addItems :: Lens' AddressAggregatedList (Maybe AddressAggregatedListItems)
-addItems = lens _addItems (\ s a -> s{_addItems = a})
-
--- | [Output Only] Server-defined URL for this resource.
-addSelfLink :: Lens' AddressAggregatedList (Maybe Text)
-addSelfLink
-  = lens _addSelfLink (\ s a -> s{_addSelfLink = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-addId :: Lens' AddressAggregatedList (Maybe Text)
-addId = lens _addId (\ s a -> s{_addId = a})
-
-instance FromJSON AddressAggregatedList where
-        parseJSON
-          = withObject "AddressAggregatedList"
-              (\ o ->
-                 AddressAggregatedList <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "kind" .!= "compute#addressAggregatedList")
-                     <*> (o .:? "items")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "id"))
-
-instance ToJSON AddressAggregatedList where
-        toJSON AddressAggregatedList{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _addNextPageToken,
-                  Just ("kind" .= _addKind),
-                  ("items" .=) <$> _addItems,
-                  ("selfLink" .=) <$> _addSelfLink,
-                  ("id" .=) <$> _addId])
-
---
--- /See:/ 'operationWarningsItem' smart constructor.
-data OperationWarningsItem = OperationWarningsItem
-    { _owiData    :: !(Maybe [OperationWarningsItemDataItem])
-    , _owiCode    :: !(Maybe OperationWarningsItemCode)
-    , _owiMessage :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'OperationWarningsItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'owiData'
---
--- * 'owiCode'
---
--- * 'owiMessage'
-operationWarningsItem
-    :: OperationWarningsItem
-operationWarningsItem =
-    OperationWarningsItem
-    { _owiData = Nothing
-    , _owiCode = Nothing
-    , _owiMessage = Nothing
-    }
-
--- | [Output Only] Metadata for this warning in key: value format.
-owiData :: Lens' OperationWarningsItem [OperationWarningsItemDataItem]
-owiData
-  = lens _owiData (\ s a -> s{_owiData = a}) . _Default
-      . _Coerce
-
--- | [Output Only] The warning type identifier for this warning.
-owiCode :: Lens' OperationWarningsItem (Maybe OperationWarningsItemCode)
-owiCode = lens _owiCode (\ s a -> s{_owiCode = a})
-
--- | [Output Only] Optional human-readable details for this warning.
-owiMessage :: Lens' OperationWarningsItem (Maybe Text)
-owiMessage
-  = lens _owiMessage (\ s a -> s{_owiMessage = a})
-
-instance FromJSON OperationWarningsItem where
-        parseJSON
-          = withObject "OperationWarningsItem"
-              (\ o ->
-                 OperationWarningsItem <$>
-                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
-                     (o .:? "message"))
-
-instance ToJSON OperationWarningsItem where
-        toJSON OperationWarningsItem{..}
-          = object
-              (catMaybes
-                 [("data" .=) <$> _owiData, ("code" .=) <$> _owiCode,
-                  ("message" .=) <$> _owiMessage])
-
--- | Message for the expected URL mappings.
---
--- /See:/ 'urlMapTest' smart constructor.
-data URLMapTest = URLMapTest
-    { _umtPath        :: !(Maybe Text)
-    , _umtService     :: !(Maybe Text)
-    , _umtHost        :: !(Maybe Text)
-    , _umtDescription :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'URLMapTest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'umtPath'
---
--- * 'umtService'
---
--- * 'umtHost'
---
--- * 'umtDescription'
-urlMapTest
-    :: URLMapTest
-urlMapTest =
-    URLMapTest
-    { _umtPath = Nothing
-    , _umtService = Nothing
-    , _umtHost = Nothing
-    , _umtDescription = Nothing
-    }
-
--- | Path portion of the URL.
-umtPath :: Lens' URLMapTest (Maybe Text)
-umtPath = lens _umtPath (\ s a -> s{_umtPath = a})
-
--- | Expected BackendService resource the given URL should be mapped to.
-umtService :: Lens' URLMapTest (Maybe Text)
-umtService
-  = lens _umtService (\ s a -> s{_umtService = a})
-
--- | Host portion of the URL.
-umtHost :: Lens' URLMapTest (Maybe Text)
-umtHost = lens _umtHost (\ s a -> s{_umtHost = a})
-
--- | Description of this test case.
-umtDescription :: Lens' URLMapTest (Maybe Text)
-umtDescription
-  = lens _umtDescription
-      (\ s a -> s{_umtDescription = a})
-
-instance FromJSON URLMapTest where
-        parseJSON
-          = withObject "URLMapTest"
-              (\ o ->
-                 URLMapTest <$>
-                   (o .:? "path") <*> (o .:? "service") <*>
-                     (o .:? "host")
-                     <*> (o .:? "description"))
-
-instance ToJSON URLMapTest where
-        toJSON URLMapTest{..}
-          = object
-              (catMaybes
-                 [("path" .=) <$> _umtPath,
-                  ("service" .=) <$> _umtService,
-                  ("host" .=) <$> _umtHost,
-                  ("description" .=) <$> _umtDescription])
-
--- | An Instance resource.
---
--- /See:/ 'instance'' smart constructor.
-data Instance = Instance
-    { _insnStatus            :: !(Maybe InstanceStatus)
-    , _insnServiceAccounts   :: !(Maybe [ServiceAccount])
-    , _insnNetworkInterfaces :: !(Maybe [NetworkInterface])
-    , _insnKind              :: !Text
-    , _insnZone              :: !(Maybe Text)
-    , _insnCPUPlatform       :: !(Maybe Text)
-    , _insnSelfLink          :: !(Maybe Text)
-    , _insnName              :: !(Maybe Text)
-    , _insnStatusMessage     :: !(Maybe Text)
-    , _insnCreationTimestamp :: !(Maybe Text)
-    , _insnMachineType       :: !(Maybe Text)
-    , _insnMetadata          :: !(Maybe Metadata)
-    , _insnId                :: !(Maybe (Textual Word64))
-    , _insnScheduling        :: !(Maybe Scheduling)
-    , _insnDisks             :: !(Maybe [AttachedDisk])
-    , _insnCanIPForward      :: !(Maybe Bool)
-    , _insnDescription       :: !(Maybe Text)
-    , _insnTags              :: !(Maybe Tags)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Instance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'insnStatus'
---
--- * 'insnServiceAccounts'
---
--- * 'insnNetworkInterfaces'
---
--- * 'insnKind'
---
--- * 'insnZone'
---
--- * 'insnCPUPlatform'
---
--- * 'insnSelfLink'
---
--- * 'insnName'
---
--- * 'insnStatusMessage'
---
--- * 'insnCreationTimestamp'
---
--- * 'insnMachineType'
---
--- * 'insnMetadata'
---
--- * 'insnId'
---
--- * 'insnScheduling'
---
--- * 'insnDisks'
---
--- * 'insnCanIPForward'
---
--- * 'insnDescription'
---
--- * 'insnTags'
-instance'
-    :: Instance
-instance' =
-    Instance
-    { _insnStatus = Nothing
-    , _insnServiceAccounts = Nothing
-    , _insnNetworkInterfaces = Nothing
-    , _insnKind = "compute#instance"
-    , _insnZone = Nothing
-    , _insnCPUPlatform = Nothing
-    , _insnSelfLink = Nothing
-    , _insnName = Nothing
-    , _insnStatusMessage = Nothing
-    , _insnCreationTimestamp = Nothing
-    , _insnMachineType = Nothing
-    , _insnMetadata = Nothing
-    , _insnId = Nothing
-    , _insnScheduling = Nothing
-    , _insnDisks = Nothing
-    , _insnCanIPForward = Nothing
-    , _insnDescription = Nothing
-    , _insnTags = Nothing
-    }
-
--- | [Output Only] The status of the instance. One of the following values:
--- PROVISIONING, STAGING, RUNNING, STOPPING, and TERMINATED.
-insnStatus :: Lens' Instance (Maybe InstanceStatus)
-insnStatus
-  = lens _insnStatus (\ s a -> s{_insnStatus = a})
-
--- | A list of service accounts, with their specified scopes, authorized for
--- this instance. Service accounts generate access tokens that can be
--- accessed through the metadata server and used to authenticate
--- applications on the instance. See Authenticating from Google Compute
--- Engine for more information.
-insnServiceAccounts :: Lens' Instance [ServiceAccount]
-insnServiceAccounts
-  = lens _insnServiceAccounts
-      (\ s a -> s{_insnServiceAccounts = a})
-      . _Default
-      . _Coerce
-
--- | An array of configurations for this interface. This specifies how this
--- interface is configured to interact with other network services, such as
--- connecting to the internet.
-insnNetworkInterfaces :: Lens' Instance [NetworkInterface]
-insnNetworkInterfaces
-  = lens _insnNetworkInterfaces
-      (\ s a -> s{_insnNetworkInterfaces = a})
-      . _Default
-      . _Coerce
-
--- | [Output Only] Type of the resource. Always compute#instance for
--- instances.
-insnKind :: Lens' Instance Text
-insnKind = lens _insnKind (\ s a -> s{_insnKind = a})
-
--- | [Output Only] URL of the zone where the instance resides.
-insnZone :: Lens' Instance (Maybe Text)
-insnZone = lens _insnZone (\ s a -> s{_insnZone = a})
-
--- | [Output Only] The CPU platform used by this instance.
-insnCPUPlatform :: Lens' Instance (Maybe Text)
-insnCPUPlatform
-  = lens _insnCPUPlatform
-      (\ s a -> s{_insnCPUPlatform = a})
-
--- | [Output Only] Server defined URL for this resource.
-insnSelfLink :: Lens' Instance (Maybe Text)
-insnSelfLink
-  = lens _insnSelfLink (\ s a -> s{_insnSelfLink = a})
-
--- | Name of the resource; provided by the client when the resource is
--- created. The name must be 1-63 characters long, and comply with RFC1035.
--- Specifically, the name must be 1-63 characters long and match the
--- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
--- character must be a lowercase letter, and all following characters must
--- be a dash, lowercase letter, or digit, except the last character, which
--- cannot be a dash.
-insnName :: Lens' Instance (Maybe Text)
-insnName = lens _insnName (\ s a -> s{_insnName = a})
-
--- | [Output Only] An optional, human-readable explanation of the status.
-insnStatusMessage :: Lens' Instance (Maybe Text)
-insnStatusMessage
-  = lens _insnStatusMessage
-      (\ s a -> s{_insnStatusMessage = a})
-
--- | [Output Only] Creation timestamp in RFC3339 text format.
-insnCreationTimestamp :: Lens' Instance (Maybe Text)
-insnCreationTimestamp
-  = lens _insnCreationTimestamp
-      (\ s a -> s{_insnCreationTimestamp = a})
-
--- | Full or partial URL of the machine type resource to use for this
--- instance. This is provided by the client when the instance is created.
--- For example, the following is a valid partial url:
--- zones\/zone\/machineTypes\/machine-type
-insnMachineType :: Lens' Instance (Maybe Text)
-insnMachineType
-  = lens _insnMachineType
-      (\ s a -> s{_insnMachineType = a})
-
--- | The metadata key\/value pairs assigned to this instance. This includes
--- custom metadata and predefined keys.
-insnMetadata :: Lens' Instance (Maybe Metadata)
-insnMetadata
-  = lens _insnMetadata (\ s a -> s{_insnMetadata = a})
-
--- | [Output Only] Unique identifier for the resource; defined by the server.
-insnId :: Lens' Instance (Maybe Word64)
-insnId
-  = lens _insnId (\ s a -> s{_insnId = a}) .
-      mapping _Coerce
-
--- | Scheduling options for this instance.
-insnScheduling :: Lens' Instance (Maybe Scheduling)
-insnScheduling
-  = lens _insnScheduling
-      (\ s a -> s{_insnScheduling = a})
-
--- | Array of disks associated with this instance. Persistent disks must be
--- created before you can assign them.
-insnDisks :: Lens' Instance [AttachedDisk]
-insnDisks
-  = lens _insnDisks (\ s a -> s{_insnDisks = a}) .
-      _Default
-      . _Coerce
-
--- | Allows this instance to send and receive packets with non-matching
--- destination or source IPs. This is required if you plan to use this
--- instance to forward routes. For more information, see Enabling IP
--- Forwarding.
-insnCanIPForward :: Lens' Instance (Maybe Bool)
-insnCanIPForward
-  = lens _insnCanIPForward
-      (\ s a -> s{_insnCanIPForward = a})
-
--- | An optional textual description of the resource; provided by the client
--- when the resource is created.
-insnDescription :: Lens' Instance (Maybe Text)
-insnDescription
-  = lens _insnDescription
-      (\ s a -> s{_insnDescription = a})
-
--- | A list of tags to appy to this instance. Tags are used to identify valid
--- sources or targets for network firewalls and are specified by the client
--- during instance creation. The tags can be later modified by the setTags
--- method. Each tag within the list must comply with RFC1035.
-insnTags :: Lens' Instance (Maybe Tags)
-insnTags = lens _insnTags (\ s a -> s{_insnTags = a})
-
-instance FromJSON Instance where
-        parseJSON
-          = withObject "Instance"
-              (\ o ->
-                 Instance <$>
-                   (o .:? "status") <*>
-                     (o .:? "serviceAccounts" .!= mempty)
-                     <*> (o .:? "networkInterfaces" .!= mempty)
-                     <*> (o .:? "kind" .!= "compute#instance")
-                     <*> (o .:? "zone")
-                     <*> (o .:? "cpuPlatform")
-                     <*> (o .:? "selfLink")
-                     <*> (o .:? "name")
-                     <*> (o .:? "statusMessage")
-                     <*> (o .:? "creationTimestamp")
-                     <*> (o .:? "machineType")
-                     <*> (o .:? "metadata")
-                     <*> (o .:? "id")
-                     <*> (o .:? "scheduling")
-                     <*> (o .:? "disks" .!= mempty)
-                     <*> (o .:? "canIpForward")
-                     <*> (o .:? "description")
-                     <*> (o .:? "tags"))
-
-instance ToJSON Instance where
-        toJSON Instance{..}
-          = object
-              (catMaybes
-                 [("status" .=) <$> _insnStatus,
-                  ("serviceAccounts" .=) <$> _insnServiceAccounts,
-                  ("networkInterfaces" .=) <$> _insnNetworkInterfaces,
-                  Just ("kind" .= _insnKind),
-                  ("zone" .=) <$> _insnZone,
-                  ("cpuPlatform" .=) <$> _insnCPUPlatform,
-                  ("selfLink" .=) <$> _insnSelfLink,
-                  ("name" .=) <$> _insnName,
-                  ("statusMessage" .=) <$> _insnStatusMessage,
-                  ("creationTimestamp" .=) <$> _insnCreationTimestamp,
-                  ("machineType" .=) <$> _insnMachineType,
-                  ("metadata" .=) <$> _insnMetadata,
-                  ("id" .=) <$> _insnId,
-                  ("scheduling" .=) <$> _insnScheduling,
-                  ("disks" .=) <$> _insnDisks,
-                  ("canIpForward" .=) <$> _insnCanIPForward,
-                  ("description" .=) <$> _insnDescription,
-                  ("tags" .=) <$> _insnTags])
-
--- | A matcher for the path portion of the URL. The BackendService from the
--- longest-matched rule will serve the URL. If no rule was matched, the
--- default service will be used.
---
--- /See:/ 'pathMatcher' smart constructor.
-data PathMatcher = PathMatcher
-    { _pmDefaultService :: !(Maybe Text)
-    , _pmName           :: !(Maybe Text)
-    , _pmPathRules      :: !(Maybe [PathRule])
-    , _pmDescription    :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PathMatcher' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pmDefaultService'
---
--- * 'pmName'
---
--- * 'pmPathRules'
---
--- * 'pmDescription'
-pathMatcher
-    :: PathMatcher
-pathMatcher =
-    PathMatcher
-    { _pmDefaultService = Nothing
-    , _pmName = Nothing
-    , _pmPathRules = Nothing
-    , _pmDescription = Nothing
-    }
-
--- | The URL to the BackendService resource. This will be used if none of the
--- \'pathRules\' defined by this PathMatcher is met by the URL\'s path
--- portion.
-pmDefaultService :: Lens' PathMatcher (Maybe Text)
-pmDefaultService
-  = lens _pmDefaultService
-      (\ s a -> s{_pmDefaultService = a})
-
--- | The name to which this PathMatcher is referred by the HostRule.
-pmName :: Lens' PathMatcher (Maybe Text)
-pmName = lens _pmName (\ s a -> s{_pmName = a})
-
--- | The list of path rules.
-pmPathRules :: Lens' PathMatcher [PathRule]
-pmPathRules
-  = lens _pmPathRules (\ s a -> s{_pmPathRules = a}) .
-      _Default
-      . _Coerce
-
--- | An optional textual description of the resource.
-pmDescription :: Lens' PathMatcher (Maybe Text)
-pmDescription
-  = lens _pmDescription
-      (\ s a -> s{_pmDescription = a})
-
-instance FromJSON PathMatcher where
-        parseJSON
-          = withObject "PathMatcher"
-              (\ o ->
-                 PathMatcher <$>
-                   (o .:? "defaultService") <*> (o .:? "name") <*>
-                     (o .:? "pathRules" .!= mempty)
-                     <*> (o .:? "description"))
-
-instance ToJSON PathMatcher where
-        toJSON PathMatcher{..}
+-- 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.Compute.Types.Product where
+
+import           Network.Google.Compute.Types.Sum
+import           Network.Google.Prelude
+
+-- | Contains a list of TargetHttpsProxy resources.
+--
+-- /See:/ 'targetHTTPSProxyList' smart constructor.
+data TargetHTTPSProxyList = TargetHTTPSProxyList'
+    { _thplNextPageToken :: !(Maybe Text)
+    , _thplKind          :: !Text
+    , _thplItems         :: !(Maybe [TargetHTTPSProxy])
+    , _thplSelfLink      :: !(Maybe Text)
+    , _thplId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetHTTPSProxyList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'thplNextPageToken'
+--
+-- * 'thplKind'
+--
+-- * 'thplItems'
+--
+-- * 'thplSelfLink'
+--
+-- * 'thplId'
+targetHTTPSProxyList
+    :: TargetHTTPSProxyList
+targetHTTPSProxyList =
+    TargetHTTPSProxyList'
+    { _thplNextPageToken = Nothing
+    , _thplKind = "compute#targetHttpsProxyList"
+    , _thplItems = Nothing
+    , _thplSelfLink = Nothing
+    , _thplId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+thplNextPageToken :: Lens' TargetHTTPSProxyList (Maybe Text)
+thplNextPageToken
+  = lens _thplNextPageToken
+      (\ s a -> s{_thplNextPageToken = a})
+
+-- | Type of resource. Always compute#targetHttpsProxyList for lists of
+-- target HTTPS proxies.
+thplKind :: Lens' TargetHTTPSProxyList Text
+thplKind = lens _thplKind (\ s a -> s{_thplKind = a})
+
+-- | A list of TargetHttpsProxy resources.
+thplItems :: Lens' TargetHTTPSProxyList [TargetHTTPSProxy]
+thplItems
+  = lens _thplItems (\ s a -> s{_thplItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+thplSelfLink :: Lens' TargetHTTPSProxyList (Maybe Text)
+thplSelfLink
+  = lens _thplSelfLink (\ s a -> s{_thplSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+thplId :: Lens' TargetHTTPSProxyList (Maybe Text)
+thplId = lens _thplId (\ s a -> s{_thplId = a})
+
+instance FromJSON TargetHTTPSProxyList where
+        parseJSON
+          = withObject "TargetHTTPSProxyList"
+              (\ o ->
+                 TargetHTTPSProxyList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#targetHttpsProxyList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetHTTPSProxyList where
+        toJSON TargetHTTPSProxyList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _thplNextPageToken,
+                  Just ("kind" .= _thplKind),
+                  ("items" .=) <$> _thplItems,
+                  ("selfLink" .=) <$> _thplSelfLink,
+                  ("id" .=) <$> _thplId])
+
+--
+-- /See:/ 'addressesScopedList' smart constructor.
+data AddressesScopedList = AddressesScopedList'
+    { _aslAddresses :: !(Maybe [Address])
+    , _aslWarning   :: !(Maybe AddressesScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddressesScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aslAddresses'
+--
+-- * 'aslWarning'
+addressesScopedList
+    :: AddressesScopedList
+addressesScopedList =
+    AddressesScopedList'
+    { _aslAddresses = Nothing
+    , _aslWarning = Nothing
+    }
+
+-- | [Output Only] List of addresses contained in this scope.
+aslAddresses :: Lens' AddressesScopedList [Address]
+aslAddresses
+  = lens _aslAddresses (\ s a -> s{_aslAddresses = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Informational warning which replaces the list of addresses
+-- when the list is empty.
+aslWarning :: Lens' AddressesScopedList (Maybe AddressesScopedListWarning)
+aslWarning
+  = lens _aslWarning (\ s a -> s{_aslWarning = a})
+
+instance FromJSON AddressesScopedList where
+        parseJSON
+          = withObject "AddressesScopedList"
+              (\ o ->
+                 AddressesScopedList' <$>
+                   (o .:? "addresses" .!= mempty) <*> (o .:? "warning"))
+
+instance ToJSON AddressesScopedList where
+        toJSON AddressesScopedList'{..}
+          = object
+              (catMaybes
+                 [("addresses" .=) <$> _aslAddresses,
+                  ("warning" .=) <$> _aslWarning])
+
+--
+-- /See:/ 'operationWarningsItemDataItem' smart constructor.
+data OperationWarningsItemDataItem = OperationWarningsItemDataItem'
+    { _owidiValue :: !(Maybe Text)
+    , _owidiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationWarningsItemDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'owidiValue'
+--
+-- * 'owidiKey'
+operationWarningsItemDataItem
+    :: OperationWarningsItemDataItem
+operationWarningsItemDataItem =
+    OperationWarningsItemDataItem'
+    { _owidiValue = Nothing
+    , _owidiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+owidiValue :: Lens' OperationWarningsItemDataItem (Maybe Text)
+owidiValue
+  = lens _owidiValue (\ s a -> s{_owidiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+owidiKey :: Lens' OperationWarningsItemDataItem (Maybe Text)
+owidiKey = lens _owidiKey (\ s a -> s{_owidiKey = a})
+
+instance FromJSON OperationWarningsItemDataItem where
+        parseJSON
+          = withObject "OperationWarningsItemDataItem"
+              (\ o ->
+                 OperationWarningsItemDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON OperationWarningsItemDataItem where
+        toJSON OperationWarningsItemDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _owidiValue,
+                  ("key" .=) <$> _owidiKey])
+
+--
+-- /See:/ 'instanceGroupManagersAbandonInstancesRequest' smart constructor.
+newtype InstanceGroupManagersAbandonInstancesRequest = InstanceGroupManagersAbandonInstancesRequest'
+    { _igmairInstances :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersAbandonInstancesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmairInstances'
+instanceGroupManagersAbandonInstancesRequest
+    :: InstanceGroupManagersAbandonInstancesRequest
+instanceGroupManagersAbandonInstancesRequest =
+    InstanceGroupManagersAbandonInstancesRequest'
+    { _igmairInstances = Nothing
+    }
+
+-- | The URL for one or more instances to abandon from the managed instance
+-- group.
+igmairInstances :: Lens' InstanceGroupManagersAbandonInstancesRequest [Text]
+igmairInstances
+  = lens _igmairInstances
+      (\ s a -> s{_igmairInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupManagersAbandonInstancesRequest where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersAbandonInstancesRequest"
+              (\ o ->
+                 InstanceGroupManagersAbandonInstancesRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON
+         InstanceGroupManagersAbandonInstancesRequest where
+        toJSON
+          InstanceGroupManagersAbandonInstancesRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _igmairInstances])
+
+-- | [Output Only] A map of scoped machine type lists.
+--
+-- /See:/ 'machineTypeAggregatedListItems' smart constructor.
+newtype MachineTypeAggregatedListItems = MachineTypeAggregatedListItems'
+    { _mtaliAddtional :: HashMap Text MachineTypesScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypeAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtaliAddtional'
+machineTypeAggregatedListItems
+    :: HashMap Text MachineTypesScopedList -- ^ 'mtaliAddtional'
+    -> MachineTypeAggregatedListItems
+machineTypeAggregatedListItems pMtaliAddtional_ =
+    MachineTypeAggregatedListItems'
+    { _mtaliAddtional = _Coerce # pMtaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of machine types.
+mtaliAddtional :: Lens' MachineTypeAggregatedListItems (HashMap Text MachineTypesScopedList)
+mtaliAddtional
+  = lens _mtaliAddtional
+      (\ s a -> s{_mtaliAddtional = a})
+      . _Coerce
+
+instance FromJSON MachineTypeAggregatedListItems
+         where
+        parseJSON
+          = withObject "MachineTypeAggregatedListItems"
+              (\ o ->
+                 MachineTypeAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON MachineTypeAggregatedListItems where
+        toJSON = toJSON . _mtaliAddtional
+
+-- | [Output Only] A map of scoped disk type lists.
+--
+-- /See:/ 'diskTypeAggregatedListItems' smart constructor.
+newtype DiskTypeAggregatedListItems = DiskTypeAggregatedListItems'
+    { _dtaliAddtional :: HashMap Text DiskTypesScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskTypeAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtaliAddtional'
+diskTypeAggregatedListItems
+    :: HashMap Text DiskTypesScopedList -- ^ 'dtaliAddtional'
+    -> DiskTypeAggregatedListItems
+diskTypeAggregatedListItems pDtaliAddtional_ =
+    DiskTypeAggregatedListItems'
+    { _dtaliAddtional = _Coerce # pDtaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of disk types.
+dtaliAddtional :: Lens' DiskTypeAggregatedListItems (HashMap Text DiskTypesScopedList)
+dtaliAddtional
+  = lens _dtaliAddtional
+      (\ s a -> s{_dtaliAddtional = a})
+      . _Coerce
+
+instance FromJSON DiskTypeAggregatedListItems where
+        parseJSON
+          = withObject "DiskTypeAggregatedListItems"
+              (\ o ->
+                 DiskTypeAggregatedListItems' <$> (parseJSONObject o))
+
+instance ToJSON DiskTypeAggregatedListItems where
+        toJSON = toJSON . _dtaliAddtional
+
+-- | Contains a list of firewalls.
+--
+-- /See:/ 'firewallList' smart constructor.
+data FirewallList = FirewallList'
+    { _flNextPageToken :: !(Maybe Text)
+    , _flKind          :: !Text
+    , _flItems         :: !(Maybe [Firewall])
+    , _flSelfLink      :: !(Maybe Text)
+    , _flId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FirewallList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'flNextPageToken'
+--
+-- * 'flKind'
+--
+-- * 'flItems'
+--
+-- * 'flSelfLink'
+--
+-- * 'flId'
+firewallList
+    :: FirewallList
+firewallList =
+    FirewallList'
+    { _flNextPageToken = Nothing
+    , _flKind = "compute#firewallList"
+    , _flItems = Nothing
+    , _flSelfLink = Nothing
+    , _flId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+flNextPageToken :: Lens' FirewallList (Maybe Text)
+flNextPageToken
+  = lens _flNextPageToken
+      (\ s a -> s{_flNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#firewallList for lists of
+-- firewalls.
+flKind :: Lens' FirewallList Text
+flKind = lens _flKind (\ s a -> s{_flKind = a})
+
+-- | [Output Only] A list of Firewall resources.
+flItems :: Lens' FirewallList [Firewall]
+flItems
+  = lens _flItems (\ s a -> s{_flItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+flSelfLink :: Lens' FirewallList (Maybe Text)
+flSelfLink
+  = lens _flSelfLink (\ s a -> s{_flSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+flId :: Lens' FirewallList (Maybe Text)
+flId = lens _flId (\ s a -> s{_flId = a})
+
+instance FromJSON FirewallList where
+        parseJSON
+          = withObject "FirewallList"
+              (\ o ->
+                 FirewallList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#firewallList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON FirewallList where
+        toJSON FirewallList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _flNextPageToken,
+                  Just ("kind" .= _flKind), ("items" .=) <$> _flItems,
+                  ("selfLink" .=) <$> _flSelfLink,
+                  ("id" .=) <$> _flId])
+
+-- | [Output Only] Informational warning which replaces the list of instances
+-- when the list is empty.
+--
+-- /See:/ 'instancesScopedListWarning' smart constructor.
+data InstancesScopedListWarning = InstancesScopedListWarning'
+    { _islwData    :: !(Maybe [InstancesScopedListWarningDataItem])
+    , _islwCode    :: !(Maybe InstancesScopedListWarningCode)
+    , _islwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstancesScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'islwData'
+--
+-- * 'islwCode'
+--
+-- * 'islwMessage'
+instancesScopedListWarning
+    :: InstancesScopedListWarning
+instancesScopedListWarning =
+    InstancesScopedListWarning'
+    { _islwData = Nothing
+    , _islwCode = Nothing
+    , _islwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+islwData :: Lens' InstancesScopedListWarning [InstancesScopedListWarningDataItem]
+islwData
+  = lens _islwData (\ s a -> s{_islwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+islwCode :: Lens' InstancesScopedListWarning (Maybe InstancesScopedListWarningCode)
+islwCode = lens _islwCode (\ s a -> s{_islwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+islwMessage :: Lens' InstancesScopedListWarning (Maybe Text)
+islwMessage
+  = lens _islwMessage (\ s a -> s{_islwMessage = a})
+
+instance FromJSON InstancesScopedListWarning where
+        parseJSON
+          = withObject "InstancesScopedListWarning"
+              (\ o ->
+                 InstancesScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON InstancesScopedListWarning where
+        toJSON InstancesScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _islwData,
+                  ("code" .=) <$> _islwCode,
+                  ("message" .=) <$> _islwMessage])
+
+-- | A list of InstanceGroup resources.
+--
+-- /See:/ 'instanceGroupList' smart constructor.
+data InstanceGroupList = InstanceGroupList'
+    { _iglNextPageToken :: !(Maybe Text)
+    , _iglKind          :: !Text
+    , _iglItems         :: !(Maybe [InstanceGroup])
+    , _iglSelfLink      :: !(Maybe Text)
+    , _iglId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iglNextPageToken'
+--
+-- * 'iglKind'
+--
+-- * 'iglItems'
+--
+-- * 'iglSelfLink'
+--
+-- * 'iglId'
+instanceGroupList
+    :: InstanceGroupList
+instanceGroupList =
+    InstanceGroupList'
+    { _iglNextPageToken = Nothing
+    , _iglKind = "compute#instanceGroupList"
+    , _iglItems = Nothing
+    , _iglSelfLink = Nothing
+    , _iglId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+iglNextPageToken :: Lens' InstanceGroupList (Maybe Text)
+iglNextPageToken
+  = lens _iglNextPageToken
+      (\ s a -> s{_iglNextPageToken = a})
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceGroupList for instance group lists.
+iglKind :: Lens' InstanceGroupList Text
+iglKind = lens _iglKind (\ s a -> s{_iglKind = a})
+
+-- | A list of instance groups.
+iglItems :: Lens' InstanceGroupList [InstanceGroup]
+iglItems
+  = lens _iglItems (\ s a -> s{_iglItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The URL for this resource type. The server generates this
+-- URL.
+iglSelfLink :: Lens' InstanceGroupList (Maybe Text)
+iglSelfLink
+  = lens _iglSelfLink (\ s a -> s{_iglSelfLink = a})
+
+-- | [Output Only] A unique identifier for this list of instance groups. The
+-- server generates this identifier.
+iglId :: Lens' InstanceGroupList (Maybe Text)
+iglId = lens _iglId (\ s a -> s{_iglId = a})
+
+instance FromJSON InstanceGroupList where
+        parseJSON
+          = withObject "InstanceGroupList"
+              (\ o ->
+                 InstanceGroupList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#instanceGroupList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceGroupList where
+        toJSON InstanceGroupList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _iglNextPageToken,
+                  Just ("kind" .= _iglKind),
+                  ("items" .=) <$> _iglItems,
+                  ("selfLink" .=) <$> _iglSelfLink,
+                  ("id" .=) <$> _iglId])
+
+--
+-- /See:/ 'instancesSetMachineTypeRequest' smart constructor.
+newtype InstancesSetMachineTypeRequest = InstancesSetMachineTypeRequest'
+    { _ismtrMachineType :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstancesSetMachineTypeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ismtrMachineType'
+instancesSetMachineTypeRequest
+    :: InstancesSetMachineTypeRequest
+instancesSetMachineTypeRequest =
+    InstancesSetMachineTypeRequest'
+    { _ismtrMachineType = Nothing
+    }
+
+-- | Full or partial URL of the machine type resource. See Machine Types for
+-- a full list of machine types. For example:
+-- zones\/us-central1-f\/machineTypes\/n1-standard-1
+ismtrMachineType :: Lens' InstancesSetMachineTypeRequest (Maybe Text)
+ismtrMachineType
+  = lens _ismtrMachineType
+      (\ s a -> s{_ismtrMachineType = a})
+
+instance FromJSON InstancesSetMachineTypeRequest
+         where
+        parseJSON
+          = withObject "InstancesSetMachineTypeRequest"
+              (\ o ->
+                 InstancesSetMachineTypeRequest' <$>
+                   (o .:? "machineType"))
+
+instance ToJSON InstancesSetMachineTypeRequest where
+        toJSON InstancesSetMachineTypeRequest'{..}
+          = object
+              (catMaybes
+                 [("machineType" .=) <$> _ismtrMachineType])
+
+-- | A map of scoped autoscaler lists.
+--
+-- /See:/ 'autoscalerAggregatedListItems' smart constructor.
+newtype AutoscalerAggregatedListItems = AutoscalerAggregatedListItems'
+    { _aaliAddtional :: HashMap Text AutoscalersScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalerAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaliAddtional'
+autoscalerAggregatedListItems
+    :: HashMap Text AutoscalersScopedList -- ^ 'aaliAddtional'
+    -> AutoscalerAggregatedListItems
+autoscalerAggregatedListItems pAaliAddtional_ =
+    AutoscalerAggregatedListItems'
+    { _aaliAddtional = _Coerce # pAaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of autoscalers.
+aaliAddtional :: Lens' AutoscalerAggregatedListItems (HashMap Text AutoscalersScopedList)
+aaliAddtional
+  = lens _aaliAddtional
+      (\ s a -> s{_aaliAddtional = a})
+      . _Coerce
+
+instance FromJSON AutoscalerAggregatedListItems where
+        parseJSON
+          = withObject "AutoscalerAggregatedListItems"
+              (\ o ->
+                 AutoscalerAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON AutoscalerAggregatedListItems where
+        toJSON = toJSON . _aaliAddtional
+
+--
+-- /See:/ 'instanceGroupManagersSetInstanceTemplateRequest' smart constructor.
+newtype InstanceGroupManagersSetInstanceTemplateRequest = InstanceGroupManagersSetInstanceTemplateRequest'
+    { _igmsitrInstanceTemplate :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersSetInstanceTemplateRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmsitrInstanceTemplate'
+instanceGroupManagersSetInstanceTemplateRequest
+    :: InstanceGroupManagersSetInstanceTemplateRequest
+instanceGroupManagersSetInstanceTemplateRequest =
+    InstanceGroupManagersSetInstanceTemplateRequest'
+    { _igmsitrInstanceTemplate = Nothing
+    }
+
+-- | The URL of the instance template that is specified for this managed
+-- instance group. The group uses this template to create all new instances
+-- in the managed instance group.
+igmsitrInstanceTemplate :: Lens' InstanceGroupManagersSetInstanceTemplateRequest (Maybe Text)
+igmsitrInstanceTemplate
+  = lens _igmsitrInstanceTemplate
+      (\ s a -> s{_igmsitrInstanceTemplate = a})
+
+instance FromJSON
+         InstanceGroupManagersSetInstanceTemplateRequest where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersSetInstanceTemplateRequest"
+              (\ o ->
+                 InstanceGroupManagersSetInstanceTemplateRequest' <$>
+                   (o .:? "instanceTemplate"))
+
+instance ToJSON
+         InstanceGroupManagersSetInstanceTemplateRequest where
+        toJSON
+          InstanceGroupManagersSetInstanceTemplateRequest'{..}
+          = object
+              (catMaybes
+                 [("instanceTemplate" .=) <$>
+                    _igmsitrInstanceTemplate])
+
+-- | Deprecation status for a public resource.
+--
+-- /See:/ 'deprecationStatus' smart constructor.
+data DeprecationStatus = DeprecationStatus'
+    { _dsState       :: !(Maybe DeprecationStatusState)
+    , _dsDeleted     :: !(Maybe Text)
+    , _dsReplacement :: !(Maybe Text)
+    , _dsObsolete    :: !(Maybe Text)
+    , _dsDeprecated  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeprecationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsState'
+--
+-- * 'dsDeleted'
+--
+-- * 'dsReplacement'
+--
+-- * 'dsObsolete'
+--
+-- * 'dsDeprecated'
+deprecationStatus
+    :: DeprecationStatus
+deprecationStatus =
+    DeprecationStatus'
+    { _dsState = Nothing
+    , _dsDeleted = Nothing
+    , _dsReplacement = Nothing
+    , _dsObsolete = Nothing
+    , _dsDeprecated = Nothing
+    }
+
+-- | The deprecation state of this resource. This can be DEPRECATED,
+-- OBSOLETE, or DELETED. Operations which create a new resource using a
+-- DEPRECATED resource will return successfully, but with a warning
+-- indicating the deprecated resource and recommending its replacement.
+-- Operations which use OBSOLETE or DELETED resources will be rejected and
+-- result in an error.
+dsState :: Lens' DeprecationStatus (Maybe DeprecationStatusState)
+dsState = lens _dsState (\ s a -> s{_dsState = a})
+
+-- | An optional RFC3339 timestamp on or after which the deprecation state of
+-- this resource will be changed to DELETED.
+dsDeleted :: Lens' DeprecationStatus (Maybe Text)
+dsDeleted
+  = lens _dsDeleted (\ s a -> s{_dsDeleted = a})
+
+-- | The URL of the suggested replacement for a deprecated resource. The
+-- suggested replacement resource must be the same kind of resource as the
+-- deprecated resource.
+dsReplacement :: Lens' DeprecationStatus (Maybe Text)
+dsReplacement
+  = lens _dsReplacement
+      (\ s a -> s{_dsReplacement = a})
+
+-- | An optional RFC3339 timestamp on or after which the deprecation state of
+-- this resource will be changed to OBSOLETE.
+dsObsolete :: Lens' DeprecationStatus (Maybe Text)
+dsObsolete
+  = lens _dsObsolete (\ s a -> s{_dsObsolete = a})
+
+-- | An optional RFC3339 timestamp on or after which the deprecation state of
+-- this resource will be changed to DEPRECATED.
+dsDeprecated :: Lens' DeprecationStatus (Maybe Text)
+dsDeprecated
+  = lens _dsDeprecated (\ s a -> s{_dsDeprecated = a})
+
+instance FromJSON DeprecationStatus where
+        parseJSON
+          = withObject "DeprecationStatus"
+              (\ o ->
+                 DeprecationStatus' <$>
+                   (o .:? "state") <*> (o .:? "deleted") <*>
+                     (o .:? "replacement")
+                     <*> (o .:? "obsolete")
+                     <*> (o .:? "deprecated"))
+
+instance ToJSON DeprecationStatus where
+        toJSON DeprecationStatus'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _dsState,
+                  ("deleted" .=) <$> _dsDeleted,
+                  ("replacement" .=) <$> _dsReplacement,
+                  ("obsolete" .=) <$> _dsObsolete,
+                  ("deprecated" .=) <$> _dsDeprecated])
+
+-- | A persistent disk snapshot resource.
+--
+-- /See:/ 'snapshot' smart constructor.
+data Snapshot = Snapshot'
+    { _sStorageBytesStatus :: !(Maybe SnapshotStorageBytesStatus)
+    , _sStatus             :: !(Maybe SnapshotStatus)
+    , _sDiskSizeGb         :: !(Maybe (Textual Int64))
+    , _sSourceDiskId       :: !(Maybe Text)
+    , _sKind               :: !Text
+    , _sStorageBytes       :: !(Maybe (Textual Int64))
+    , _sSelfLink           :: !(Maybe Text)
+    , _sName               :: !(Maybe Text)
+    , _sCreationTimestamp  :: !(Maybe Text)
+    , _sId                 :: !(Maybe (Textual Word64))
+    , _sLicenses           :: !(Maybe [Text])
+    , _sSourceDisk         :: !(Maybe Text)
+    , _sDescription        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Snapshot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sStorageBytesStatus'
+--
+-- * 'sStatus'
+--
+-- * 'sDiskSizeGb'
+--
+-- * 'sSourceDiskId'
+--
+-- * 'sKind'
+--
+-- * 'sStorageBytes'
+--
+-- * 'sSelfLink'
+--
+-- * 'sName'
+--
+-- * 'sCreationTimestamp'
+--
+-- * 'sId'
+--
+-- * 'sLicenses'
+--
+-- * 'sSourceDisk'
+--
+-- * 'sDescription'
+snapshot
+    :: Snapshot
+snapshot =
+    Snapshot'
+    { _sStorageBytesStatus = Nothing
+    , _sStatus = Nothing
+    , _sDiskSizeGb = Nothing
+    , _sSourceDiskId = Nothing
+    , _sKind = "compute#snapshot"
+    , _sStorageBytes = Nothing
+    , _sSelfLink = Nothing
+    , _sName = Nothing
+    , _sCreationTimestamp = Nothing
+    , _sId = Nothing
+    , _sLicenses = Nothing
+    , _sSourceDisk = Nothing
+    , _sDescription = Nothing
+    }
+
+-- | [Output Only] An indicator whether storageBytes is in a stable state or
+-- it is being adjusted as a result of shared storage reallocation. This
+-- status can either be UPDATING, meaning the size of the snapshot is being
+-- updated, or UP_TO_DATE, meaning the size of the snapshot is up-to-date.
+sStorageBytesStatus :: Lens' Snapshot (Maybe SnapshotStorageBytesStatus)
+sStorageBytesStatus
+  = lens _sStorageBytesStatus
+      (\ s a -> s{_sStorageBytesStatus = a})
+
+-- | [Output Only] The status of the snapshot. This can be CREATING,
+-- DELETING, FAILED, READY, or UPLOADING.
+sStatus :: Lens' Snapshot (Maybe SnapshotStatus)
+sStatus = lens _sStatus (\ s a -> s{_sStatus = a})
+
+-- | [Output Only] Size of the snapshot, specified in GB.
+sDiskSizeGb :: Lens' Snapshot (Maybe Int64)
+sDiskSizeGb
+  = lens _sDiskSizeGb (\ s a -> s{_sDiskSizeGb = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The ID value of the disk used to create this snapshot.
+-- This value may be used to determine whether the snapshot was taken from
+-- the current or a previous instance of a given disk name.
+sSourceDiskId :: Lens' Snapshot (Maybe Text)
+sSourceDiskId
+  = lens _sSourceDiskId
+      (\ s a -> s{_sSourceDiskId = a})
+
+-- | [Output Only] Type of the resource. Always compute#snapshot for Snapshot
+-- resources.
+sKind :: Lens' Snapshot Text
+sKind = lens _sKind (\ s a -> s{_sKind = a})
+
+-- | [Output Only] A size of the the storage used by the snapshot. As
+-- snapshots share storage, this number is expected to change with snapshot
+-- creation\/deletion.
+sStorageBytes :: Lens' Snapshot (Maybe Int64)
+sStorageBytes
+  = lens _sStorageBytes
+      (\ s a -> s{_sStorageBytes = a})
+      . mapping _Coerce
+
+-- | [Output Only] Server-defined URL for the resource.
+sSelfLink :: Lens' Snapshot (Maybe Text)
+sSelfLink
+  = lens _sSelfLink (\ s a -> s{_sSelfLink = a})
+
+-- | Name of the resource; provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+sName :: Lens' Snapshot (Maybe Text)
+sName = lens _sName (\ s a -> s{_sName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+sCreationTimestamp :: Lens' Snapshot (Maybe Text)
+sCreationTimestamp
+  = lens _sCreationTimestamp
+      (\ s a -> s{_sCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+sId :: Lens' Snapshot (Maybe Word64)
+sId
+  = lens _sId (\ s a -> s{_sId = a}) . mapping _Coerce
+
+-- | [Output Only] A list of public visible licenses that apply to this
+-- snapshot. This can be because the original image had licenses attached
+-- (such as a Windows image).
+sLicenses :: Lens' Snapshot [Text]
+sLicenses
+  = lens _sLicenses (\ s a -> s{_sLicenses = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The source disk used to create this snapshot.
+sSourceDisk :: Lens' Snapshot (Maybe Text)
+sSourceDisk
+  = lens _sSourceDisk (\ s a -> s{_sSourceDisk = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+sDescription :: Lens' Snapshot (Maybe Text)
+sDescription
+  = lens _sDescription (\ s a -> s{_sDescription = a})
+
+instance FromJSON Snapshot where
+        parseJSON
+          = withObject "Snapshot"
+              (\ o ->
+                 Snapshot' <$>
+                   (o .:? "storageBytesStatus") <*> (o .:? "status") <*>
+                     (o .:? "diskSizeGb")
+                     <*> (o .:? "sourceDiskId")
+                     <*> (o .:? "kind" .!= "compute#snapshot")
+                     <*> (o .:? "storageBytes")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "licenses" .!= mempty)
+                     <*> (o .:? "sourceDisk")
+                     <*> (o .:? "description"))
+
+instance ToJSON Snapshot where
+        toJSON Snapshot'{..}
+          = object
+              (catMaybes
+                 [("storageBytesStatus" .=) <$> _sStorageBytesStatus,
+                  ("status" .=) <$> _sStatus,
+                  ("diskSizeGb" .=) <$> _sDiskSizeGb,
+                  ("sourceDiskId" .=) <$> _sSourceDiskId,
+                  Just ("kind" .= _sKind),
+                  ("storageBytes" .=) <$> _sStorageBytes,
+                  ("selfLink" .=) <$> _sSelfLink,
+                  ("name" .=) <$> _sName,
+                  ("creationTimestamp" .=) <$> _sCreationTimestamp,
+                  ("id" .=) <$> _sId, ("licenses" .=) <$> _sLicenses,
+                  ("sourceDisk" .=) <$> _sSourceDisk,
+                  ("description" .=) <$> _sDescription])
+
+-- | Custom utilization metric policy.
+--
+-- /See:/ 'autoscalingPolicyCustomMetricUtilization' smart constructor.
+data AutoscalingPolicyCustomMetricUtilization = AutoscalingPolicyCustomMetricUtilization'
+    { _apcmuUtilizationTarget     :: !(Maybe (Textual Double))
+    , _apcmuMetric                :: !(Maybe Text)
+    , _apcmuUtilizationTargetType :: !(Maybe AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalingPolicyCustomMetricUtilization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apcmuUtilizationTarget'
+--
+-- * 'apcmuMetric'
+--
+-- * 'apcmuUtilizationTargetType'
+autoscalingPolicyCustomMetricUtilization
+    :: AutoscalingPolicyCustomMetricUtilization
+autoscalingPolicyCustomMetricUtilization =
+    AutoscalingPolicyCustomMetricUtilization'
+    { _apcmuUtilizationTarget = Nothing
+    , _apcmuMetric = Nothing
+    , _apcmuUtilizationTargetType = Nothing
+    }
+
+-- | Target value of the metric which autoscaler should maintain. Must be a
+-- positive value.
+apcmuUtilizationTarget :: Lens' AutoscalingPolicyCustomMetricUtilization (Maybe Double)
+apcmuUtilizationTarget
+  = lens _apcmuUtilizationTarget
+      (\ s a -> s{_apcmuUtilizationTarget = a})
+      . mapping _Coerce
+
+-- | The identifier of the Cloud Monitoring metric. The metric cannot have
+-- negative values and should be a utilization metric, which means that the
+-- number of virtual machines handling requests should increase or decrease
+-- proportionally to the metric. The metric must also have a label of
+-- compute.googleapis.com\/resource_id with the value of the instance\'s
+-- unique ID, although this alone does not guarantee that the metric is
+-- valid. For example, the following is a valid metric:
+-- compute.googleapis.com\/instance\/network\/received_bytes_count The
+-- following is not a valid metric because it does not increase or decrease
+-- based on usage: compute.googleapis.com\/instance\/cpu\/reserved_cores
+apcmuMetric :: Lens' AutoscalingPolicyCustomMetricUtilization (Maybe Text)
+apcmuMetric
+  = lens _apcmuMetric (\ s a -> s{_apcmuMetric = a})
+
+-- | Defines how target utilization value is expressed for a Cloud Monitoring
+-- metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not
+-- specified, the default is GAUGE.
+apcmuUtilizationTargetType :: Lens' AutoscalingPolicyCustomMetricUtilization (Maybe AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType)
+apcmuUtilizationTargetType
+  = lens _apcmuUtilizationTargetType
+      (\ s a -> s{_apcmuUtilizationTargetType = a})
+
+instance FromJSON
+         AutoscalingPolicyCustomMetricUtilization where
+        parseJSON
+          = withObject
+              "AutoscalingPolicyCustomMetricUtilization"
+              (\ o ->
+                 AutoscalingPolicyCustomMetricUtilization' <$>
+                   (o .:? "utilizationTarget") <*> (o .:? "metric") <*>
+                     (o .:? "utilizationTargetType"))
+
+instance ToJSON
+         AutoscalingPolicyCustomMetricUtilization where
+        toJSON AutoscalingPolicyCustomMetricUtilization'{..}
+          = object
+              (catMaybes
+                 [("utilizationTarget" .=) <$>
+                    _apcmuUtilizationTarget,
+                  ("metric" .=) <$> _apcmuMetric,
+                  ("utilizationTargetType" .=) <$>
+                    _apcmuUtilizationTargetType])
+
+-- | Contains a list of ForwardingRule resources.
+--
+-- /See:/ 'forwardingRuleList' smart constructor.
+data ForwardingRuleList = ForwardingRuleList'
+    { _frlNextPageToken :: !(Maybe Text)
+    , _frlKind          :: !Text
+    , _frlItems         :: !(Maybe [ForwardingRule])
+    , _frlSelfLink      :: !(Maybe Text)
+    , _frlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRuleList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frlNextPageToken'
+--
+-- * 'frlKind'
+--
+-- * 'frlItems'
+--
+-- * 'frlSelfLink'
+--
+-- * 'frlId'
+forwardingRuleList
+    :: ForwardingRuleList
+forwardingRuleList =
+    ForwardingRuleList'
+    { _frlNextPageToken = Nothing
+    , _frlKind = "compute#forwardingRuleList"
+    , _frlItems = Nothing
+    , _frlSelfLink = Nothing
+    , _frlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+frlNextPageToken :: Lens' ForwardingRuleList (Maybe Text)
+frlNextPageToken
+  = lens _frlNextPageToken
+      (\ s a -> s{_frlNextPageToken = a})
+
+-- | Type of resource.
+frlKind :: Lens' ForwardingRuleList Text
+frlKind = lens _frlKind (\ s a -> s{_frlKind = a})
+
+-- | A list of ForwardingRule resources.
+frlItems :: Lens' ForwardingRuleList [ForwardingRule]
+frlItems
+  = lens _frlItems (\ s a -> s{_frlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+frlSelfLink :: Lens' ForwardingRuleList (Maybe Text)
+frlSelfLink
+  = lens _frlSelfLink (\ s a -> s{_frlSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Set by the server.
+frlId :: Lens' ForwardingRuleList (Maybe Text)
+frlId = lens _frlId (\ s a -> s{_frlId = a})
+
+instance FromJSON ForwardingRuleList where
+        parseJSON
+          = withObject "ForwardingRuleList"
+              (\ o ->
+                 ForwardingRuleList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#forwardingRuleList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON ForwardingRuleList where
+        toJSON ForwardingRuleList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _frlNextPageToken,
+                  Just ("kind" .= _frlKind),
+                  ("items" .=) <$> _frlItems,
+                  ("selfLink" .=) <$> _frlSelfLink,
+                  ("id" .=) <$> _frlId])
+
+--
+-- /See:/ 'vpnTunnelsScopedList' smart constructor.
+data VPNTunnelsScopedList = VPNTunnelsScopedList'
+    { _vtslVPNTunnels :: !(Maybe [VPNTunnel])
+    , _vtslWarning    :: !(Maybe VPNTunnelsScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnelsScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtslVPNTunnels'
+--
+-- * 'vtslWarning'
+vpnTunnelsScopedList
+    :: VPNTunnelsScopedList
+vpnTunnelsScopedList =
+    VPNTunnelsScopedList'
+    { _vtslVPNTunnels = Nothing
+    , _vtslWarning = Nothing
+    }
+
+-- | List of vpn tunnels contained in this scope.
+vtslVPNTunnels :: Lens' VPNTunnelsScopedList [VPNTunnel]
+vtslVPNTunnels
+  = lens _vtslVPNTunnels
+      (\ s a -> s{_vtslVPNTunnels = a})
+      . _Default
+      . _Coerce
+
+-- | Informational warning which replaces the list of addresses when the list
+-- is empty.
+vtslWarning :: Lens' VPNTunnelsScopedList (Maybe VPNTunnelsScopedListWarning)
+vtslWarning
+  = lens _vtslWarning (\ s a -> s{_vtslWarning = a})
+
+instance FromJSON VPNTunnelsScopedList where
+        parseJSON
+          = withObject "VPNTunnelsScopedList"
+              (\ o ->
+                 VPNTunnelsScopedList' <$>
+                   (o .:? "vpnTunnels" .!= mempty) <*>
+                     (o .:? "warning"))
+
+instance ToJSON VPNTunnelsScopedList where
+        toJSON VPNTunnelsScopedList'{..}
+          = object
+              (catMaybes
+                 [("vpnTunnels" .=) <$> _vtslVPNTunnels,
+                  ("warning" .=) <$> _vtslWarning])
+
+--
+-- /See:/ 'instanceGroupsSetNamedPortsRequest' smart constructor.
+data InstanceGroupsSetNamedPortsRequest = InstanceGroupsSetNamedPortsRequest'
+    { _igsnprFingerprint :: !(Maybe Base64)
+    , _igsnprNamedPorts  :: !(Maybe [NamedPort])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsSetNamedPortsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igsnprFingerprint'
+--
+-- * 'igsnprNamedPorts'
+instanceGroupsSetNamedPortsRequest
+    :: InstanceGroupsSetNamedPortsRequest
+instanceGroupsSetNamedPortsRequest =
+    InstanceGroupsSetNamedPortsRequest'
+    { _igsnprFingerprint = Nothing
+    , _igsnprNamedPorts = Nothing
+    }
+
+-- | The fingerprint of the named ports information for this instance group.
+-- Use this optional property to prevent conflicts when multiple users
+-- change the named ports settings concurrently. Obtain the fingerprint
+-- with the instanceGroups.get method. Then, include the fingerprint in
+-- your request to ensure that you do not overwrite changes that were
+-- applied from another concurrent request.
+igsnprFingerprint :: Lens' InstanceGroupsSetNamedPortsRequest (Maybe ByteString)
+igsnprFingerprint
+  = lens _igsnprFingerprint
+      (\ s a -> s{_igsnprFingerprint = a})
+      . mapping _Base64
+
+-- | The list of named ports to set for this instance group.
+igsnprNamedPorts :: Lens' InstanceGroupsSetNamedPortsRequest [NamedPort]
+igsnprNamedPorts
+  = lens _igsnprNamedPorts
+      (\ s a -> s{_igsnprNamedPorts = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstanceGroupsSetNamedPortsRequest
+         where
+        parseJSON
+          = withObject "InstanceGroupsSetNamedPortsRequest"
+              (\ o ->
+                 InstanceGroupsSetNamedPortsRequest' <$>
+                   (o .:? "fingerprint") <*>
+                     (o .:? "namedPorts" .!= mempty))
+
+instance ToJSON InstanceGroupsSetNamedPortsRequest
+         where
+        toJSON InstanceGroupsSetNamedPortsRequest'{..}
+          = object
+              (catMaybes
+                 [("fingerprint" .=) <$> _igsnprFingerprint,
+                  ("namedPorts" .=) <$> _igsnprNamedPorts])
+
+-- | Contains a list of Operation resources.
+--
+-- /See:/ 'operationList' smart constructor.
+data OperationList = OperationList'
+    { _olNextPageToken :: !(Maybe Text)
+    , _olKind          :: !Text
+    , _olItems         :: !(Maybe [Operation])
+    , _olSelfLink      :: !(Maybe Text)
+    , _olId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'olNextPageToken'
+--
+-- * 'olKind'
+--
+-- * 'olItems'
+--
+-- * 'olSelfLink'
+--
+-- * 'olId'
+operationList
+    :: OperationList
+operationList =
+    OperationList'
+    { _olNextPageToken = Nothing
+    , _olKind = "compute#operationList"
+    , _olItems = Nothing
+    , _olSelfLink = Nothing
+    , _olId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+olNextPageToken :: Lens' OperationList (Maybe Text)
+olNextPageToken
+  = lens _olNextPageToken
+      (\ s a -> s{_olNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#operations for Operations
+-- resource.
+olKind :: Lens' OperationList Text
+olKind = lens _olKind (\ s a -> s{_olKind = a})
+
+-- | [Output Only] A list of Operation resources.
+olItems :: Lens' OperationList [Operation]
+olItems
+  = lens _olItems (\ s a -> s{_olItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+olSelfLink :: Lens' OperationList (Maybe Text)
+olSelfLink
+  = lens _olSelfLink (\ s a -> s{_olSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+olId :: Lens' OperationList (Maybe Text)
+olId = lens _olId (\ s a -> s{_olId = a})
+
+instance FromJSON OperationList where
+        parseJSON
+          = withObject "OperationList"
+              (\ o ->
+                 OperationList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#operationList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON OperationList where
+        toJSON OperationList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _olNextPageToken,
+                  Just ("kind" .= _olKind), ("items" .=) <$> _olItems,
+                  ("selfLink" .=) <$> _olSelfLink,
+                  ("id" .=) <$> _olId])
+
+-- | A list of Disk resources.
+--
+-- /See:/ 'diskList' smart constructor.
+data DiskList = DiskList'
+    { _dlNextPageToken :: !(Maybe Text)
+    , _dlKind          :: !Text
+    , _dlItems         :: !(Maybe [Disk])
+    , _dlSelfLink      :: !(Maybe Text)
+    , _dlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlNextPageToken'
+--
+-- * 'dlKind'
+--
+-- * 'dlItems'
+--
+-- * 'dlSelfLink'
+--
+-- * 'dlId'
+diskList
+    :: DiskList
+diskList =
+    DiskList'
+    { _dlNextPageToken = Nothing
+    , _dlKind = "compute#diskList"
+    , _dlItems = Nothing
+    , _dlSelfLink = Nothing
+    , _dlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+dlNextPageToken :: Lens' DiskList (Maybe Text)
+dlNextPageToken
+  = lens _dlNextPageToken
+      (\ s a -> s{_dlNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#diskList for lists of
+-- disks.
+dlKind :: Lens' DiskList Text
+dlKind = lens _dlKind (\ s a -> s{_dlKind = a})
+
+-- | [Output Only] A list of persistent disks.
+dlItems :: Lens' DiskList [Disk]
+dlItems
+  = lens _dlItems (\ s a -> s{_dlItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+dlSelfLink :: Lens' DiskList (Maybe Text)
+dlSelfLink
+  = lens _dlSelfLink (\ s a -> s{_dlSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+dlId :: Lens' DiskList (Maybe Text)
+dlId = lens _dlId (\ s a -> s{_dlId = a})
+
+instance FromJSON DiskList where
+        parseJSON
+          = withObject "DiskList"
+              (\ o ->
+                 DiskList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#diskList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON DiskList where
+        toJSON DiskList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _dlNextPageToken,
+                  Just ("kind" .= _dlKind), ("items" .=) <$> _dlItems,
+                  ("selfLink" .=) <$> _dlSelfLink,
+                  ("id" .=) <$> _dlId])
+
+--
+-- /See:/ 'targetPoolsAddInstanceRequest' smart constructor.
+newtype TargetPoolsAddInstanceRequest = TargetPoolsAddInstanceRequest'
+    { _tpairInstances :: Maybe [InstanceReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsAddInstanceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpairInstances'
+targetPoolsAddInstanceRequest
+    :: TargetPoolsAddInstanceRequest
+targetPoolsAddInstanceRequest =
+    TargetPoolsAddInstanceRequest'
+    { _tpairInstances = Nothing
+    }
+
+-- | A full or partial URL to an instance to add to this target pool. This
+-- can be a full or partial URL. For example, the following are valid URLs:
+-- -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project-id\/zones\/zone\/instances\/instance-name
+-- - projects\/project-id\/zones\/zone\/instances\/instance-name -
+-- zones\/zone\/instances\/instance-name
+tpairInstances :: Lens' TargetPoolsAddInstanceRequest [InstanceReference]
+tpairInstances
+  = lens _tpairInstances
+      (\ s a -> s{_tpairInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPoolsAddInstanceRequest where
+        parseJSON
+          = withObject "TargetPoolsAddInstanceRequest"
+              (\ o ->
+                 TargetPoolsAddInstanceRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON TargetPoolsAddInstanceRequest where
+        toJSON TargetPoolsAddInstanceRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _tpairInstances])
+
+--
+-- /See:/ 'instanceGroupsAddInstancesRequest' smart constructor.
+newtype InstanceGroupsAddInstancesRequest = InstanceGroupsAddInstancesRequest'
+    { _igairInstances :: Maybe [InstanceReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsAddInstancesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igairInstances'
+instanceGroupsAddInstancesRequest
+    :: InstanceGroupsAddInstancesRequest
+instanceGroupsAddInstancesRequest =
+    InstanceGroupsAddInstancesRequest'
+    { _igairInstances = Nothing
+    }
+
+-- | The list of instances to add to the instance group.
+igairInstances :: Lens' InstanceGroupsAddInstancesRequest [InstanceReference]
+igairInstances
+  = lens _igairInstances
+      (\ s a -> s{_igairInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstanceGroupsAddInstancesRequest
+         where
+        parseJSON
+          = withObject "InstanceGroupsAddInstancesRequest"
+              (\ o ->
+                 InstanceGroupsAddInstancesRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON InstanceGroupsAddInstancesRequest
+         where
+        toJSON InstanceGroupsAddInstancesRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _igairInstances])
+
+-- | [Output Only] A list of managed instance groups.
+--
+-- /See:/ 'instanceGroupManagerList' smart constructor.
+data InstanceGroupManagerList = InstanceGroupManagerList'
+    { _igmlNextPageToken :: !(Maybe Text)
+    , _igmlKind          :: !Text
+    , _igmlItems         :: !(Maybe [InstanceGroupManager])
+    , _igmlSelfLink      :: !(Maybe Text)
+    , _igmlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagerList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmlNextPageToken'
+--
+-- * 'igmlKind'
+--
+-- * 'igmlItems'
+--
+-- * 'igmlSelfLink'
+--
+-- * 'igmlId'
+instanceGroupManagerList
+    :: InstanceGroupManagerList
+instanceGroupManagerList =
+    InstanceGroupManagerList'
+    { _igmlNextPageToken = Nothing
+    , _igmlKind = "compute#instanceGroupManagerList"
+    , _igmlItems = Nothing
+    , _igmlSelfLink = Nothing
+    , _igmlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+igmlNextPageToken :: Lens' InstanceGroupManagerList (Maybe Text)
+igmlNextPageToken
+  = lens _igmlNextPageToken
+      (\ s a -> s{_igmlNextPageToken = a})
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceGroupManagerList for a list of managed instance groups.
+igmlKind :: Lens' InstanceGroupManagerList Text
+igmlKind = lens _igmlKind (\ s a -> s{_igmlKind = a})
+
+-- | [Output Only] A list of managed instance groups.
+igmlItems :: Lens' InstanceGroupManagerList [InstanceGroupManager]
+igmlItems
+  = lens _igmlItems (\ s a -> s{_igmlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The URL for this resource type. The server generates this
+-- URL.
+igmlSelfLink :: Lens' InstanceGroupManagerList (Maybe Text)
+igmlSelfLink
+  = lens _igmlSelfLink (\ s a -> s{_igmlSelfLink = a})
+
+-- | [Output Only] A unique identifier for this resource type. The server
+-- generates this identifier.
+igmlId :: Lens' InstanceGroupManagerList (Maybe Text)
+igmlId = lens _igmlId (\ s a -> s{_igmlId = a})
+
+instance FromJSON InstanceGroupManagerList where
+        parseJSON
+          = withObject "InstanceGroupManagerList"
+              (\ o ->
+                 InstanceGroupManagerList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#instanceGroupManagerList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceGroupManagerList where
+        toJSON InstanceGroupManagerList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _igmlNextPageToken,
+                  Just ("kind" .= _igmlKind),
+                  ("items" .=) <$> _igmlItems,
+                  ("selfLink" .=) <$> _igmlSelfLink,
+                  ("id" .=) <$> _igmlId])
+
+-- | An informational warning that appears when the list of addresses is
+-- empty.
+--
+-- /See:/ 'subnetworksScopedListWarning' smart constructor.
+data SubnetworksScopedListWarning = SubnetworksScopedListWarning'
+    { _sslwData    :: !(Maybe [SubnetworksScopedListWarningDataItem])
+    , _sslwCode    :: !(Maybe SubnetworksScopedListWarningCode)
+    , _sslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sslwData'
+--
+-- * 'sslwCode'
+--
+-- * 'sslwMessage'
+subnetworksScopedListWarning
+    :: SubnetworksScopedListWarning
+subnetworksScopedListWarning =
+    SubnetworksScopedListWarning'
+    { _sslwData = Nothing
+    , _sslwCode = Nothing
+    , _sslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+sslwData :: Lens' SubnetworksScopedListWarning [SubnetworksScopedListWarningDataItem]
+sslwData
+  = lens _sslwData (\ s a -> s{_sslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+sslwCode :: Lens' SubnetworksScopedListWarning (Maybe SubnetworksScopedListWarningCode)
+sslwCode = lens _sslwCode (\ s a -> s{_sslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+sslwMessage :: Lens' SubnetworksScopedListWarning (Maybe Text)
+sslwMessage
+  = lens _sslwMessage (\ s a -> s{_sslwMessage = a})
+
+instance FromJSON SubnetworksScopedListWarning where
+        parseJSON
+          = withObject "SubnetworksScopedListWarning"
+              (\ o ->
+                 SubnetworksScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON SubnetworksScopedListWarning where
+        toJSON SubnetworksScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _sslwData,
+                  ("code" .=) <$> _sslwCode,
+                  ("message" .=) <$> _sslwMessage])
+
+-- | An Image resource.
+--
+-- /See:/ 'image' smart constructor.
+data Image = Image'
+    { _iStatus            :: !(Maybe ImageStatus)
+    , _iDiskSizeGb        :: !(Maybe (Textual Int64))
+    , _iSourceType        :: !ImageSourceType
+    , _iSourceDiskId      :: !(Maybe Text)
+    , _iKind              :: !Text
+    , _iArchiveSizeBytes  :: !(Maybe (Textual Int64))
+    , _iFamily            :: !(Maybe Text)
+    , _iRawDisk           :: !(Maybe ImageRawDisk)
+    , _iSelfLink          :: !(Maybe Text)
+    , _iName              :: !(Maybe Text)
+    , _iCreationTimestamp :: !(Maybe Text)
+    , _iId                :: !(Maybe (Textual Word64))
+    , _iLicenses          :: !(Maybe [Text])
+    , _iSourceDisk        :: !(Maybe Text)
+    , _iDescription       :: !(Maybe Text)
+    , _iDeprecated        :: !(Maybe DeprecationStatus)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Image' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iStatus'
+--
+-- * 'iDiskSizeGb'
+--
+-- * 'iSourceType'
+--
+-- * 'iSourceDiskId'
+--
+-- * 'iKind'
+--
+-- * 'iArchiveSizeBytes'
+--
+-- * 'iFamily'
+--
+-- * 'iRawDisk'
+--
+-- * 'iSelfLink'
+--
+-- * 'iName'
+--
+-- * 'iCreationTimestamp'
+--
+-- * 'iId'
+--
+-- * 'iLicenses'
+--
+-- * 'iSourceDisk'
+--
+-- * 'iDescription'
+--
+-- * 'iDeprecated'
+image
+    :: Image
+image =
+    Image'
+    { _iStatus = Nothing
+    , _iDiskSizeGb = Nothing
+    , _iSourceType = Raw
+    , _iSourceDiskId = Nothing
+    , _iKind = "compute#image"
+    , _iArchiveSizeBytes = Nothing
+    , _iFamily = Nothing
+    , _iRawDisk = Nothing
+    , _iSelfLink = Nothing
+    , _iName = Nothing
+    , _iCreationTimestamp = Nothing
+    , _iId = Nothing
+    , _iLicenses = Nothing
+    , _iSourceDisk = Nothing
+    , _iDescription = Nothing
+    , _iDeprecated = Nothing
+    }
+
+-- | [Output Only] The status of the image. An image can be used to create
+-- other resources, such as instances, only after the image has been
+-- successfully created and the status is set to READY. Possible values are
+-- FAILED, PENDING, or READY.
+iStatus :: Lens' Image (Maybe ImageStatus)
+iStatus = lens _iStatus (\ s a -> s{_iStatus = a})
+
+-- | Size of the image when restored onto a persistent disk (in GB).
+iDiskSizeGb :: Lens' Image (Maybe Int64)
+iDiskSizeGb
+  = lens _iDiskSizeGb (\ s a -> s{_iDiskSizeGb = a}) .
+      mapping _Coerce
+
+-- | The type of the image used to create this disk. The default and only
+-- value is RAW
+iSourceType :: Lens' Image ImageSourceType
+iSourceType
+  = lens _iSourceType (\ s a -> s{_iSourceType = a})
+
+-- | The ID value of the disk used to create this image. This value may be
+-- used to determine whether the image was taken from the current or a
+-- previous instance of a given disk name.
+iSourceDiskId :: Lens' Image (Maybe Text)
+iSourceDiskId
+  = lens _iSourceDiskId
+      (\ s a -> s{_iSourceDiskId = a})
+
+-- | [Output Only] Type of the resource. Always compute#image for images.
+iKind :: Lens' Image Text
+iKind = lens _iKind (\ s a -> s{_iKind = a})
+
+-- | Size of the image tar.gz archive stored in Google Cloud Storage (in
+-- bytes).
+iArchiveSizeBytes :: Lens' Image (Maybe Int64)
+iArchiveSizeBytes
+  = lens _iArchiveSizeBytes
+      (\ s a -> s{_iArchiveSizeBytes = a})
+      . mapping _Coerce
+
+-- | The name of the image family to which this image belongs. You can create
+-- disks by specifying an image family instead of a specific image name.
+-- The image family always returns its latest image that is not deprecated.
+iFamily :: Lens' Image (Maybe Text)
+iFamily = lens _iFamily (\ s a -> s{_iFamily = a})
+
+-- | The parameters of the raw disk image.
+iRawDisk :: Lens' Image (Maybe ImageRawDisk)
+iRawDisk = lens _iRawDisk (\ s a -> s{_iRawDisk = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+iSelfLink :: Lens' Image (Maybe Text)
+iSelfLink
+  = lens _iSelfLink (\ s a -> s{_iSelfLink = a})
+
+-- | Name of the resource; provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+iName :: Lens' Image (Maybe Text)
+iName = lens _iName (\ s a -> s{_iName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+iCreationTimestamp :: Lens' Image (Maybe Text)
+iCreationTimestamp
+  = lens _iCreationTimestamp
+      (\ s a -> s{_iCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+iId :: Lens' Image (Maybe Word64)
+iId
+  = lens _iId (\ s a -> s{_iId = a}) . mapping _Coerce
+
+-- | Any applicable publicly visible licenses.
+iLicenses :: Lens' Image [Text]
+iLicenses
+  = lens _iLicenses (\ s a -> s{_iLicenses = a}) .
+      _Default
+      . _Coerce
+
+-- | URL of the The source disk used to create this image. This can be a full
+-- or valid partial URL. You must provide either this property or the
+-- rawDisk.source property but not both to create an image. For example,
+-- the following are valid values: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/disk\/disk
+-- - projects\/project\/zones\/zone\/disk\/disk - zones\/zone\/disks\/disk
+iSourceDisk :: Lens' Image (Maybe Text)
+iSourceDisk
+  = lens _iSourceDisk (\ s a -> s{_iSourceDisk = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+iDescription :: Lens' Image (Maybe Text)
+iDescription
+  = lens _iDescription (\ s a -> s{_iDescription = a})
+
+-- | The deprecation status associated with this image.
+iDeprecated :: Lens' Image (Maybe DeprecationStatus)
+iDeprecated
+  = lens _iDeprecated (\ s a -> s{_iDeprecated = a})
+
+instance FromJSON Image where
+        parseJSON
+          = withObject "Image"
+              (\ o ->
+                 Image' <$>
+                   (o .:? "status") <*> (o .:? "diskSizeGb") <*>
+                     (o .:? "sourceType" .!= Raw)
+                     <*> (o .:? "sourceDiskId")
+                     <*> (o .:? "kind" .!= "compute#image")
+                     <*> (o .:? "archiveSizeBytes")
+                     <*> (o .:? "family")
+                     <*> (o .:? "rawDisk")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "licenses" .!= mempty)
+                     <*> (o .:? "sourceDisk")
+                     <*> (o .:? "description")
+                     <*> (o .:? "deprecated"))
+
+instance ToJSON Image where
+        toJSON Image'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _iStatus,
+                  ("diskSizeGb" .=) <$> _iDiskSizeGb,
+                  Just ("sourceType" .= _iSourceType),
+                  ("sourceDiskId" .=) <$> _iSourceDiskId,
+                  Just ("kind" .= _iKind),
+                  ("archiveSizeBytes" .=) <$> _iArchiveSizeBytes,
+                  ("family" .=) <$> _iFamily,
+                  ("rawDisk" .=) <$> _iRawDisk,
+                  ("selfLink" .=) <$> _iSelfLink,
+                  ("name" .=) <$> _iName,
+                  ("creationTimestamp" .=) <$> _iCreationTimestamp,
+                  ("id" .=) <$> _iId, ("licenses" .=) <$> _iLicenses,
+                  ("sourceDisk" .=) <$> _iSourceDisk,
+                  ("description" .=) <$> _iDescription,
+                  ("deprecated" .=) <$> _iDeprecated])
+
+-- | A UrlMap resource. This resource defines the mapping from URL to the
+-- BackendService resource, based on the \"longest-match\" of the URL\'s
+-- host and path.
+--
+-- /See:/ 'urlMap' smart constructor.
+data URLMap = URLMap'
+    { _umTests             :: !(Maybe [URLMapTest])
+    , _umKind              :: !Text
+    , _umFingerprint       :: !(Maybe Base64)
+    , _umDefaultService    :: !(Maybe Text)
+    , _umSelfLink          :: !(Maybe Text)
+    , _umName              :: !(Maybe Text)
+    , _umCreationTimestamp :: !(Maybe Text)
+    , _umPathMatchers      :: !(Maybe [PathMatcher])
+    , _umId                :: !(Maybe (Textual Word64))
+    , _umHostRules         :: !(Maybe [HostRule])
+    , _umDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMap' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umTests'
+--
+-- * 'umKind'
+--
+-- * 'umFingerprint'
+--
+-- * 'umDefaultService'
+--
+-- * 'umSelfLink'
+--
+-- * 'umName'
+--
+-- * 'umCreationTimestamp'
+--
+-- * 'umPathMatchers'
+--
+-- * 'umId'
+--
+-- * 'umHostRules'
+--
+-- * 'umDescription'
+urlMap
+    :: URLMap
+urlMap =
+    URLMap'
+    { _umTests = Nothing
+    , _umKind = "compute#urlMap"
+    , _umFingerprint = Nothing
+    , _umDefaultService = Nothing
+    , _umSelfLink = Nothing
+    , _umName = Nothing
+    , _umCreationTimestamp = Nothing
+    , _umPathMatchers = Nothing
+    , _umId = Nothing
+    , _umHostRules = Nothing
+    , _umDescription = Nothing
+    }
+
+-- | The list of expected URL mappings. Request to update this UrlMap will
+-- succeed only if all of the test cases pass.
+umTests :: Lens' URLMap [URLMapTest]
+umTests
+  = lens _umTests (\ s a -> s{_umTests = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Type of the resource. Always compute#urlMaps for url maps.
+umKind :: Lens' URLMap Text
+umKind = lens _umKind (\ s a -> s{_umKind = a})
+
+-- | Fingerprint of this resource. A hash of the contents stored in this
+-- object. This field is used in optimistic locking. This field will be
+-- ignored when inserting a UrlMap. An up-to-date fingerprint must be
+-- provided in order to update the UrlMap.
+umFingerprint :: Lens' URLMap (Maybe ByteString)
+umFingerprint
+  = lens _umFingerprint
+      (\ s a -> s{_umFingerprint = a})
+      . mapping _Base64
+
+-- | The URL of the BackendService resource if none of the hostRules match.
+umDefaultService :: Lens' URLMap (Maybe Text)
+umDefaultService
+  = lens _umDefaultService
+      (\ s a -> s{_umDefaultService = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+umSelfLink :: Lens' URLMap (Maybe Text)
+umSelfLink
+  = lens _umSelfLink (\ s a -> s{_umSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+umName :: Lens' URLMap (Maybe Text)
+umName = lens _umName (\ s a -> s{_umName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+umCreationTimestamp :: Lens' URLMap (Maybe Text)
+umCreationTimestamp
+  = lens _umCreationTimestamp
+      (\ s a -> s{_umCreationTimestamp = a})
+
+-- | The list of named PathMatchers to use against the URL.
+umPathMatchers :: Lens' URLMap [PathMatcher]
+umPathMatchers
+  = lens _umPathMatchers
+      (\ s a -> s{_umPathMatchers = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+umId :: Lens' URLMap (Maybe Word64)
+umId
+  = lens _umId (\ s a -> s{_umId = a}) .
+      mapping _Coerce
+
+-- | The list of HostRules to use against the URL.
+umHostRules :: Lens' URLMap [HostRule]
+umHostRules
+  = lens _umHostRules (\ s a -> s{_umHostRules = a}) .
+      _Default
+      . _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+umDescription :: Lens' URLMap (Maybe Text)
+umDescription
+  = lens _umDescription
+      (\ s a -> s{_umDescription = a})
+
+instance FromJSON URLMap where
+        parseJSON
+          = withObject "URLMap"
+              (\ o ->
+                 URLMap' <$>
+                   (o .:? "tests" .!= mempty) <*>
+                     (o .:? "kind" .!= "compute#urlMap")
+                     <*> (o .:? "fingerprint")
+                     <*> (o .:? "defaultService")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "pathMatchers" .!= mempty)
+                     <*> (o .:? "id")
+                     <*> (o .:? "hostRules" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON URLMap where
+        toJSON URLMap'{..}
+          = object
+              (catMaybes
+                 [("tests" .=) <$> _umTests, Just ("kind" .= _umKind),
+                  ("fingerprint" .=) <$> _umFingerprint,
+                  ("defaultService" .=) <$> _umDefaultService,
+                  ("selfLink" .=) <$> _umSelfLink,
+                  ("name" .=) <$> _umName,
+                  ("creationTimestamp" .=) <$> _umCreationTimestamp,
+                  ("pathMatchers" .=) <$> _umPathMatchers,
+                  ("id" .=) <$> _umId,
+                  ("hostRules" .=) <$> _umHostRules,
+                  ("description" .=) <$> _umDescription])
+
+-- | A map of scoped instance group lists.
+--
+-- /See:/ 'instanceGroupAggregatedListItems' smart constructor.
+newtype InstanceGroupAggregatedListItems = InstanceGroupAggregatedListItems'
+    { _igaliAddtional :: HashMap Text InstanceGroupsScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igaliAddtional'
+instanceGroupAggregatedListItems
+    :: HashMap Text InstanceGroupsScopedList -- ^ 'igaliAddtional'
+    -> InstanceGroupAggregatedListItems
+instanceGroupAggregatedListItems pIgaliAddtional_ =
+    InstanceGroupAggregatedListItems'
+    { _igaliAddtional = _Coerce # pIgaliAddtional_
+    }
+
+-- | The name of the scope that contains this set of instance groups.
+igaliAddtional :: Lens' InstanceGroupAggregatedListItems (HashMap Text InstanceGroupsScopedList)
+igaliAddtional
+  = lens _igaliAddtional
+      (\ s a -> s{_igaliAddtional = a})
+      . _Coerce
+
+instance FromJSON InstanceGroupAggregatedListItems
+         where
+        parseJSON
+          = withObject "InstanceGroupAggregatedListItems"
+              (\ o ->
+                 InstanceGroupAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON InstanceGroupAggregatedListItems
+         where
+        toJSON = toJSON . _igaliAddtional
+
+-- | Contains a list of TargetPool resources.
+--
+-- /See:/ 'targetPoolList' smart constructor.
+data TargetPoolList = TargetPoolList'
+    { _tplNextPageToken :: !(Maybe Text)
+    , _tplKind          :: !Text
+    , _tplItems         :: !(Maybe [TargetPool])
+    , _tplSelfLink      :: !(Maybe Text)
+    , _tplId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tplNextPageToken'
+--
+-- * 'tplKind'
+--
+-- * 'tplItems'
+--
+-- * 'tplSelfLink'
+--
+-- * 'tplId'
+targetPoolList
+    :: TargetPoolList
+targetPoolList =
+    TargetPoolList'
+    { _tplNextPageToken = Nothing
+    , _tplKind = "compute#targetPoolList"
+    , _tplItems = Nothing
+    , _tplSelfLink = Nothing
+    , _tplId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+tplNextPageToken :: Lens' TargetPoolList (Maybe Text)
+tplNextPageToken
+  = lens _tplNextPageToken
+      (\ s a -> s{_tplNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#targetPoolList for lists
+-- of target pools.
+tplKind :: Lens' TargetPoolList Text
+tplKind = lens _tplKind (\ s a -> s{_tplKind = a})
+
+-- | A list of TargetPool resources.
+tplItems :: Lens' TargetPoolList [TargetPool]
+tplItems
+  = lens _tplItems (\ s a -> s{_tplItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+tplSelfLink :: Lens' TargetPoolList (Maybe Text)
+tplSelfLink
+  = lens _tplSelfLink (\ s a -> s{_tplSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Defined by the server.
+tplId :: Lens' TargetPoolList (Maybe Text)
+tplId = lens _tplId (\ s a -> s{_tplId = a})
+
+instance FromJSON TargetPoolList where
+        parseJSON
+          = withObject "TargetPoolList"
+              (\ o ->
+                 TargetPoolList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#targetPoolList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetPoolList where
+        toJSON TargetPoolList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tplNextPageToken,
+                  Just ("kind" .= _tplKind),
+                  ("items" .=) <$> _tplItems,
+                  ("selfLink" .=) <$> _tplSelfLink,
+                  ("id" .=) <$> _tplId])
+
+--
+-- /See:/ 'targetInstanceAggregatedList' smart constructor.
+data TargetInstanceAggregatedList = TargetInstanceAggregatedList'
+    { _tialNextPageToken :: !(Maybe Text)
+    , _tialKind          :: !Text
+    , _tialItems         :: !(Maybe TargetInstanceAggregatedListItems)
+    , _tialSelfLink      :: !(Maybe Text)
+    , _tialId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstanceAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tialNextPageToken'
+--
+-- * 'tialKind'
+--
+-- * 'tialItems'
+--
+-- * 'tialSelfLink'
+--
+-- * 'tialId'
+targetInstanceAggregatedList
+    :: TargetInstanceAggregatedList
+targetInstanceAggregatedList =
+    TargetInstanceAggregatedList'
+    { _tialNextPageToken = Nothing
+    , _tialKind = "compute#targetInstanceAggregatedList"
+    , _tialItems = Nothing
+    , _tialSelfLink = Nothing
+    , _tialId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+tialNextPageToken :: Lens' TargetInstanceAggregatedList (Maybe Text)
+tialNextPageToken
+  = lens _tialNextPageToken
+      (\ s a -> s{_tialNextPageToken = a})
+
+-- | Type of resource.
+tialKind :: Lens' TargetInstanceAggregatedList Text
+tialKind = lens _tialKind (\ s a -> s{_tialKind = a})
+
+-- | A map of scoped target instance lists.
+tialItems :: Lens' TargetInstanceAggregatedList (Maybe TargetInstanceAggregatedListItems)
+tialItems
+  = lens _tialItems (\ s a -> s{_tialItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+tialSelfLink :: Lens' TargetInstanceAggregatedList (Maybe Text)
+tialSelfLink
+  = lens _tialSelfLink (\ s a -> s{_tialSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource; defined by the server.
+tialId :: Lens' TargetInstanceAggregatedList (Maybe Text)
+tialId = lens _tialId (\ s a -> s{_tialId = a})
+
+instance FromJSON TargetInstanceAggregatedList where
+        parseJSON
+          = withObject "TargetInstanceAggregatedList"
+              (\ o ->
+                 TargetInstanceAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#targetInstanceAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetInstanceAggregatedList where
+        toJSON TargetInstanceAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tialNextPageToken,
+                  Just ("kind" .= _tialKind),
+                  ("items" .=) <$> _tialItems,
+                  ("selfLink" .=) <$> _tialSelfLink,
+                  ("id" .=) <$> _tialId])
+
+--
+-- /See:/ 'disksScopedList' smart constructor.
+data DisksScopedList = DisksScopedList'
+    { _dslWarning :: !(Maybe DisksScopedListWarning)
+    , _dslDisks   :: !(Maybe [Disk])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisksScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dslWarning'
+--
+-- * 'dslDisks'
+disksScopedList
+    :: DisksScopedList
+disksScopedList =
+    DisksScopedList'
+    { _dslWarning = Nothing
+    , _dslDisks = Nothing
+    }
+
+-- | [Output Only] Informational warning which replaces the list of disks
+-- when the list is empty.
+dslWarning :: Lens' DisksScopedList (Maybe DisksScopedListWarning)
+dslWarning
+  = lens _dslWarning (\ s a -> s{_dslWarning = a})
+
+-- | [Output Only] List of disks contained in this scope.
+dslDisks :: Lens' DisksScopedList [Disk]
+dslDisks
+  = lens _dslDisks (\ s a -> s{_dslDisks = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DisksScopedList where
+        parseJSON
+          = withObject "DisksScopedList"
+              (\ o ->
+                 DisksScopedList' <$>
+                   (o .:? "warning") <*> (o .:? "disks" .!= mempty))
+
+instance ToJSON DisksScopedList where
+        toJSON DisksScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _dslWarning,
+                  ("disks" .=) <$> _dslDisks])
+
+--
+-- /See:/ 'instanceGroupManagersScopedList' smart constructor.
+data InstanceGroupManagersScopedList = InstanceGroupManagersScopedList'
+    { _igmslWarning               :: !(Maybe InstanceGroupManagersScopedListWarning)
+    , _igmslInstanceGroupManagers :: !(Maybe [InstanceGroupManager])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmslWarning'
+--
+-- * 'igmslInstanceGroupManagers'
+instanceGroupManagersScopedList
+    :: InstanceGroupManagersScopedList
+instanceGroupManagersScopedList =
+    InstanceGroupManagersScopedList'
+    { _igmslWarning = Nothing
+    , _igmslInstanceGroupManagers = Nothing
+    }
+
+-- | [Output Only] The warning that replaces the list of managed instance
+-- groups when the list is empty.
+igmslWarning :: Lens' InstanceGroupManagersScopedList (Maybe InstanceGroupManagersScopedListWarning)
+igmslWarning
+  = lens _igmslWarning (\ s a -> s{_igmslWarning = a})
+
+-- | [Output Only] The list of managed instance groups that are contained in
+-- the specified project and zone.
+igmslInstanceGroupManagers :: Lens' InstanceGroupManagersScopedList [InstanceGroupManager]
+igmslInstanceGroupManagers
+  = lens _igmslInstanceGroupManagers
+      (\ s a -> s{_igmslInstanceGroupManagers = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstanceGroupManagersScopedList
+         where
+        parseJSON
+          = withObject "InstanceGroupManagersScopedList"
+              (\ o ->
+                 InstanceGroupManagersScopedList' <$>
+                   (o .:? "warning") <*>
+                     (o .:? "instanceGroupManagers" .!= mempty))
+
+instance ToJSON InstanceGroupManagersScopedList where
+        toJSON InstanceGroupManagersScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _igmslWarning,
+                  ("instanceGroupManagers" .=) <$>
+                    _igmslInstanceGroupManagers])
+
+--
+-- /See:/ 'diskAggregatedList' smart constructor.
+data DiskAggregatedList = DiskAggregatedList'
+    { _dalNextPageToken :: !(Maybe Text)
+    , _dalKind          :: !Text
+    , _dalItems         :: !(Maybe DiskAggregatedListItems)
+    , _dalSelfLink      :: !(Maybe Text)
+    , _dalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dalNextPageToken'
+--
+-- * 'dalKind'
+--
+-- * 'dalItems'
+--
+-- * 'dalSelfLink'
+--
+-- * 'dalId'
+diskAggregatedList
+    :: DiskAggregatedList
+diskAggregatedList =
+    DiskAggregatedList'
+    { _dalNextPageToken = Nothing
+    , _dalKind = "compute#diskAggregatedList"
+    , _dalItems = Nothing
+    , _dalSelfLink = Nothing
+    , _dalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+dalNextPageToken :: Lens' DiskAggregatedList (Maybe Text)
+dalNextPageToken
+  = lens _dalNextPageToken
+      (\ s a -> s{_dalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#diskAggregatedList for
+-- aggregated lists of persistent disks.
+dalKind :: Lens' DiskAggregatedList Text
+dalKind = lens _dalKind (\ s a -> s{_dalKind = a})
+
+-- | [Output Only] A map of scoped disk lists.
+dalItems :: Lens' DiskAggregatedList (Maybe DiskAggregatedListItems)
+dalItems = lens _dalItems (\ s a -> s{_dalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+dalSelfLink :: Lens' DiskAggregatedList (Maybe Text)
+dalSelfLink
+  = lens _dalSelfLink (\ s a -> s{_dalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+dalId :: Lens' DiskAggregatedList (Maybe Text)
+dalId = lens _dalId (\ s a -> s{_dalId = a})
+
+instance FromJSON DiskAggregatedList where
+        parseJSON
+          = withObject "DiskAggregatedList"
+              (\ o ->
+                 DiskAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#diskAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON DiskAggregatedList where
+        toJSON DiskAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _dalNextPageToken,
+                  Just ("kind" .= _dalKind),
+                  ("items" .=) <$> _dalItems,
+                  ("selfLink" .=) <$> _dalSelfLink,
+                  ("id" .=) <$> _dalId])
+
+--
+-- /See:/ 'instanceWithNamedPorts' smart constructor.
+data InstanceWithNamedPorts = InstanceWithNamedPorts'
+    { _iwnpStatus     :: !(Maybe InstanceWithNamedPortsStatus)
+    , _iwnpNamedPorts :: !(Maybe [NamedPort])
+    , _iwnpInstance   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceWithNamedPorts' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iwnpStatus'
+--
+-- * 'iwnpNamedPorts'
+--
+-- * 'iwnpInstance'
+instanceWithNamedPorts
+    :: InstanceWithNamedPorts
+instanceWithNamedPorts =
+    InstanceWithNamedPorts'
+    { _iwnpStatus = Nothing
+    , _iwnpNamedPorts = Nothing
+    , _iwnpInstance = Nothing
+    }
+
+-- | [Output Only] The status of the instance.
+iwnpStatus :: Lens' InstanceWithNamedPorts (Maybe InstanceWithNamedPortsStatus)
+iwnpStatus
+  = lens _iwnpStatus (\ s a -> s{_iwnpStatus = a})
+
+-- | [Output Only] The named ports that belong to this instance group.
+iwnpNamedPorts :: Lens' InstanceWithNamedPorts [NamedPort]
+iwnpNamedPorts
+  = lens _iwnpNamedPorts
+      (\ s a -> s{_iwnpNamedPorts = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] The URL of the instance.
+iwnpInstance :: Lens' InstanceWithNamedPorts (Maybe Text)
+iwnpInstance
+  = lens _iwnpInstance (\ s a -> s{_iwnpInstance = a})
+
+instance FromJSON InstanceWithNamedPorts where
+        parseJSON
+          = withObject "InstanceWithNamedPorts"
+              (\ o ->
+                 InstanceWithNamedPorts' <$>
+                   (o .:? "status") <*> (o .:? "namedPorts" .!= mempty)
+                     <*> (o .:? "instance"))
+
+instance ToJSON InstanceWithNamedPorts where
+        toJSON InstanceWithNamedPorts'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _iwnpStatus,
+                  ("namedPorts" .=) <$> _iwnpNamedPorts,
+                  ("instance" .=) <$> _iwnpInstance])
+
+--
+-- /See:/ 'forwardingRulesScopedList' smart constructor.
+data ForwardingRulesScopedList = ForwardingRulesScopedList'
+    { _frslWarning         :: !(Maybe ForwardingRulesScopedListWarning)
+    , _frslForwardingRules :: !(Maybe [ForwardingRule])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRulesScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frslWarning'
+--
+-- * 'frslForwardingRules'
+forwardingRulesScopedList
+    :: ForwardingRulesScopedList
+forwardingRulesScopedList =
+    ForwardingRulesScopedList'
+    { _frslWarning = Nothing
+    , _frslForwardingRules = Nothing
+    }
+
+-- | Informational warning which replaces the list of forwarding rules when
+-- the list is empty.
+frslWarning :: Lens' ForwardingRulesScopedList (Maybe ForwardingRulesScopedListWarning)
+frslWarning
+  = lens _frslWarning (\ s a -> s{_frslWarning = a})
+
+-- | List of forwarding rules contained in this scope.
+frslForwardingRules :: Lens' ForwardingRulesScopedList [ForwardingRule]
+frslForwardingRules
+  = lens _frslForwardingRules
+      (\ s a -> s{_frslForwardingRules = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ForwardingRulesScopedList where
+        parseJSON
+          = withObject "ForwardingRulesScopedList"
+              (\ o ->
+                 ForwardingRulesScopedList' <$>
+                   (o .:? "warning") <*>
+                     (o .:? "forwardingRules" .!= mempty))
+
+instance ToJSON ForwardingRulesScopedList where
+        toJSON ForwardingRulesScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _frslWarning,
+                  ("forwardingRules" .=) <$> _frslForwardingRules])
+
+--
+-- /See:/ 'instanceReference' smart constructor.
+newtype InstanceReference = InstanceReference'
+    { _iInstance :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iInstance'
+instanceReference
+    :: InstanceReference
+instanceReference =
+    InstanceReference'
+    { _iInstance = Nothing
+    }
+
+-- | The URL for a specific instance.
+iInstance :: Lens' InstanceReference (Maybe Text)
+iInstance
+  = lens _iInstance (\ s a -> s{_iInstance = a})
+
+instance FromJSON InstanceReference where
+        parseJSON
+          = withObject "InstanceReference"
+              (\ o -> InstanceReference' <$> (o .:? "instance"))
+
+instance ToJSON InstanceReference where
+        toJSON InstanceReference'{..}
+          = object (catMaybes [("instance" .=) <$> _iInstance])
+
+--
+-- /See:/ 'operationAggregatedList' smart constructor.
+data OperationAggregatedList = OperationAggregatedList'
+    { _oalNextPageToken :: !(Maybe Text)
+    , _oalKind          :: !Text
+    , _oalItems         :: !(Maybe OperationAggregatedListItems)
+    , _oalSelfLink      :: !(Maybe Text)
+    , _oalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oalNextPageToken'
+--
+-- * 'oalKind'
+--
+-- * 'oalItems'
+--
+-- * 'oalSelfLink'
+--
+-- * 'oalId'
+operationAggregatedList
+    :: OperationAggregatedList
+operationAggregatedList =
+    OperationAggregatedList'
+    { _oalNextPageToken = Nothing
+    , _oalKind = "compute#operationAggregatedList"
+    , _oalItems = Nothing
+    , _oalSelfLink = Nothing
+    , _oalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+oalNextPageToken :: Lens' OperationAggregatedList (Maybe Text)
+oalNextPageToken
+  = lens _oalNextPageToken
+      (\ s a -> s{_oalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#operationAggregatedList
+-- for aggregated lists of operations.
+oalKind :: Lens' OperationAggregatedList Text
+oalKind = lens _oalKind (\ s a -> s{_oalKind = a})
+
+-- | [Output Only] A map of scoped operation lists.
+oalItems :: Lens' OperationAggregatedList (Maybe OperationAggregatedListItems)
+oalItems = lens _oalItems (\ s a -> s{_oalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+oalSelfLink :: Lens' OperationAggregatedList (Maybe Text)
+oalSelfLink
+  = lens _oalSelfLink (\ s a -> s{_oalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+oalId :: Lens' OperationAggregatedList (Maybe Text)
+oalId = lens _oalId (\ s a -> s{_oalId = a})
+
+instance FromJSON OperationAggregatedList where
+        parseJSON
+          = withObject "OperationAggregatedList"
+              (\ o ->
+                 OperationAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#operationAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON OperationAggregatedList where
+        toJSON OperationAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _oalNextPageToken,
+                  Just ("kind" .= _oalKind),
+                  ("items" .=) <$> _oalItems,
+                  ("selfLink" .=) <$> _oalSelfLink,
+                  ("id" .=) <$> _oalId])
+
+--
+-- /See:/ 'operationsScopedList' smart constructor.
+data OperationsScopedList = OperationsScopedList'
+    { _oslWarning    :: !(Maybe OperationsScopedListWarning)
+    , _oslOperations :: !(Maybe [Operation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oslWarning'
+--
+-- * 'oslOperations'
+operationsScopedList
+    :: OperationsScopedList
+operationsScopedList =
+    OperationsScopedList'
+    { _oslWarning = Nothing
+    , _oslOperations = Nothing
+    }
+
+-- | [Output Only] Informational warning which replaces the list of
+-- operations when the list is empty.
+oslWarning :: Lens' OperationsScopedList (Maybe OperationsScopedListWarning)
+oslWarning
+  = lens _oslWarning (\ s a -> s{_oslWarning = a})
+
+-- | [Output Only] List of operations contained in this scope.
+oslOperations :: Lens' OperationsScopedList [Operation]
+oslOperations
+  = lens _oslOperations
+      (\ s a -> s{_oslOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON OperationsScopedList where
+        parseJSON
+          = withObject "OperationsScopedList"
+              (\ o ->
+                 OperationsScopedList' <$>
+                   (o .:? "warning") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON OperationsScopedList where
+        toJSON OperationsScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _oslWarning,
+                  ("operations" .=) <$> _oslOperations])
+
+-- | The named port. For example: .
+--
+-- /See:/ 'namedPort' smart constructor.
+data NamedPort = NamedPort'
+    { _npName :: !(Maybe Text)
+    , _npPort :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NamedPort' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'npName'
+--
+-- * 'npPort'
+namedPort
+    :: NamedPort
+namedPort =
+    NamedPort'
+    { _npName = Nothing
+    , _npPort = Nothing
+    }
+
+-- | The name for this named port. The name must be 1-63 characters long, and
+-- comply with RFC1035.
+npName :: Lens' NamedPort (Maybe Text)
+npName = lens _npName (\ s a -> s{_npName = a})
+
+-- | The port number, which can be a value between 1 and 65535.
+npPort :: Lens' NamedPort (Maybe Int32)
+npPort
+  = lens _npPort (\ s a -> s{_npPort = a}) .
+      mapping _Coerce
+
+instance FromJSON NamedPort where
+        parseJSON
+          = withObject "NamedPort"
+              (\ o ->
+                 NamedPort' <$> (o .:? "name") <*> (o .:? "port"))
+
+instance ToJSON NamedPort where
+        toJSON NamedPort'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _npName, ("port" .=) <$> _npPort])
+
+-- | Contains a list of TargetInstance resources.
+--
+-- /See:/ 'targetInstanceList' smart constructor.
+data TargetInstanceList = TargetInstanceList'
+    { _tilNextPageToken :: !(Maybe Text)
+    , _tilKind          :: !Text
+    , _tilItems         :: !(Maybe [TargetInstance])
+    , _tilSelfLink      :: !(Maybe Text)
+    , _tilId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstanceList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tilNextPageToken'
+--
+-- * 'tilKind'
+--
+-- * 'tilItems'
+--
+-- * 'tilSelfLink'
+--
+-- * 'tilId'
+targetInstanceList
+    :: TargetInstanceList
+targetInstanceList =
+    TargetInstanceList'
+    { _tilNextPageToken = Nothing
+    , _tilKind = "compute#targetInstanceList"
+    , _tilItems = Nothing
+    , _tilSelfLink = Nothing
+    , _tilId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+tilNextPageToken :: Lens' TargetInstanceList (Maybe Text)
+tilNextPageToken
+  = lens _tilNextPageToken
+      (\ s a -> s{_tilNextPageToken = a})
+
+-- | Type of resource.
+tilKind :: Lens' TargetInstanceList Text
+tilKind = lens _tilKind (\ s a -> s{_tilKind = a})
+
+-- | A list of TargetInstance resources.
+tilItems :: Lens' TargetInstanceList [TargetInstance]
+tilItems
+  = lens _tilItems (\ s a -> s{_tilItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+tilSelfLink :: Lens' TargetInstanceList (Maybe Text)
+tilSelfLink
+  = lens _tilSelfLink (\ s a -> s{_tilSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+tilId :: Lens' TargetInstanceList (Maybe Text)
+tilId = lens _tilId (\ s a -> s{_tilId = a})
+
+instance FromJSON TargetInstanceList where
+        parseJSON
+          = withObject "TargetInstanceList"
+              (\ o ->
+                 TargetInstanceList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#targetInstanceList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetInstanceList where
+        toJSON TargetInstanceList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tilNextPageToken,
+                  Just ("kind" .= _tilKind),
+                  ("items" .=) <$> _tilItems,
+                  ("selfLink" .=) <$> _tilSelfLink,
+                  ("id" .=) <$> _tilId])
+
+--
+-- /See:/ 'instanceGroupManagerAggregatedList' smart constructor.
+data InstanceGroupManagerAggregatedList = InstanceGroupManagerAggregatedList'
+    { _igmalNextPageToken :: !(Maybe Text)
+    , _igmalKind          :: !Text
+    , _igmalItems         :: !(Maybe InstanceGroupManagerAggregatedListItems)
+    , _igmalSelfLink      :: !(Maybe Text)
+    , _igmalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagerAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmalNextPageToken'
+--
+-- * 'igmalKind'
+--
+-- * 'igmalItems'
+--
+-- * 'igmalSelfLink'
+--
+-- * 'igmalId'
+instanceGroupManagerAggregatedList
+    :: InstanceGroupManagerAggregatedList
+instanceGroupManagerAggregatedList =
+    InstanceGroupManagerAggregatedList'
+    { _igmalNextPageToken = Nothing
+    , _igmalKind = "compute#instanceGroupManagerAggregatedList"
+    , _igmalItems = Nothing
+    , _igmalSelfLink = Nothing
+    , _igmalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+igmalNextPageToken :: Lens' InstanceGroupManagerAggregatedList (Maybe Text)
+igmalNextPageToken
+  = lens _igmalNextPageToken
+      (\ s a -> s{_igmalNextPageToken = a})
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceGroupManagerAggregatedList for an aggregated list of
+-- managed instance groups.
+igmalKind :: Lens' InstanceGroupManagerAggregatedList Text
+igmalKind
+  = lens _igmalKind (\ s a -> s{_igmalKind = a})
+
+-- | [Output Only] A map of filtered managed instance group lists.
+igmalItems :: Lens' InstanceGroupManagerAggregatedList (Maybe InstanceGroupManagerAggregatedListItems)
+igmalItems
+  = lens _igmalItems (\ s a -> s{_igmalItems = a})
+
+-- | [Output Only] The URL for this resource type. The server generates this
+-- URL.
+igmalSelfLink :: Lens' InstanceGroupManagerAggregatedList (Maybe Text)
+igmalSelfLink
+  = lens _igmalSelfLink
+      (\ s a -> s{_igmalSelfLink = a})
+
+-- | [Output Only] A unique identifier for this aggregated list of managed
+-- instance groups. The server generates this identifier.
+igmalId :: Lens' InstanceGroupManagerAggregatedList (Maybe Text)
+igmalId = lens _igmalId (\ s a -> s{_igmalId = a})
+
+instance FromJSON InstanceGroupManagerAggregatedList
+         where
+        parseJSON
+          = withObject "InstanceGroupManagerAggregatedList"
+              (\ o ->
+                 InstanceGroupManagerAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#instanceGroupManagerAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceGroupManagerAggregatedList
+         where
+        toJSON InstanceGroupManagerAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _igmalNextPageToken,
+                  Just ("kind" .= _igmalKind),
+                  ("items" .=) <$> _igmalItems,
+                  ("selfLink" .=) <$> _igmalSelfLink,
+                  ("id" .=) <$> _igmalId])
+
+--
+-- /See:/ 'targetPoolsScopedList' smart constructor.
+data TargetPoolsScopedList = TargetPoolsScopedList'
+    { _tpslWarning     :: !(Maybe TargetPoolsScopedListWarning)
+    , _tpslTargetPools :: !(Maybe [TargetPool])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpslWarning'
+--
+-- * 'tpslTargetPools'
+targetPoolsScopedList
+    :: TargetPoolsScopedList
+targetPoolsScopedList =
+    TargetPoolsScopedList'
+    { _tpslWarning = Nothing
+    , _tpslTargetPools = Nothing
+    }
+
+-- | Informational warning which replaces the list of addresses when the list
+-- is empty.
+tpslWarning :: Lens' TargetPoolsScopedList (Maybe TargetPoolsScopedListWarning)
+tpslWarning
+  = lens _tpslWarning (\ s a -> s{_tpslWarning = a})
+
+-- | List of target pools contained in this scope.
+tpslTargetPools :: Lens' TargetPoolsScopedList [TargetPool]
+tpslTargetPools
+  = lens _tpslTargetPools
+      (\ s a -> s{_tpslTargetPools = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPoolsScopedList where
+        parseJSON
+          = withObject "TargetPoolsScopedList"
+              (\ o ->
+                 TargetPoolsScopedList' <$>
+                   (o .:? "warning") <*>
+                     (o .:? "targetPools" .!= mempty))
+
+instance ToJSON TargetPoolsScopedList where
+        toJSON TargetPoolsScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _tpslWarning,
+                  ("targetPools" .=) <$> _tpslTargetPools])
+
+--
+-- /See:/ 'forwardingRuleAggregatedList' smart constructor.
+data ForwardingRuleAggregatedList = ForwardingRuleAggregatedList'
+    { _fralNextPageToken :: !(Maybe Text)
+    , _fralKind          :: !Text
+    , _fralItems         :: !(Maybe ForwardingRuleAggregatedListItems)
+    , _fralSelfLink      :: !(Maybe Text)
+    , _fralId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRuleAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fralNextPageToken'
+--
+-- * 'fralKind'
+--
+-- * 'fralItems'
+--
+-- * 'fralSelfLink'
+--
+-- * 'fralId'
+forwardingRuleAggregatedList
+    :: ForwardingRuleAggregatedList
+forwardingRuleAggregatedList =
+    ForwardingRuleAggregatedList'
+    { _fralNextPageToken = Nothing
+    , _fralKind = "compute#forwardingRuleAggregatedList"
+    , _fralItems = Nothing
+    , _fralSelfLink = Nothing
+    , _fralId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+fralNextPageToken :: Lens' ForwardingRuleAggregatedList (Maybe Text)
+fralNextPageToken
+  = lens _fralNextPageToken
+      (\ s a -> s{_fralNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always
+-- compute#forwardingRuleAggregatedList for lists of forwarding rules.
+fralKind :: Lens' ForwardingRuleAggregatedList Text
+fralKind = lens _fralKind (\ s a -> s{_fralKind = a})
+
+-- | A map of scoped forwarding rule lists.
+fralItems :: Lens' ForwardingRuleAggregatedList (Maybe ForwardingRuleAggregatedListItems)
+fralItems
+  = lens _fralItems (\ s a -> s{_fralItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+fralSelfLink :: Lens' ForwardingRuleAggregatedList (Maybe Text)
+fralSelfLink
+  = lens _fralSelfLink (\ s a -> s{_fralSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+fralId :: Lens' ForwardingRuleAggregatedList (Maybe Text)
+fralId = lens _fralId (\ s a -> s{_fralId = a})
+
+instance FromJSON ForwardingRuleAggregatedList where
+        parseJSON
+          = withObject "ForwardingRuleAggregatedList"
+              (\ o ->
+                 ForwardingRuleAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#forwardingRuleAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON ForwardingRuleAggregatedList where
+        toJSON ForwardingRuleAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _fralNextPageToken,
+                  Just ("kind" .= _fralKind),
+                  ("items" .=) <$> _fralItems,
+                  ("selfLink" .=) <$> _fralSelfLink,
+                  ("id" .=) <$> _fralId])
+
+--
+-- /See:/ 'targetReference' smart constructor.
+newtype TargetReference = TargetReference'
+    { _trTarget :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'trTarget'
+targetReference
+    :: TargetReference
+targetReference =
+    TargetReference'
+    { _trTarget = Nothing
+    }
+
+trTarget :: Lens' TargetReference (Maybe Text)
+trTarget = lens _trTarget (\ s a -> s{_trTarget = a})
+
+instance FromJSON TargetReference where
+        parseJSON
+          = withObject "TargetReference"
+              (\ o -> TargetReference' <$> (o .:? "target"))
+
+instance ToJSON TargetReference where
+        toJSON TargetReference'{..}
+          = object (catMaybes [("target" .=) <$> _trTarget])
+
+--
+-- /See:/ 'targetPoolAggregatedList' smart constructor.
+data TargetPoolAggregatedList = TargetPoolAggregatedList'
+    { _tpalNextPageToken :: !(Maybe Text)
+    , _tpalKind          :: !Text
+    , _tpalItems         :: !(Maybe TargetPoolAggregatedListItems)
+    , _tpalSelfLink      :: !(Maybe Text)
+    , _tpalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpalNextPageToken'
+--
+-- * 'tpalKind'
+--
+-- * 'tpalItems'
+--
+-- * 'tpalSelfLink'
+--
+-- * 'tpalId'
+targetPoolAggregatedList
+    :: TargetPoolAggregatedList
+targetPoolAggregatedList =
+    TargetPoolAggregatedList'
+    { _tpalNextPageToken = Nothing
+    , _tpalKind = "compute#targetPoolAggregatedList"
+    , _tpalItems = Nothing
+    , _tpalSelfLink = Nothing
+    , _tpalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+tpalNextPageToken :: Lens' TargetPoolAggregatedList (Maybe Text)
+tpalNextPageToken
+  = lens _tpalNextPageToken
+      (\ s a -> s{_tpalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#targetPoolAggregatedList
+-- for aggregated lists of target pools.
+tpalKind :: Lens' TargetPoolAggregatedList Text
+tpalKind = lens _tpalKind (\ s a -> s{_tpalKind = a})
+
+-- | [Output Only] A map of scoped target pool lists.
+tpalItems :: Lens' TargetPoolAggregatedList (Maybe TargetPoolAggregatedListItems)
+tpalItems
+  = lens _tpalItems (\ s a -> s{_tpalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+tpalSelfLink :: Lens' TargetPoolAggregatedList (Maybe Text)
+tpalSelfLink
+  = lens _tpalSelfLink (\ s a -> s{_tpalSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Defined by the server.
+tpalId :: Lens' TargetPoolAggregatedList (Maybe Text)
+tpalId = lens _tpalId (\ s a -> s{_tpalId = a})
+
+instance FromJSON TargetPoolAggregatedList where
+        parseJSON
+          = withObject "TargetPoolAggregatedList"
+              (\ o ->
+                 TargetPoolAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#targetPoolAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetPoolAggregatedList where
+        toJSON TargetPoolAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tpalNextPageToken,
+                  Just ("kind" .= _tpalKind),
+                  ("items" .=) <$> _tpalItems,
+                  ("selfLink" .=) <$> _tpalSelfLink,
+                  ("id" .=) <$> _tpalId])
+
+--
+-- /See:/ 'operationsScopedListWarningDataItem' smart constructor.
+data OperationsScopedListWarningDataItem = OperationsScopedListWarningDataItem'
+    { _oslwdiValue :: !(Maybe Text)
+    , _oslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oslwdiValue'
+--
+-- * 'oslwdiKey'
+operationsScopedListWarningDataItem
+    :: OperationsScopedListWarningDataItem
+operationsScopedListWarningDataItem =
+    OperationsScopedListWarningDataItem'
+    { _oslwdiValue = Nothing
+    , _oslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+oslwdiValue :: Lens' OperationsScopedListWarningDataItem (Maybe Text)
+oslwdiValue
+  = lens _oslwdiValue (\ s a -> s{_oslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+oslwdiKey :: Lens' OperationsScopedListWarningDataItem (Maybe Text)
+oslwdiKey
+  = lens _oslwdiKey (\ s a -> s{_oslwdiKey = a})
+
+instance FromJSON OperationsScopedListWarningDataItem
+         where
+        parseJSON
+          = withObject "OperationsScopedListWarningDataItem"
+              (\ o ->
+                 OperationsScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON OperationsScopedListWarningDataItem
+         where
+        toJSON OperationsScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _oslwdiValue,
+                  ("key" .=) <$> _oslwdiKey])
+
+-- | A TargetPool resource. This resource defines a pool of instances,
+-- associated HttpHealthCheck resources, and the fallback target pool.
+--
+-- /See:/ 'targetPool' smart constructor.
+data TargetPool = TargetPool'
+    { _tpSessionAffinity   :: !(Maybe TargetPoolSessionAffinity)
+    , _tpBackupPool        :: !(Maybe Text)
+    , _tpKind              :: !Text
+    , _tpSelfLink          :: !(Maybe Text)
+    , _tpName              :: !(Maybe Text)
+    , _tpCreationTimestamp :: !(Maybe Text)
+    , _tpInstances         :: !(Maybe [Text])
+    , _tpId                :: !(Maybe (Textual Word64))
+    , _tpFailoverRatio     :: !(Maybe (Textual Double))
+    , _tpRegion            :: !(Maybe Text)
+    , _tpDescription       :: !(Maybe Text)
+    , _tpHealthChecks      :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPool' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpSessionAffinity'
+--
+-- * 'tpBackupPool'
+--
+-- * 'tpKind'
+--
+-- * 'tpSelfLink'
+--
+-- * 'tpName'
+--
+-- * 'tpCreationTimestamp'
+--
+-- * 'tpInstances'
+--
+-- * 'tpId'
+--
+-- * 'tpFailoverRatio'
+--
+-- * 'tpRegion'
+--
+-- * 'tpDescription'
+--
+-- * 'tpHealthChecks'
+targetPool
+    :: TargetPool
+targetPool =
+    TargetPool'
+    { _tpSessionAffinity = Nothing
+    , _tpBackupPool = Nothing
+    , _tpKind = "compute#targetPool"
+    , _tpSelfLink = Nothing
+    , _tpName = Nothing
+    , _tpCreationTimestamp = Nothing
+    , _tpInstances = Nothing
+    , _tpId = Nothing
+    , _tpFailoverRatio = Nothing
+    , _tpRegion = Nothing
+    , _tpDescription = Nothing
+    , _tpHealthChecks = Nothing
+    }
+
+-- | Sesssion affinity option, must be one of the following values: NONE:
+-- Connections from the same client IP may go to any instance in the pool.
+-- CLIENT_IP: Connections from the same client IP will go to the same
+-- instance in the pool while that instance remains healthy.
+-- CLIENT_IP_PROTO: Connections from the same client IP with the same IP
+-- protocol will go to the same instance in the pool while that instance
+-- remains healthy.
+tpSessionAffinity :: Lens' TargetPool (Maybe TargetPoolSessionAffinity)
+tpSessionAffinity
+  = lens _tpSessionAffinity
+      (\ s a -> s{_tpSessionAffinity = a})
+
+-- | This field is applicable only when the containing target pool is serving
+-- a forwarding rule as the primary pool, and its failoverRatio field is
+-- properly set to a value between [0, 1]. backupPool and failoverRatio
+-- together define the fallback behavior of the primary target pool: if the
+-- ratio of the healthy instances in the primary pool is at or below
+-- failoverRatio, traffic arriving at the load-balanced IP will be directed
+-- to the backup pool. In case where failoverRatio and backupPool are not
+-- set, or all the instances in the backup pool are unhealthy, the traffic
+-- will be directed back to the primary pool in the \"force\" mode, where
+-- traffic will be spread to the healthy instances with the best effort, or
+-- to all instances when no instance is healthy.
+tpBackupPool :: Lens' TargetPool (Maybe Text)
+tpBackupPool
+  = lens _tpBackupPool (\ s a -> s{_tpBackupPool = a})
+
+-- | [Output Only] Type of the resource. Always compute#targetPool for target
+-- pools.
+tpKind :: Lens' TargetPool Text
+tpKind = lens _tpKind (\ s a -> s{_tpKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+tpSelfLink :: Lens' TargetPool (Maybe Text)
+tpSelfLink
+  = lens _tpSelfLink (\ s a -> s{_tpSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+tpName :: Lens' TargetPool (Maybe Text)
+tpName = lens _tpName (\ s a -> s{_tpName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+tpCreationTimestamp :: Lens' TargetPool (Maybe Text)
+tpCreationTimestamp
+  = lens _tpCreationTimestamp
+      (\ s a -> s{_tpCreationTimestamp = a})
+
+-- | A list of resource URLs to the virtual machine instances serving this
+-- pool. They must live in zones contained in the same region as this pool.
+tpInstances :: Lens' TargetPool [Text]
+tpInstances
+  = lens _tpInstances (\ s a -> s{_tpInstances = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+tpId :: Lens' TargetPool (Maybe Word64)
+tpId
+  = lens _tpId (\ s a -> s{_tpId = a}) .
+      mapping _Coerce
+
+-- | This field is applicable only when the containing target pool is serving
+-- a forwarding rule as the primary pool (i.e., not as a backup pool to
+-- some other target pool). The value of the field must be in [0, 1]. If
+-- set, backupPool must also be set. They together define the fallback
+-- behavior of the primary target pool: if the ratio of the healthy
+-- instances in the primary pool is at or below this number, traffic
+-- arriving at the load-balanced IP will be directed to the backup pool. In
+-- case where failoverRatio is not set or all the instances in the backup
+-- pool are unhealthy, the traffic will be directed back to the primary
+-- pool in the \"force\" mode, where traffic will be spread to the healthy
+-- instances with the best effort, or to all instances when no instance is
+-- healthy.
+tpFailoverRatio :: Lens' TargetPool (Maybe Double)
+tpFailoverRatio
+  = lens _tpFailoverRatio
+      (\ s a -> s{_tpFailoverRatio = a})
+      . mapping _Coerce
+
+-- | [Output Only] URL of the region where the target pool resides.
+tpRegion :: Lens' TargetPool (Maybe Text)
+tpRegion = lens _tpRegion (\ s a -> s{_tpRegion = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+tpDescription :: Lens' TargetPool (Maybe Text)
+tpDescription
+  = lens _tpDescription
+      (\ s a -> s{_tpDescription = a})
+
+-- | A list of URLs to the HttpHealthCheck resource. A member instance in
+-- this pool is considered healthy if and only if all specified health
+-- checks pass. An empty list means all member instances will be considered
+-- healthy at all times.
+tpHealthChecks :: Lens' TargetPool [Text]
+tpHealthChecks
+  = lens _tpHealthChecks
+      (\ s a -> s{_tpHealthChecks = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPool where
+        parseJSON
+          = withObject "TargetPool"
+              (\ o ->
+                 TargetPool' <$>
+                   (o .:? "sessionAffinity") <*> (o .:? "backupPool")
+                     <*> (o .:? "kind" .!= "compute#targetPool")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "instances" .!= mempty)
+                     <*> (o .:? "id")
+                     <*> (o .:? "failoverRatio")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description")
+                     <*> (o .:? "healthChecks" .!= mempty))
+
+instance ToJSON TargetPool where
+        toJSON TargetPool'{..}
+          = object
+              (catMaybes
+                 [("sessionAffinity" .=) <$> _tpSessionAffinity,
+                  ("backupPool" .=) <$> _tpBackupPool,
+                  Just ("kind" .= _tpKind),
+                  ("selfLink" .=) <$> _tpSelfLink,
+                  ("name" .=) <$> _tpName,
+                  ("creationTimestamp" .=) <$> _tpCreationTimestamp,
+                  ("instances" .=) <$> _tpInstances,
+                  ("id" .=) <$> _tpId,
+                  ("failoverRatio" .=) <$> _tpFailoverRatio,
+                  ("region" .=) <$> _tpRegion,
+                  ("description" .=) <$> _tpDescription,
+                  ("healthChecks" .=) <$> _tpHealthChecks])
+
+-- | Contains a list of images.
+--
+-- /See:/ 'imageList' smart constructor.
+data ImageList = ImageList'
+    { _ilNextPageToken :: !(Maybe Text)
+    , _ilKind          :: !Text
+    , _ilItems         :: !(Maybe [Image])
+    , _ilSelfLink      :: !(Maybe Text)
+    , _ilId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImageList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ilNextPageToken'
+--
+-- * 'ilKind'
+--
+-- * 'ilItems'
+--
+-- * 'ilSelfLink'
+--
+-- * 'ilId'
+imageList
+    :: ImageList
+imageList =
+    ImageList'
+    { _ilNextPageToken = Nothing
+    , _ilKind = "compute#imageList"
+    , _ilItems = Nothing
+    , _ilSelfLink = Nothing
+    , _ilId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+ilNextPageToken :: Lens' ImageList (Maybe Text)
+ilNextPageToken
+  = lens _ilNextPageToken
+      (\ s a -> s{_ilNextPageToken = a})
+
+-- | Type of resource.
+ilKind :: Lens' ImageList Text
+ilKind = lens _ilKind (\ s a -> s{_ilKind = a})
+
+-- | [Output Only] A list of Image resources.
+ilItems :: Lens' ImageList [Image]
+ilItems
+  = lens _ilItems (\ s a -> s{_ilItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+ilSelfLink :: Lens' ImageList (Maybe Text)
+ilSelfLink
+  = lens _ilSelfLink (\ s a -> s{_ilSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+ilId :: Lens' ImageList (Maybe Text)
+ilId = lens _ilId (\ s a -> s{_ilId = a})
+
+instance FromJSON ImageList where
+        parseJSON
+          = withObject "ImageList"
+              (\ o ->
+                 ImageList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#imageList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON ImageList where
+        toJSON ImageList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ilNextPageToken,
+                  Just ("kind" .= _ilKind), ("items" .=) <$> _ilItems,
+                  ("selfLink" .=) <$> _ilSelfLink,
+                  ("id" .=) <$> _ilId])
+
+-- | Informational warning which replaces the list of addresses when the list
+-- is empty.
+--
+-- /See:/ 'vpnTunnelsScopedListWarning' smart constructor.
+data VPNTunnelsScopedListWarning = VPNTunnelsScopedListWarning'
+    { _vtslwData    :: !(Maybe [VPNTunnelsScopedListWarningDataItem])
+    , _vtslwCode    :: !(Maybe VPNTunnelsScopedListWarningCode)
+    , _vtslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnelsScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtslwData'
+--
+-- * 'vtslwCode'
+--
+-- * 'vtslwMessage'
+vpnTunnelsScopedListWarning
+    :: VPNTunnelsScopedListWarning
+vpnTunnelsScopedListWarning =
+    VPNTunnelsScopedListWarning'
+    { _vtslwData = Nothing
+    , _vtslwCode = Nothing
+    , _vtslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+vtslwData :: Lens' VPNTunnelsScopedListWarning [VPNTunnelsScopedListWarningDataItem]
+vtslwData
+  = lens _vtslwData (\ s a -> s{_vtslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+vtslwCode :: Lens' VPNTunnelsScopedListWarning (Maybe VPNTunnelsScopedListWarningCode)
+vtslwCode
+  = lens _vtslwCode (\ s a -> s{_vtslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+vtslwMessage :: Lens' VPNTunnelsScopedListWarning (Maybe Text)
+vtslwMessage
+  = lens _vtslwMessage (\ s a -> s{_vtslwMessage = a})
+
+instance FromJSON VPNTunnelsScopedListWarning where
+        parseJSON
+          = withObject "VPNTunnelsScopedListWarning"
+              (\ o ->
+                 VPNTunnelsScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON VPNTunnelsScopedListWarning where
+        toJSON VPNTunnelsScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _vtslwData,
+                  ("code" .=) <$> _vtslwCode,
+                  ("message" .=) <$> _vtslwMessage])
+
+-- | A ForwardingRule resource. A ForwardingRule resource specifies which
+-- pool of target virtual machines to forward a packet to if it matches the
+-- given [IPAddress, IPProtocol, portRange] tuple.
+--
+-- /See:/ 'forwardingRule' smart constructor.
+data ForwardingRule = ForwardingRule'
+    { _frIPAddress         :: !(Maybe Text)
+    , _frKind              :: !Text
+    , _frPortRange         :: !(Maybe Text)
+    , _frSelfLink          :: !(Maybe Text)
+    , _frName              :: !(Maybe Text)
+    , _frIPProtocol        :: !(Maybe ForwardingRuleIPProtocol)
+    , _frCreationTimestamp :: !(Maybe Text)
+    , _frId                :: !(Maybe (Textual Word64))
+    , _frRegion            :: !(Maybe Text)
+    , _frDescription       :: !(Maybe Text)
+    , _frTarget            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frIPAddress'
+--
+-- * 'frKind'
+--
+-- * 'frPortRange'
+--
+-- * 'frSelfLink'
+--
+-- * 'frName'
+--
+-- * 'frIPProtocol'
+--
+-- * 'frCreationTimestamp'
+--
+-- * 'frId'
+--
+-- * 'frRegion'
+--
+-- * 'frDescription'
+--
+-- * 'frTarget'
+forwardingRule
+    :: ForwardingRule
+forwardingRule =
+    ForwardingRule'
+    { _frIPAddress = Nothing
+    , _frKind = "compute#forwardingRule"
+    , _frPortRange = Nothing
+    , _frSelfLink = Nothing
+    , _frName = Nothing
+    , _frIPProtocol = Nothing
+    , _frCreationTimestamp = Nothing
+    , _frId = Nothing
+    , _frRegion = Nothing
+    , _frDescription = Nothing
+    , _frTarget = Nothing
+    }
+
+-- | Value of the reserved IP address that this forwarding rule is serving on
+-- behalf of. For global forwarding rules, the address must be a global IP;
+-- for regional forwarding rules, the address must live in the same region
+-- as the forwarding rule. If left empty (default value), an ephemeral IP
+-- from the same scope (global or regional) will be assigned.
+frIPAddress :: Lens' ForwardingRule (Maybe Text)
+frIPAddress
+  = lens _frIPAddress (\ s a -> s{_frIPAddress = a})
+
+-- | [Output Only] Type of the resource. Always compute#forwardingRule for
+-- Forwarding Rule resources.
+frKind :: Lens' ForwardingRule Text
+frKind = lens _frKind (\ s a -> s{_frKind = a})
+
+-- | Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets
+-- addressed to ports in the specified range will be forwarded to target.
+-- Forwarding rules with the same [IPAddress, IPProtocol] pair must have
+-- disjoint port ranges.
+frPortRange :: Lens' ForwardingRule (Maybe Text)
+frPortRange
+  = lens _frPortRange (\ s a -> s{_frPortRange = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+frSelfLink :: Lens' ForwardingRule (Maybe Text)
+frSelfLink
+  = lens _frSelfLink (\ s a -> s{_frSelfLink = a})
+
+-- | Name of the resource; provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+frName :: Lens' ForwardingRule (Maybe Text)
+frName = lens _frName (\ s a -> s{_frName = a})
+
+-- | The IP protocol to which this rule applies. Valid options are TCP, UDP,
+-- ESP, AH, SCTP or ICMP.
+frIPProtocol :: Lens' ForwardingRule (Maybe ForwardingRuleIPProtocol)
+frIPProtocol
+  = lens _frIPProtocol (\ s a -> s{_frIPProtocol = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+frCreationTimestamp :: Lens' ForwardingRule (Maybe Text)
+frCreationTimestamp
+  = lens _frCreationTimestamp
+      (\ s a -> s{_frCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+frId :: Lens' ForwardingRule (Maybe Word64)
+frId
+  = lens _frId (\ s a -> s{_frId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] URL of the region where the regional forwarding rule
+-- resides. This field is not applicable to global forwarding rules.
+frRegion :: Lens' ForwardingRule (Maybe Text)
+frRegion = lens _frRegion (\ s a -> s{_frRegion = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+frDescription :: Lens' ForwardingRule (Maybe Text)
+frDescription
+  = lens _frDescription
+      (\ s a -> s{_frDescription = a})
+
+-- | The URL of the target resource to receive the matched traffic. For
+-- regional forwarding rules, this target must live in the same region as
+-- the forwarding rule. For global forwarding rules, this target must be a
+-- global TargetHttpProxy or TargetHttpsProxy resource. The forwarded
+-- traffic must be of a type appropriate to the target object. For example,
+-- TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires
+-- HTTPS traffic.
+frTarget :: Lens' ForwardingRule (Maybe Text)
+frTarget = lens _frTarget (\ s a -> s{_frTarget = a})
+
+instance FromJSON ForwardingRule where
+        parseJSON
+          = withObject "ForwardingRule"
+              (\ o ->
+                 ForwardingRule' <$>
+                   (o .:? "IPAddress") <*>
+                     (o .:? "kind" .!= "compute#forwardingRule")
+                     <*> (o .:? "portRange")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "IPProtocol")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description")
+                     <*> (o .:? "target"))
+
+instance ToJSON ForwardingRule where
+        toJSON ForwardingRule'{..}
+          = object
+              (catMaybes
+                 [("IPAddress" .=) <$> _frIPAddress,
+                  Just ("kind" .= _frKind),
+                  ("portRange" .=) <$> _frPortRange,
+                  ("selfLink" .=) <$> _frSelfLink,
+                  ("name" .=) <$> _frName,
+                  ("IPProtocol" .=) <$> _frIPProtocol,
+                  ("creationTimestamp" .=) <$> _frCreationTimestamp,
+                  ("id" .=) <$> _frId, ("region" .=) <$> _frRegion,
+                  ("description" .=) <$> _frDescription,
+                  ("target" .=) <$> _frTarget])
+
+-- | Contains a list of UrlMap resources.
+--
+-- /See:/ 'urlMapList' smart constructor.
+data URLMapList = URLMapList'
+    { _umlNextPageToken :: !(Maybe Text)
+    , _umlKind          :: !Text
+    , _umlItems         :: !(Maybe [URLMap])
+    , _umlSelfLink      :: !(Maybe Text)
+    , _umlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMapList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umlNextPageToken'
+--
+-- * 'umlKind'
+--
+-- * 'umlItems'
+--
+-- * 'umlSelfLink'
+--
+-- * 'umlId'
+urlMapList
+    :: URLMapList
+urlMapList =
+    URLMapList'
+    { _umlNextPageToken = Nothing
+    , _umlKind = "compute#urlMapList"
+    , _umlItems = Nothing
+    , _umlSelfLink = Nothing
+    , _umlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+umlNextPageToken :: Lens' URLMapList (Maybe Text)
+umlNextPageToken
+  = lens _umlNextPageToken
+      (\ s a -> s{_umlNextPageToken = a})
+
+-- | Type of resource.
+umlKind :: Lens' URLMapList Text
+umlKind = lens _umlKind (\ s a -> s{_umlKind = a})
+
+-- | A list of UrlMap resources.
+umlItems :: Lens' URLMapList [URLMap]
+umlItems
+  = lens _umlItems (\ s a -> s{_umlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+umlSelfLink :: Lens' URLMapList (Maybe Text)
+umlSelfLink
+  = lens _umlSelfLink (\ s a -> s{_umlSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Set by the server.
+umlId :: Lens' URLMapList (Maybe Text)
+umlId = lens _umlId (\ s a -> s{_umlId = a})
+
+instance FromJSON URLMapList where
+        parseJSON
+          = withObject "URLMapList"
+              (\ o ->
+                 URLMapList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#urlMapList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON URLMapList where
+        toJSON URLMapList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _umlNextPageToken,
+                  Just ("kind" .= _umlKind),
+                  ("items" .=) <$> _umlItems,
+                  ("selfLink" .=) <$> _umlSelfLink,
+                  ("id" .=) <$> _umlId])
+
+--
+-- /See:/ 'forwardingRulesScopedListWarningDataItem' smart constructor.
+data ForwardingRulesScopedListWarningDataItem = ForwardingRulesScopedListWarningDataItem'
+    { _frslwdiValue :: !(Maybe Text)
+    , _frslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRulesScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frslwdiValue'
+--
+-- * 'frslwdiKey'
+forwardingRulesScopedListWarningDataItem
+    :: ForwardingRulesScopedListWarningDataItem
+forwardingRulesScopedListWarningDataItem =
+    ForwardingRulesScopedListWarningDataItem'
+    { _frslwdiValue = Nothing
+    , _frslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+frslwdiValue :: Lens' ForwardingRulesScopedListWarningDataItem (Maybe Text)
+frslwdiValue
+  = lens _frslwdiValue (\ s a -> s{_frslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+frslwdiKey :: Lens' ForwardingRulesScopedListWarningDataItem (Maybe Text)
+frslwdiKey
+  = lens _frslwdiKey (\ s a -> s{_frslwdiKey = a})
+
+instance FromJSON
+         ForwardingRulesScopedListWarningDataItem where
+        parseJSON
+          = withObject
+              "ForwardingRulesScopedListWarningDataItem"
+              (\ o ->
+                 ForwardingRulesScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON
+         ForwardingRulesScopedListWarningDataItem where
+        toJSON ForwardingRulesScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _frslwdiValue,
+                  ("key" .=) <$> _frslwdiKey])
+
+--
+-- /See:/ 'instanceGroupManagersScopedListWarningDataItem' smart constructor.
+data InstanceGroupManagersScopedListWarningDataItem = InstanceGroupManagersScopedListWarningDataItem'
+    { _igmslwdiValue :: !(Maybe Text)
+    , _igmslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmslwdiValue'
+--
+-- * 'igmslwdiKey'
+instanceGroupManagersScopedListWarningDataItem
+    :: InstanceGroupManagersScopedListWarningDataItem
+instanceGroupManagersScopedListWarningDataItem =
+    InstanceGroupManagersScopedListWarningDataItem'
+    { _igmslwdiValue = Nothing
+    , _igmslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+igmslwdiValue :: Lens' InstanceGroupManagersScopedListWarningDataItem (Maybe Text)
+igmslwdiValue
+  = lens _igmslwdiValue
+      (\ s a -> s{_igmslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+igmslwdiKey :: Lens' InstanceGroupManagersScopedListWarningDataItem (Maybe Text)
+igmslwdiKey
+  = lens _igmslwdiKey (\ s a -> s{_igmslwdiKey = a})
+
+instance FromJSON
+         InstanceGroupManagersScopedListWarningDataItem where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersScopedListWarningDataItem"
+              (\ o ->
+                 InstanceGroupManagersScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON
+         InstanceGroupManagersScopedListWarningDataItem where
+        toJSON
+          InstanceGroupManagersScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _igmslwdiValue,
+                  ("key" .=) <$> _igmslwdiKey])
+
+--
+-- /See:/ 'subnetworksScopedList' smart constructor.
+data SubnetworksScopedList = SubnetworksScopedList'
+    { _sslSubnetworks :: !(Maybe [Subnetwork])
+    , _sslWarning     :: !(Maybe SubnetworksScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sslSubnetworks'
+--
+-- * 'sslWarning'
+subnetworksScopedList
+    :: SubnetworksScopedList
+subnetworksScopedList =
+    SubnetworksScopedList'
+    { _sslSubnetworks = Nothing
+    , _sslWarning = Nothing
+    }
+
+-- | List of subnetworks contained in this scope.
+sslSubnetworks :: Lens' SubnetworksScopedList [Subnetwork]
+sslSubnetworks
+  = lens _sslSubnetworks
+      (\ s a -> s{_sslSubnetworks = a})
+      . _Default
+      . _Coerce
+
+-- | An informational warning that appears when the list of addresses is
+-- empty.
+sslWarning :: Lens' SubnetworksScopedList (Maybe SubnetworksScopedListWarning)
+sslWarning
+  = lens _sslWarning (\ s a -> s{_sslWarning = a})
+
+instance FromJSON SubnetworksScopedList where
+        parseJSON
+          = withObject "SubnetworksScopedList"
+              (\ o ->
+                 SubnetworksScopedList' <$>
+                   (o .:? "subnetworks" .!= mempty) <*>
+                     (o .:? "warning"))
+
+instance ToJSON SubnetworksScopedList where
+        toJSON SubnetworksScopedList'{..}
+          = object
+              (catMaybes
+                 [("subnetworks" .=) <$> _sslSubnetworks,
+                  ("warning" .=) <$> _sslWarning])
+
+-- | A Project resource. Projects can only be created in the Google Cloud
+-- Platform Console. Unless marked otherwise, values can only be modified
+-- in the console.
+--
+-- /See:/ 'project' smart constructor.
+data Project = Project'
+    { _pKind                   :: !Text
+    , _pUsageExportLocation    :: !(Maybe UsageExportLocation)
+    , _pSelfLink               :: !(Maybe Text)
+    , _pName                   :: !(Maybe Text)
+    , _pCreationTimestamp      :: !(Maybe Text)
+    , _pEnabledFeatures        :: !(Maybe [Text])
+    , _pQuotas                 :: !(Maybe [Quota])
+    , _pId                     :: !(Maybe (Textual Word64))
+    , _pDescription            :: !(Maybe Text)
+    , _pCommonInstanceMetadata :: !(Maybe Metadata)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Project' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pKind'
+--
+-- * 'pUsageExportLocation'
+--
+-- * 'pSelfLink'
+--
+-- * 'pName'
+--
+-- * 'pCreationTimestamp'
+--
+-- * 'pEnabledFeatures'
+--
+-- * 'pQuotas'
+--
+-- * 'pId'
+--
+-- * 'pDescription'
+--
+-- * 'pCommonInstanceMetadata'
+project
+    :: Project
+project =
+    Project'
+    { _pKind = "compute#project"
+    , _pUsageExportLocation = Nothing
+    , _pSelfLink = Nothing
+    , _pName = Nothing
+    , _pCreationTimestamp = Nothing
+    , _pEnabledFeatures = Nothing
+    , _pQuotas = Nothing
+    , _pId = Nothing
+    , _pDescription = Nothing
+    , _pCommonInstanceMetadata = Nothing
+    }
+
+-- | [Output Only] Type of the resource. Always compute#project for projects.
+pKind :: Lens' Project Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | The naming prefix for daily usage reports and the Google Cloud Storage
+-- bucket where they are stored.
+pUsageExportLocation :: Lens' Project (Maybe UsageExportLocation)
+pUsageExportLocation
+  = lens _pUsageExportLocation
+      (\ s a -> s{_pUsageExportLocation = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+pSelfLink :: Lens' Project (Maybe Text)
+pSelfLink
+  = lens _pSelfLink (\ s a -> s{_pSelfLink = a})
+
+-- | The project ID. For example: my-example-project. Use the project ID to
+-- make requests to Compute Engine.
+pName :: Lens' Project (Maybe Text)
+pName = lens _pName (\ s a -> s{_pName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+pCreationTimestamp :: Lens' Project (Maybe Text)
+pCreationTimestamp
+  = lens _pCreationTimestamp
+      (\ s a -> s{_pCreationTimestamp = a})
+
+-- | Restricted features enabled for use on this project.
+pEnabledFeatures :: Lens' Project [Text]
+pEnabledFeatures
+  = lens _pEnabledFeatures
+      (\ s a -> s{_pEnabledFeatures = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Quotas assigned to this project.
+pQuotas :: Lens' Project [Quota]
+pQuotas
+  = lens _pQuotas (\ s a -> s{_pQuotas = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server. This is not the project ID, and is just a unique
+-- ID used by Compute Engine to identify resources.
+pId :: Lens' Project (Maybe Word64)
+pId
+  = lens _pId (\ s a -> s{_pId = a}) . mapping _Coerce
+
+-- | An optional textual description of the resource.
+pDescription :: Lens' Project (Maybe Text)
+pDescription
+  = lens _pDescription (\ s a -> s{_pDescription = a})
+
+-- | Metadata key\/value pairs available to all instances contained in this
+-- project. See Custom metadata for more information.
+pCommonInstanceMetadata :: Lens' Project (Maybe Metadata)
+pCommonInstanceMetadata
+  = lens _pCommonInstanceMetadata
+      (\ s a -> s{_pCommonInstanceMetadata = a})
+
+instance FromJSON Project where
+        parseJSON
+          = withObject "Project"
+              (\ o ->
+                 Project' <$>
+                   (o .:? "kind" .!= "compute#project") <*>
+                     (o .:? "usageExportLocation")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "enabledFeatures" .!= mempty)
+                     <*> (o .:? "quotas" .!= mempty)
+                     <*> (o .:? "id")
+                     <*> (o .:? "description")
+                     <*> (o .:? "commonInstanceMetadata"))
+
+instance ToJSON Project where
+        toJSON Project'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _pKind),
+                  ("usageExportLocation" .=) <$> _pUsageExportLocation,
+                  ("selfLink" .=) <$> _pSelfLink,
+                  ("name" .=) <$> _pName,
+                  ("creationTimestamp" .=) <$> _pCreationTimestamp,
+                  ("enabledFeatures" .=) <$> _pEnabledFeatures,
+                  ("quotas" .=) <$> _pQuotas, ("id" .=) <$> _pId,
+                  ("description" .=) <$> _pDescription,
+                  ("commonInstanceMetadata" .=) <$>
+                    _pCommonInstanceMetadata])
+
+-- | An Operation resource, used to manage asynchronous API requests.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+    { _oTargetId            :: !(Maybe (Textual Word64))
+    , _oStatus              :: !(Maybe OperationStatus)
+    , _oInsertTime          :: !(Maybe Text)
+    , _oProgress            :: !(Maybe (Textual Int32))
+    , _oStartTime           :: !(Maybe Text)
+    , _oKind                :: !Text
+    , _oError               :: !(Maybe OperationError)
+    , _oHTTPErrorMessage    :: !(Maybe Text)
+    , _oZone                :: !(Maybe Text)
+    , _oWarnings            :: !(Maybe [OperationWarningsItem])
+    , _oHTTPErrorStatusCode :: !(Maybe (Textual Int32))
+    , _oUser                :: !(Maybe Text)
+    , _oSelfLink            :: !(Maybe Text)
+    , _oName                :: !(Maybe Text)
+    , _oStatusMessage       :: !(Maybe Text)
+    , _oCreationTimestamp   :: !(Maybe Text)
+    , _oEndTime             :: !(Maybe Text)
+    , _oId                  :: !(Maybe (Textual Word64))
+    , _oOperationType       :: !(Maybe Text)
+    , _oRegion              :: !(Maybe Text)
+    , _oDescription         :: !(Maybe Text)
+    , _oTargetLink          :: !(Maybe Text)
+    , _oClientOperationId   :: !(Maybe Text)
+    } 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:
+--
+-- * 'oTargetId'
+--
+-- * 'oStatus'
+--
+-- * 'oInsertTime'
+--
+-- * 'oProgress'
+--
+-- * 'oStartTime'
+--
+-- * 'oKind'
+--
+-- * 'oError'
+--
+-- * 'oHTTPErrorMessage'
+--
+-- * 'oZone'
+--
+-- * 'oWarnings'
+--
+-- * 'oHTTPErrorStatusCode'
+--
+-- * 'oUser'
+--
+-- * 'oSelfLink'
+--
+-- * 'oName'
+--
+-- * 'oStatusMessage'
+--
+-- * 'oCreationTimestamp'
+--
+-- * 'oEndTime'
+--
+-- * 'oId'
+--
+-- * 'oOperationType'
+--
+-- * 'oRegion'
+--
+-- * 'oDescription'
+--
+-- * 'oTargetLink'
+--
+-- * 'oClientOperationId'
+operation
+    :: Operation
+operation =
+    Operation'
+    { _oTargetId = Nothing
+    , _oStatus = Nothing
+    , _oInsertTime = Nothing
+    , _oProgress = Nothing
+    , _oStartTime = Nothing
+    , _oKind = "compute#operation"
+    , _oError = Nothing
+    , _oHTTPErrorMessage = Nothing
+    , _oZone = Nothing
+    , _oWarnings = Nothing
+    , _oHTTPErrorStatusCode = Nothing
+    , _oUser = Nothing
+    , _oSelfLink = Nothing
+    , _oName = Nothing
+    , _oStatusMessage = Nothing
+    , _oCreationTimestamp = Nothing
+    , _oEndTime = Nothing
+    , _oId = Nothing
+    , _oOperationType = Nothing
+    , _oRegion = Nothing
+    , _oDescription = Nothing
+    , _oTargetLink = Nothing
+    , _oClientOperationId = Nothing
+    }
+
+-- | [Output Only] The unique target ID, which identifies a specific
+-- incarnation of the target resource.
+oTargetId :: Lens' Operation (Maybe Word64)
+oTargetId
+  = lens _oTargetId (\ s a -> s{_oTargetId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The status of the operation, which can be one of the
+-- following: PENDING, RUNNING, or DONE.
+oStatus :: Lens' Operation (Maybe OperationStatus)
+oStatus = lens _oStatus (\ s a -> s{_oStatus = a})
+
+-- | [Output Only] The time that this operation was requested. This value is
+-- in RFC3339 text format.
+oInsertTime :: Lens' Operation (Maybe Text)
+oInsertTime
+  = lens _oInsertTime (\ s a -> s{_oInsertTime = a})
+
+-- | [Output Only] An optional progress indicator that ranges from 0 to 100.
+-- There is no requirement that this be linear or support any granularity
+-- of operations. This should not be used to guess when the operation will
+-- be complete. This number should monotonically increase as the operation
+-- progresses.
+oProgress :: Lens' Operation (Maybe Int32)
+oProgress
+  = lens _oProgress (\ s a -> s{_oProgress = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The time that this operation was started by the server.
+-- This value is in RFC3339 text format.
+oStartTime :: Lens' Operation (Maybe Text)
+oStartTime
+  = lens _oStartTime (\ s a -> s{_oStartTime = a})
+
+-- | [Output Only] Type of the resource. Always compute#operation for
+-- Operation resources.
+oKind :: Lens' Operation Text
+oKind = lens _oKind (\ s a -> s{_oKind = a})
+
+-- | [Output Only] If errors are generated during processing of the
+-- operation, this field will be populated.
+oError :: Lens' Operation (Maybe OperationError)
+oError = lens _oError (\ s a -> s{_oError = a})
+
+-- | [Output Only] If the operation fails, this field contains the HTTP error
+-- message that was returned, such as NOT FOUND.
+oHTTPErrorMessage :: Lens' Operation (Maybe Text)
+oHTTPErrorMessage
+  = lens _oHTTPErrorMessage
+      (\ s a -> s{_oHTTPErrorMessage = a})
+
+-- | [Output Only] The URL of the zone where the operation resides. Only
+-- available when performing per-zone operations.
+oZone :: Lens' Operation (Maybe Text)
+oZone = lens _oZone (\ s a -> s{_oZone = a})
+
+-- | [Output Only] If warning messages are generated during processing of the
+-- operation, this field will be populated.
+oWarnings :: Lens' Operation [OperationWarningsItem]
+oWarnings
+  = lens _oWarnings (\ s a -> s{_oWarnings = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] If the operation fails, this field contains the HTTP error
+-- status code that was returned. For example, a 404 means the resource was
+-- not found.
+oHTTPErrorStatusCode :: Lens' Operation (Maybe Int32)
+oHTTPErrorStatusCode
+  = lens _oHTTPErrorStatusCode
+      (\ s a -> s{_oHTTPErrorStatusCode = a})
+      . mapping _Coerce
+
+-- | [Output Only] User who requested the operation, for example:
+-- user\'example.com.
+oUser :: Lens' Operation (Maybe Text)
+oUser = lens _oUser (\ s a -> s{_oUser = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+oSelfLink :: Lens' Operation (Maybe Text)
+oSelfLink
+  = lens _oSelfLink (\ s a -> s{_oSelfLink = a})
+
+-- | [Output Only] Name of the resource.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = a})
+
+-- | [Output Only] An optional textual description of the current status of
+-- the operation.
+oStatusMessage :: Lens' Operation (Maybe Text)
+oStatusMessage
+  = lens _oStatusMessage
+      (\ s a -> s{_oStatusMessage = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+oCreationTimestamp :: Lens' Operation (Maybe Text)
+oCreationTimestamp
+  = lens _oCreationTimestamp
+      (\ s a -> s{_oCreationTimestamp = a})
+
+-- | [Output Only] The time that this operation was completed. This value is
+-- in RFC3339 text format.
+oEndTime :: Lens' Operation (Maybe Text)
+oEndTime = lens _oEndTime (\ s a -> s{_oEndTime = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+oId :: Lens' Operation (Maybe Word64)
+oId
+  = lens _oId (\ s a -> s{_oId = a}) . mapping _Coerce
+
+-- | [Output Only] The type of operation, such as insert, update, or delete,
+-- and so on.
+oOperationType :: Lens' Operation (Maybe Text)
+oOperationType
+  = lens _oOperationType
+      (\ s a -> s{_oOperationType = a})
+
+-- | [Output Only] The URL of the region where the operation resides. Only
+-- available when performing regional operations.
+oRegion :: Lens' Operation (Maybe Text)
+oRegion = lens _oRegion (\ s a -> s{_oRegion = a})
+
+-- | [Output Only] A textual description of the operation, which is set when
+-- the operation is created.
+oDescription :: Lens' Operation (Maybe Text)
+oDescription
+  = lens _oDescription (\ s a -> s{_oDescription = a})
+
+-- | [Output Only] The URL of the resource that the operation modifies.
+oTargetLink :: Lens' Operation (Maybe Text)
+oTargetLink
+  = lens _oTargetLink (\ s a -> s{_oTargetLink = a})
+
+-- | [Output Only] Reserved for future use.
+oClientOperationId :: Lens' Operation (Maybe Text)
+oClientOperationId
+  = lens _oClientOperationId
+      (\ s a -> s{_oClientOperationId = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation' <$>
+                   (o .:? "targetId") <*> (o .:? "status") <*>
+                     (o .:? "insertTime")
+                     <*> (o .:? "progress")
+                     <*> (o .:? "startTime")
+                     <*> (o .:? "kind" .!= "compute#operation")
+                     <*> (o .:? "error")
+                     <*> (o .:? "httpErrorMessage")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "warnings" .!= mempty)
+                     <*> (o .:? "httpErrorStatusCode")
+                     <*> (o .:? "user")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "statusMessage")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "id")
+                     <*> (o .:? "operationType")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description")
+                     <*> (o .:? "targetLink")
+                     <*> (o .:? "clientOperationId"))
+
+instance ToJSON Operation where
+        toJSON Operation'{..}
+          = object
+              (catMaybes
+                 [("targetId" .=) <$> _oTargetId,
+                  ("status" .=) <$> _oStatus,
+                  ("insertTime" .=) <$> _oInsertTime,
+                  ("progress" .=) <$> _oProgress,
+                  ("startTime" .=) <$> _oStartTime,
+                  Just ("kind" .= _oKind), ("error" .=) <$> _oError,
+                  ("httpErrorMessage" .=) <$> _oHTTPErrorMessage,
+                  ("zone" .=) <$> _oZone,
+                  ("warnings" .=) <$> _oWarnings,
+                  ("httpErrorStatusCode" .=) <$> _oHTTPErrorStatusCode,
+                  ("user" .=) <$> _oUser,
+                  ("selfLink" .=) <$> _oSelfLink,
+                  ("name" .=) <$> _oName,
+                  ("statusMessage" .=) <$> _oStatusMessage,
+                  ("creationTimestamp" .=) <$> _oCreationTimestamp,
+                  ("endTime" .=) <$> _oEndTime, ("id" .=) <$> _oId,
+                  ("operationType" .=) <$> _oOperationType,
+                  ("region" .=) <$> _oRegion,
+                  ("description" .=) <$> _oDescription,
+                  ("targetLink" .=) <$> _oTargetLink,
+                  ("clientOperationId" .=) <$> _oClientOperationId])
+
+--
+-- /See:/ 'disksScopedListWarningDataItem' smart constructor.
+data DisksScopedListWarningDataItem = DisksScopedListWarningDataItem'
+    { _dslwdiValue :: !(Maybe Text)
+    , _dslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisksScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dslwdiValue'
+--
+-- * 'dslwdiKey'
+disksScopedListWarningDataItem
+    :: DisksScopedListWarningDataItem
+disksScopedListWarningDataItem =
+    DisksScopedListWarningDataItem'
+    { _dslwdiValue = Nothing
+    , _dslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+dslwdiValue :: Lens' DisksScopedListWarningDataItem (Maybe Text)
+dslwdiValue
+  = lens _dslwdiValue (\ s a -> s{_dslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+dslwdiKey :: Lens' DisksScopedListWarningDataItem (Maybe Text)
+dslwdiKey
+  = lens _dslwdiKey (\ s a -> s{_dslwdiKey = a})
+
+instance FromJSON DisksScopedListWarningDataItem
+         where
+        parseJSON
+          = withObject "DisksScopedListWarningDataItem"
+              (\ o ->
+                 DisksScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON DisksScopedListWarningDataItem where
+        toJSON DisksScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _dslwdiValue,
+                  ("key" .=) <$> _dslwdiKey])
+
+-- | A Disk resource.
+--
+-- /See:/ 'disk' smart constructor.
+data Disk = Disk'
+    { _dStatus              :: !(Maybe DiskStatus)
+    , _dSourceSnapshotId    :: !(Maybe Text)
+    , _dLastAttachTimestamp :: !(Maybe Text)
+    , _dUsers               :: !(Maybe [Text])
+    , _dSourceImage         :: !(Maybe Text)
+    , _dSizeGb              :: !(Maybe (Textual Int64))
+    , _dKind                :: !Text
+    , _dLastDetachTimestamp :: !(Maybe Text)
+    , _dZone                :: !(Maybe Text)
+    , _dSelfLink            :: !(Maybe Text)
+    , _dName                :: !(Maybe Text)
+    , _dSourceImageId       :: !(Maybe Text)
+    , _dCreationTimestamp   :: !(Maybe Text)
+    , _dId                  :: !(Maybe (Textual Word64))
+    , _dLicenses            :: !(Maybe [Text])
+    , _dOptions             :: !(Maybe Text)
+    , _dType                :: !(Maybe Text)
+    , _dDescription         :: !(Maybe Text)
+    , _dSourceSnapshot      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Disk' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dStatus'
+--
+-- * 'dSourceSnapshotId'
+--
+-- * 'dLastAttachTimestamp'
+--
+-- * 'dUsers'
+--
+-- * 'dSourceImage'
+--
+-- * 'dSizeGb'
+--
+-- * 'dKind'
+--
+-- * 'dLastDetachTimestamp'
+--
+-- * 'dZone'
+--
+-- * 'dSelfLink'
+--
+-- * 'dName'
+--
+-- * 'dSourceImageId'
+--
+-- * 'dCreationTimestamp'
+--
+-- * 'dId'
+--
+-- * 'dLicenses'
+--
+-- * 'dOptions'
+--
+-- * 'dType'
+--
+-- * 'dDescription'
+--
+-- * 'dSourceSnapshot'
+disk
+    :: Disk
+disk =
+    Disk'
+    { _dStatus = Nothing
+    , _dSourceSnapshotId = Nothing
+    , _dLastAttachTimestamp = Nothing
+    , _dUsers = Nothing
+    , _dSourceImage = Nothing
+    , _dSizeGb = Nothing
+    , _dKind = "compute#disk"
+    , _dLastDetachTimestamp = Nothing
+    , _dZone = Nothing
+    , _dSelfLink = Nothing
+    , _dName = Nothing
+    , _dSourceImageId = Nothing
+    , _dCreationTimestamp = Nothing
+    , _dId = Nothing
+    , _dLicenses = Nothing
+    , _dOptions = Nothing
+    , _dType = Nothing
+    , _dDescription = Nothing
+    , _dSourceSnapshot = Nothing
+    }
+
+-- | [Output Only] The status of disk creation. Applicable statuses includes:
+-- CREATING, FAILED, READY, RESTORING.
+dStatus :: Lens' Disk (Maybe DiskStatus)
+dStatus = lens _dStatus (\ s a -> s{_dStatus = a})
+
+-- | [Output Only] The unique ID of the snapshot used to create this disk.
+-- This value identifies the exact snapshot that was used to create this
+-- persistent disk. For example, if you created the persistent disk from a
+-- snapshot that was later deleted and recreated under the same name, the
+-- source snapshot ID would identify the exact version of the snapshot that
+-- was used.
+dSourceSnapshotId :: Lens' Disk (Maybe Text)
+dSourceSnapshotId
+  = lens _dSourceSnapshotId
+      (\ s a -> s{_dSourceSnapshotId = a})
+
+-- | [Output Only] Last attach timestamp in RFC3339 text format.
+dLastAttachTimestamp :: Lens' Disk (Maybe Text)
+dLastAttachTimestamp
+  = lens _dLastAttachTimestamp
+      (\ s a -> s{_dLastAttachTimestamp = a})
+
+-- | [Output Only] Links to the users of the disk (attached instances) in
+-- form: project\/zones\/zone\/instances\/instance
+dUsers :: Lens' Disk [Text]
+dUsers
+  = lens _dUsers (\ s a -> s{_dUsers = a}) . _Default .
+      _Coerce
+
+-- | The source image used to create this disk. If the source image is
+-- deleted, this field will not be set. To create a disk with one of the
+-- public operating system images, specify the image by its family name.
+-- For example, specify family\/debian-8 to use the latest Debian 8 image:
+-- projects\/debian-cloud\/global\/images\/family\/debian-8 Alternatively,
+-- use a specific version of a public operating system image:
+-- projects\/debian-cloud\/global\/images\/debian-8-jessie-vYYYYMMDD To
+-- create a disk with a private image that you created, specify the image
+-- name in the following format: global\/images\/my-private-image You can
+-- also specify a private image by its image family, which returns the
+-- latest version of the image in that family. Replace the image name with
+-- family\/family-name: global\/images\/family\/my-private-family
+dSourceImage :: Lens' Disk (Maybe Text)
+dSourceImage
+  = lens _dSourceImage (\ s a -> s{_dSourceImage = a})
+
+-- | Size of the persistent disk, specified in GB. You can specify this field
+-- when creating a persistent disk using the sourceImage or sourceSnapshot
+-- parameter, or specify it alone to create an empty persistent disk. If
+-- you specify this field along with sourceImage or sourceSnapshot, the
+-- value of sizeGb must not be less than the size of the sourceImage or the
+-- size of the snapshot.
+dSizeGb :: Lens' Disk (Maybe Int64)
+dSizeGb
+  = lens _dSizeGb (\ s a -> s{_dSizeGb = a}) .
+      mapping _Coerce
+
+-- | [Output Only] Type of the resource. Always compute#disk for disks.
+dKind :: Lens' Disk Text
+dKind = lens _dKind (\ s a -> s{_dKind = a})
+
+-- | [Output Only] Last detach timestamp in RFC3339 text format.
+dLastDetachTimestamp :: Lens' Disk (Maybe Text)
+dLastDetachTimestamp
+  = lens _dLastDetachTimestamp
+      (\ s a -> s{_dLastDetachTimestamp = a})
+
+-- | [Output Only] URL of the zone where the disk resides.
+dZone :: Lens' Disk (Maybe Text)
+dZone = lens _dZone (\ s a -> s{_dZone = a})
+
+-- | [Output Only] Server-defined fully-qualified URL for this resource.
+dSelfLink :: Lens' Disk (Maybe Text)
+dSelfLink
+  = lens _dSelfLink (\ s a -> s{_dSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+dName :: Lens' Disk (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a})
+
+-- | [Output Only] The ID value of the image used to create this disk. This
+-- value identifies the exact image that was used to create this persistent
+-- disk. For example, if you created the persistent disk from an image that
+-- was later deleted and recreated under the same name, the source image ID
+-- would identify the exact version of the image that was used.
+dSourceImageId :: Lens' Disk (Maybe Text)
+dSourceImageId
+  = lens _dSourceImageId
+      (\ s a -> s{_dSourceImageId = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+dCreationTimestamp :: Lens' Disk (Maybe Text)
+dCreationTimestamp
+  = lens _dCreationTimestamp
+      (\ s a -> s{_dCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+dId :: Lens' Disk (Maybe Word64)
+dId
+  = lens _dId (\ s a -> s{_dId = a}) . mapping _Coerce
+
+-- | [Output Only] Any applicable publicly visible licenses.
+dLicenses :: Lens' Disk [Text]
+dLicenses
+  = lens _dLicenses (\ s a -> s{_dLicenses = a}) .
+      _Default
+      . _Coerce
+
+-- | Internal use only.
+dOptions :: Lens' Disk (Maybe Text)
+dOptions = lens _dOptions (\ s a -> s{_dOptions = a})
+
+-- | URL of the disk type resource describing which disk type to use to
+-- create the disk. Provide this when creating the disk.
+dType :: Lens' Disk (Maybe Text)
+dType = lens _dType (\ s a -> s{_dType = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+dDescription :: Lens' Disk (Maybe Text)
+dDescription
+  = lens _dDescription (\ s a -> s{_dDescription = a})
+
+-- | The source snapshot used to create this disk. You can provide this as a
+-- partial or full URL to the resource. For example, the following are
+-- valid values: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/global\/snapshots\/snapshot
+-- - projects\/project\/global\/snapshots\/snapshot -
+-- global\/snapshots\/snapshot
+dSourceSnapshot :: Lens' Disk (Maybe Text)
+dSourceSnapshot
+  = lens _dSourceSnapshot
+      (\ s a -> s{_dSourceSnapshot = a})
+
+instance FromJSON Disk where
+        parseJSON
+          = withObject "Disk"
+              (\ o ->
+                 Disk' <$>
+                   (o .:? "status") <*> (o .:? "sourceSnapshotId") <*>
+                     (o .:? "lastAttachTimestamp")
+                     <*> (o .:? "users" .!= mempty)
+                     <*> (o .:? "sourceImage")
+                     <*> (o .:? "sizeGb")
+                     <*> (o .:? "kind" .!= "compute#disk")
+                     <*> (o .:? "lastDetachTimestamp")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "sourceImageId")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "licenses" .!= mempty)
+                     <*> (o .:? "options")
+                     <*> (o .:? "type")
+                     <*> (o .:? "description")
+                     <*> (o .:? "sourceSnapshot"))
+
+instance ToJSON Disk where
+        toJSON Disk'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _dStatus,
+                  ("sourceSnapshotId" .=) <$> _dSourceSnapshotId,
+                  ("lastAttachTimestamp" .=) <$> _dLastAttachTimestamp,
+                  ("users" .=) <$> _dUsers,
+                  ("sourceImage" .=) <$> _dSourceImage,
+                  ("sizeGb" .=) <$> _dSizeGb, Just ("kind" .= _dKind),
+                  ("lastDetachTimestamp" .=) <$> _dLastDetachTimestamp,
+                  ("zone" .=) <$> _dZone,
+                  ("selfLink" .=) <$> _dSelfLink,
+                  ("name" .=) <$> _dName,
+                  ("sourceImageId" .=) <$> _dSourceImageId,
+                  ("creationTimestamp" .=) <$> _dCreationTimestamp,
+                  ("id" .=) <$> _dId, ("licenses" .=) <$> _dLicenses,
+                  ("options" .=) <$> _dOptions, ("type" .=) <$> _dType,
+                  ("description" .=) <$> _dDescription,
+                  ("sourceSnapshot" .=) <$> _dSourceSnapshot])
+
+--
+-- /See:/ 'diskMoveRequest' smart constructor.
+data DiskMoveRequest = DiskMoveRequest'
+    { _dmrTargetDisk      :: !(Maybe Text)
+    , _dmrDestinationZone :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskMoveRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmrTargetDisk'
+--
+-- * 'dmrDestinationZone'
+diskMoveRequest
+    :: DiskMoveRequest
+diskMoveRequest =
+    DiskMoveRequest'
+    { _dmrTargetDisk = Nothing
+    , _dmrDestinationZone = Nothing
+    }
+
+-- | The URL of the target disk to move. This can be a full or partial URL.
+-- For example, the following are all valid URLs to a disk: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/disks\/disk
+-- - projects\/project\/zones\/zone\/disks\/disk - zones\/zone\/disks\/disk
+dmrTargetDisk :: Lens' DiskMoveRequest (Maybe Text)
+dmrTargetDisk
+  = lens _dmrTargetDisk
+      (\ s a -> s{_dmrTargetDisk = a})
+
+-- | The URL of the destination zone to move the disk. This can be a full or
+-- partial URL. For example, the following are all valid URLs to a zone: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone
+-- - projects\/project\/zones\/zone - zones\/zone
+dmrDestinationZone :: Lens' DiskMoveRequest (Maybe Text)
+dmrDestinationZone
+  = lens _dmrDestinationZone
+      (\ s a -> s{_dmrDestinationZone = a})
+
+instance FromJSON DiskMoveRequest where
+        parseJSON
+          = withObject "DiskMoveRequest"
+              (\ o ->
+                 DiskMoveRequest' <$>
+                   (o .:? "targetDisk") <*> (o .:? "destinationZone"))
+
+instance ToJSON DiskMoveRequest where
+        toJSON DiskMoveRequest'{..}
+          = object
+              (catMaybes
+                 [("targetDisk" .=) <$> _dmrTargetDisk,
+                  ("destinationZone" .=) <$> _dmrDestinationZone])
+
+-- | Configuration parameters of autoscaling based on load balancing.
+--
+-- /See:/ 'autoscalingPolicyLoadBalancingUtilization' smart constructor.
+newtype AutoscalingPolicyLoadBalancingUtilization = AutoscalingPolicyLoadBalancingUtilization'
+    { _aplbuUtilizationTarget :: Maybe (Textual Double)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalingPolicyLoadBalancingUtilization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aplbuUtilizationTarget'
+autoscalingPolicyLoadBalancingUtilization
+    :: AutoscalingPolicyLoadBalancingUtilization
+autoscalingPolicyLoadBalancingUtilization =
+    AutoscalingPolicyLoadBalancingUtilization'
+    { _aplbuUtilizationTarget = Nothing
+    }
+
+-- | Fraction of backend capacity utilization (set in HTTP(s) load balancing
+-- configuration) that autoscaler should maintain. Must be a positive float
+-- value. If not defined, the default is 0.8.
+aplbuUtilizationTarget :: Lens' AutoscalingPolicyLoadBalancingUtilization (Maybe Double)
+aplbuUtilizationTarget
+  = lens _aplbuUtilizationTarget
+      (\ s a -> s{_aplbuUtilizationTarget = a})
+      . mapping _Coerce
+
+instance FromJSON
+         AutoscalingPolicyLoadBalancingUtilization where
+        parseJSON
+          = withObject
+              "AutoscalingPolicyLoadBalancingUtilization"
+              (\ o ->
+                 AutoscalingPolicyLoadBalancingUtilization' <$>
+                   (o .:? "utilizationTarget"))
+
+instance ToJSON
+         AutoscalingPolicyLoadBalancingUtilization where
+        toJSON AutoscalingPolicyLoadBalancingUtilization'{..}
+          = object
+              (catMaybes
+                 [("utilizationTarget" .=) <$>
+                    _aplbuUtilizationTarget])
+
+--
+-- /See:/ 'targetPoolsScopedListWarningDataItem' smart constructor.
+data TargetPoolsScopedListWarningDataItem = TargetPoolsScopedListWarningDataItem'
+    { _tpslwdiValue :: !(Maybe Text)
+    , _tpslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpslwdiValue'
+--
+-- * 'tpslwdiKey'
+targetPoolsScopedListWarningDataItem
+    :: TargetPoolsScopedListWarningDataItem
+targetPoolsScopedListWarningDataItem =
+    TargetPoolsScopedListWarningDataItem'
+    { _tpslwdiValue = Nothing
+    , _tpslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+tpslwdiValue :: Lens' TargetPoolsScopedListWarningDataItem (Maybe Text)
+tpslwdiValue
+  = lens _tpslwdiValue (\ s a -> s{_tpslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+tpslwdiKey :: Lens' TargetPoolsScopedListWarningDataItem (Maybe Text)
+tpslwdiKey
+  = lens _tpslwdiKey (\ s a -> s{_tpslwdiKey = a})
+
+instance FromJSON
+         TargetPoolsScopedListWarningDataItem where
+        parseJSON
+          = withObject "TargetPoolsScopedListWarningDataItem"
+              (\ o ->
+                 TargetPoolsScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON TargetPoolsScopedListWarningDataItem
+         where
+        toJSON TargetPoolsScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _tpslwdiValue,
+                  ("key" .=) <$> _tpslwdiKey])
+
+--
+-- /See:/ 'instanceGroupManager' smart constructor.
+data InstanceGroupManager = InstanceGroupManager'
+    { _igmKind              :: !Text
+    , _igmFingerprint       :: !(Maybe Base64)
+    , _igmBaseInstanceName  :: !(Maybe Text)
+    , _igmZone              :: !(Maybe Text)
+    , _igmInstanceTemplate  :: !(Maybe Text)
+    , _igmTargetSize        :: !(Maybe (Textual Int32))
+    , _igmSelfLink          :: !(Maybe Text)
+    , _igmCurrentActions    :: !(Maybe InstanceGroupManagerActionsSummary)
+    , _igmName              :: !(Maybe Text)
+    , _igmCreationTimestamp :: !(Maybe Text)
+    , _igmId                :: !(Maybe (Textual Word64))
+    , _igmTargetPools       :: !(Maybe [Text])
+    , _igmDescription       :: !(Maybe Text)
+    , _igmInstanceGroup     :: !(Maybe Text)
+    , _igmNamedPorts        :: !(Maybe [NamedPort])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManager' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmKind'
+--
+-- * 'igmFingerprint'
+--
+-- * 'igmBaseInstanceName'
+--
+-- * 'igmZone'
+--
+-- * 'igmInstanceTemplate'
+--
+-- * 'igmTargetSize'
+--
+-- * 'igmSelfLink'
+--
+-- * 'igmCurrentActions'
+--
+-- * 'igmName'
+--
+-- * 'igmCreationTimestamp'
+--
+-- * 'igmId'
+--
+-- * 'igmTargetPools'
+--
+-- * 'igmDescription'
+--
+-- * 'igmInstanceGroup'
+--
+-- * 'igmNamedPorts'
+instanceGroupManager
+    :: InstanceGroupManager
+instanceGroupManager =
+    InstanceGroupManager'
+    { _igmKind = "compute#instanceGroupManager"
+    , _igmFingerprint = Nothing
+    , _igmBaseInstanceName = Nothing
+    , _igmZone = Nothing
+    , _igmInstanceTemplate = Nothing
+    , _igmTargetSize = Nothing
+    , _igmSelfLink = Nothing
+    , _igmCurrentActions = Nothing
+    , _igmName = Nothing
+    , _igmCreationTimestamp = Nothing
+    , _igmId = Nothing
+    , _igmTargetPools = Nothing
+    , _igmDescription = Nothing
+    , _igmInstanceGroup = Nothing
+    , _igmNamedPorts = Nothing
+    }
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceGroupManager for managed instance groups.
+igmKind :: Lens' InstanceGroupManager Text
+igmKind = lens _igmKind (\ s a -> s{_igmKind = a})
+
+-- | [Output Only] The fingerprint of the resource data. You can use this
+-- optional field for optimistic locking when you update the resource.
+igmFingerprint :: Lens' InstanceGroupManager (Maybe ByteString)
+igmFingerprint
+  = lens _igmFingerprint
+      (\ s a -> s{_igmFingerprint = a})
+      . mapping _Base64
+
+-- | The base instance name to use for instances in this group. The value
+-- must be 1-58 characters long. Instances are named by appending a hyphen
+-- and a random four-character string to the base instance name. The base
+-- instance name must comply with RFC1035.
+igmBaseInstanceName :: Lens' InstanceGroupManager (Maybe Text)
+igmBaseInstanceName
+  = lens _igmBaseInstanceName
+      (\ s a -> s{_igmBaseInstanceName = a})
+
+-- | The name of the zone where the managed instance group is located.
+igmZone :: Lens' InstanceGroupManager (Maybe Text)
+igmZone = lens _igmZone (\ s a -> s{_igmZone = a})
+
+-- | The URL of the instance template that is specified for this managed
+-- instance group. The group uses this template to create all new instances
+-- in the managed instance group.
+igmInstanceTemplate :: Lens' InstanceGroupManager (Maybe Text)
+igmInstanceTemplate
+  = lens _igmInstanceTemplate
+      (\ s a -> s{_igmInstanceTemplate = a})
+
+-- | The target number of running instances for this managed instance group.
+-- Deleting or abandoning instances reduces this number. Resizing the group
+-- changes this number.
+igmTargetSize :: Lens' InstanceGroupManager (Maybe Int32)
+igmTargetSize
+  = lens _igmTargetSize
+      (\ s a -> s{_igmTargetSize = a})
+      . mapping _Coerce
+
+-- | [Output Only] The URL for this managed instance group. The server
+-- defines this URL.
+igmSelfLink :: Lens' InstanceGroupManager (Maybe Text)
+igmSelfLink
+  = lens _igmSelfLink (\ s a -> s{_igmSelfLink = a})
+
+-- | [Output Only] The list of instance actions and the number of instances
+-- in this managed instance group that are scheduled for each of those
+-- actions.
+igmCurrentActions :: Lens' InstanceGroupManager (Maybe InstanceGroupManagerActionsSummary)
+igmCurrentActions
+  = lens _igmCurrentActions
+      (\ s a -> s{_igmCurrentActions = a})
+
+-- | The name of the managed instance group. The name must be 1-63 characters
+-- long, and comply with RFC1035.
+igmName :: Lens' InstanceGroupManager (Maybe Text)
+igmName = lens _igmName (\ s a -> s{_igmName = a})
+
+-- | [Output Only] The creation timestamp for this managed instance group in
+-- RFC3339 text format.
+igmCreationTimestamp :: Lens' InstanceGroupManager (Maybe Text)
+igmCreationTimestamp
+  = lens _igmCreationTimestamp
+      (\ s a -> s{_igmCreationTimestamp = a})
+
+-- | [Output Only] A unique identifier for this resource type. The server
+-- generates this identifier.
+igmId :: Lens' InstanceGroupManager (Maybe Word64)
+igmId
+  = lens _igmId (\ s a -> s{_igmId = a}) .
+      mapping _Coerce
+
+-- | The URLs for all TargetPool resources to which instances in the
+-- instanceGroup field are added. The target pools automatically apply to
+-- all of the instances in the managed instance group.
+igmTargetPools :: Lens' InstanceGroupManager [Text]
+igmTargetPools
+  = lens _igmTargetPools
+      (\ s a -> s{_igmTargetPools = a})
+      . _Default
+      . _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+igmDescription :: Lens' InstanceGroupManager (Maybe Text)
+igmDescription
+  = lens _igmDescription
+      (\ s a -> s{_igmDescription = a})
+
+-- | [Output Only] The URL of the Instance Group resource.
+igmInstanceGroup :: Lens' InstanceGroupManager (Maybe Text)
+igmInstanceGroup
+  = lens _igmInstanceGroup
+      (\ s a -> s{_igmInstanceGroup = a})
+
+-- | Named ports configured for the Instance Groups complementary to this
+-- Instance Group Manager.
+igmNamedPorts :: Lens' InstanceGroupManager [NamedPort]
+igmNamedPorts
+  = lens _igmNamedPorts
+      (\ s a -> s{_igmNamedPorts = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstanceGroupManager where
+        parseJSON
+          = withObject "InstanceGroupManager"
+              (\ o ->
+                 InstanceGroupManager' <$>
+                   (o .:? "kind" .!= "compute#instanceGroupManager") <*>
+                     (o .:? "fingerprint")
+                     <*> (o .:? "baseInstanceName")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "instanceTemplate")
+                     <*> (o .:? "targetSize")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "currentActions")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "targetPools" .!= mempty)
+                     <*> (o .:? "description")
+                     <*> (o .:? "instanceGroup")
+                     <*> (o .:? "namedPorts" .!= mempty))
+
+instance ToJSON InstanceGroupManager where
+        toJSON InstanceGroupManager'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _igmKind),
+                  ("fingerprint" .=) <$> _igmFingerprint,
+                  ("baseInstanceName" .=) <$> _igmBaseInstanceName,
+                  ("zone" .=) <$> _igmZone,
+                  ("instanceTemplate" .=) <$> _igmInstanceTemplate,
+                  ("targetSize" .=) <$> _igmTargetSize,
+                  ("selfLink" .=) <$> _igmSelfLink,
+                  ("currentActions" .=) <$> _igmCurrentActions,
+                  ("name" .=) <$> _igmName,
+                  ("creationTimestamp" .=) <$> _igmCreationTimestamp,
+                  ("id" .=) <$> _igmId,
+                  ("targetPools" .=) <$> _igmTargetPools,
+                  ("description" .=) <$> _igmDescription,
+                  ("instanceGroup" .=) <$> _igmInstanceGroup,
+                  ("namedPorts" .=) <$> _igmNamedPorts])
+
+--
+-- /See:/ 'instanceGroupsRemoveInstancesRequest' smart constructor.
+newtype InstanceGroupsRemoveInstancesRequest = InstanceGroupsRemoveInstancesRequest'
+    { _igrirInstances :: Maybe [InstanceReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsRemoveInstancesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igrirInstances'
+instanceGroupsRemoveInstancesRequest
+    :: InstanceGroupsRemoveInstancesRequest
+instanceGroupsRemoveInstancesRequest =
+    InstanceGroupsRemoveInstancesRequest'
+    { _igrirInstances = Nothing
+    }
+
+-- | The list of instances to remove from the instance group.
+igrirInstances :: Lens' InstanceGroupsRemoveInstancesRequest [InstanceReference]
+igrirInstances
+  = lens _igrirInstances
+      (\ s a -> s{_igrirInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupsRemoveInstancesRequest where
+        parseJSON
+          = withObject "InstanceGroupsRemoveInstancesRequest"
+              (\ o ->
+                 InstanceGroupsRemoveInstancesRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON InstanceGroupsRemoveInstancesRequest
+         where
+        toJSON InstanceGroupsRemoveInstancesRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _igrirInstances])
+
+--
+-- /See:/ 'routeWarningsItemDataItem' smart constructor.
+data RouteWarningsItemDataItem = RouteWarningsItemDataItem'
+    { _rwidiValue :: !(Maybe Text)
+    , _rwidiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RouteWarningsItemDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rwidiValue'
+--
+-- * 'rwidiKey'
+routeWarningsItemDataItem
+    :: RouteWarningsItemDataItem
+routeWarningsItemDataItem =
+    RouteWarningsItemDataItem'
+    { _rwidiValue = Nothing
+    , _rwidiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+rwidiValue :: Lens' RouteWarningsItemDataItem (Maybe Text)
+rwidiValue
+  = lens _rwidiValue (\ s a -> s{_rwidiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+rwidiKey :: Lens' RouteWarningsItemDataItem (Maybe Text)
+rwidiKey = lens _rwidiKey (\ s a -> s{_rwidiKey = a})
+
+instance FromJSON RouteWarningsItemDataItem where
+        parseJSON
+          = withObject "RouteWarningsItemDataItem"
+              (\ o ->
+                 RouteWarningsItemDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON RouteWarningsItemDataItem where
+        toJSON RouteWarningsItemDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _rwidiValue,
+                  ("key" .=) <$> _rwidiKey])
+
+-- | [Output Only] A map of scoped instance lists.
+--
+-- /See:/ 'instanceAggregatedListItems' smart constructor.
+newtype InstanceAggregatedListItems = InstanceAggregatedListItems'
+    { _ialiAddtional :: HashMap Text InstancesScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ialiAddtional'
+instanceAggregatedListItems
+    :: HashMap Text InstancesScopedList -- ^ 'ialiAddtional'
+    -> InstanceAggregatedListItems
+instanceAggregatedListItems pIaliAddtional_ =
+    InstanceAggregatedListItems'
+    { _ialiAddtional = _Coerce # pIaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of instances.
+ialiAddtional :: Lens' InstanceAggregatedListItems (HashMap Text InstancesScopedList)
+ialiAddtional
+  = lens _ialiAddtional
+      (\ s a -> s{_ialiAddtional = a})
+      . _Coerce
+
+instance FromJSON InstanceAggregatedListItems where
+        parseJSON
+          = withObject "InstanceAggregatedListItems"
+              (\ o ->
+                 InstanceAggregatedListItems' <$> (parseJSONObject o))
+
+instance ToJSON InstanceAggregatedListItems where
+        toJSON = toJSON . _ialiAddtional
+
+-- | [Output Only] Informational warning which replaces the list of
+-- autoscalers when the list is empty.
+--
+-- /See:/ 'autoscalersScopedListWarning' smart constructor.
+data AutoscalersScopedListWarning = AutoscalersScopedListWarning'
+    { _aslwData    :: !(Maybe [AutoscalersScopedListWarningDataItem])
+    , _aslwCode    :: !(Maybe AutoscalersScopedListWarningCode)
+    , _aslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalersScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aslwData'
+--
+-- * 'aslwCode'
+--
+-- * 'aslwMessage'
+autoscalersScopedListWarning
+    :: AutoscalersScopedListWarning
+autoscalersScopedListWarning =
+    AutoscalersScopedListWarning'
+    { _aslwData = Nothing
+    , _aslwCode = Nothing
+    , _aslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+aslwData :: Lens' AutoscalersScopedListWarning [AutoscalersScopedListWarningDataItem]
+aslwData
+  = lens _aslwData (\ s a -> s{_aslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+aslwCode :: Lens' AutoscalersScopedListWarning (Maybe AutoscalersScopedListWarningCode)
+aslwCode = lens _aslwCode (\ s a -> s{_aslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+aslwMessage :: Lens' AutoscalersScopedListWarning (Maybe Text)
+aslwMessage
+  = lens _aslwMessage (\ s a -> s{_aslwMessage = a})
+
+instance FromJSON AutoscalersScopedListWarning where
+        parseJSON
+          = withObject "AutoscalersScopedListWarning"
+              (\ o ->
+                 AutoscalersScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON AutoscalersScopedListWarning where
+        toJSON AutoscalersScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _aslwData,
+                  ("code" .=) <$> _aslwCode,
+                  ("message" .=) <$> _aslwMessage])
+
+-- | [Output Only] Encountered errors during the last attempt to create or
+-- delete the instance.
+--
+-- /See:/ 'managedInstanceLastAttemptErrors' smart constructor.
+newtype ManagedInstanceLastAttemptErrors = ManagedInstanceLastAttemptErrors'
+    { _milaeErrors :: Maybe [ManagedInstanceLastAttemptErrorsErrorsItem]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedInstanceLastAttemptErrors' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'milaeErrors'
+managedInstanceLastAttemptErrors
+    :: ManagedInstanceLastAttemptErrors
+managedInstanceLastAttemptErrors =
+    ManagedInstanceLastAttemptErrors'
+    { _milaeErrors = Nothing
+    }
+
+-- | [Output Only] The array of errors encountered while processing this
+-- operation.
+milaeErrors :: Lens' ManagedInstanceLastAttemptErrors [ManagedInstanceLastAttemptErrorsErrorsItem]
+milaeErrors
+  = lens _milaeErrors (\ s a -> s{_milaeErrors = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ManagedInstanceLastAttemptErrors
+         where
+        parseJSON
+          = withObject "ManagedInstanceLastAttemptErrors"
+              (\ o ->
+                 ManagedInstanceLastAttemptErrors' <$>
+                   (o .:? "errors" .!= mempty))
+
+instance ToJSON ManagedInstanceLastAttemptErrors
+         where
+        toJSON ManagedInstanceLastAttemptErrors'{..}
+          = object (catMaybes [("errors" .=) <$> _milaeErrors])
+
+--
+-- /See:/ 'targetPoolsRemoveInstanceRequest' smart constructor.
+newtype TargetPoolsRemoveInstanceRequest = TargetPoolsRemoveInstanceRequest'
+    { _tprirInstances :: Maybe [InstanceReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsRemoveInstanceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tprirInstances'
+targetPoolsRemoveInstanceRequest
+    :: TargetPoolsRemoveInstanceRequest
+targetPoolsRemoveInstanceRequest =
+    TargetPoolsRemoveInstanceRequest'
+    { _tprirInstances = Nothing
+    }
+
+-- | URLs of the instances to be removed from target pool.
+tprirInstances :: Lens' TargetPoolsRemoveInstanceRequest [InstanceReference]
+tprirInstances
+  = lens _tprirInstances
+      (\ s a -> s{_tprirInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPoolsRemoveInstanceRequest
+         where
+        parseJSON
+          = withObject "TargetPoolsRemoveInstanceRequest"
+              (\ o ->
+                 TargetPoolsRemoveInstanceRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON TargetPoolsRemoveInstanceRequest
+         where
+        toJSON TargetPoolsRemoveInstanceRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _tprirInstances])
+
+--
+-- /See:/ 'targetInstancesScopedListWarningDataItem' smart constructor.
+data TargetInstancesScopedListWarningDataItem = TargetInstancesScopedListWarningDataItem'
+    { _tislwdiValue :: !(Maybe Text)
+    , _tislwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstancesScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tislwdiValue'
+--
+-- * 'tislwdiKey'
+targetInstancesScopedListWarningDataItem
+    :: TargetInstancesScopedListWarningDataItem
+targetInstancesScopedListWarningDataItem =
+    TargetInstancesScopedListWarningDataItem'
+    { _tislwdiValue = Nothing
+    , _tislwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+tislwdiValue :: Lens' TargetInstancesScopedListWarningDataItem (Maybe Text)
+tislwdiValue
+  = lens _tislwdiValue (\ s a -> s{_tislwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+tislwdiKey :: Lens' TargetInstancesScopedListWarningDataItem (Maybe Text)
+tislwdiKey
+  = lens _tislwdiKey (\ s a -> s{_tislwdiKey = a})
+
+instance FromJSON
+         TargetInstancesScopedListWarningDataItem where
+        parseJSON
+          = withObject
+              "TargetInstancesScopedListWarningDataItem"
+              (\ o ->
+                 TargetInstancesScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON
+         TargetInstancesScopedListWarningDataItem where
+        toJSON TargetInstancesScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _tislwdiValue,
+                  ("key" .=) <$> _tislwdiKey])
+
+-- | [Output Only] An informational warning that appears when the machine
+-- types list is empty.
+--
+-- /See:/ 'machineTypesScopedListWarning' smart constructor.
+data MachineTypesScopedListWarning = MachineTypesScopedListWarning'
+    { _mtslwData    :: !(Maybe [MachineTypesScopedListWarningDataItem])
+    , _mtslwCode    :: !(Maybe MachineTypesScopedListWarningCode)
+    , _mtslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypesScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtslwData'
+--
+-- * 'mtslwCode'
+--
+-- * 'mtslwMessage'
+machineTypesScopedListWarning
+    :: MachineTypesScopedListWarning
+machineTypesScopedListWarning =
+    MachineTypesScopedListWarning'
+    { _mtslwData = Nothing
+    , _mtslwCode = Nothing
+    , _mtslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+mtslwData :: Lens' MachineTypesScopedListWarning [MachineTypesScopedListWarningDataItem]
+mtslwData
+  = lens _mtslwData (\ s a -> s{_mtslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+mtslwCode :: Lens' MachineTypesScopedListWarning (Maybe MachineTypesScopedListWarningCode)
+mtslwCode
+  = lens _mtslwCode (\ s a -> s{_mtslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+mtslwMessage :: Lens' MachineTypesScopedListWarning (Maybe Text)
+mtslwMessage
+  = lens _mtslwMessage (\ s a -> s{_mtslwMessage = a})
+
+instance FromJSON MachineTypesScopedListWarning where
+        parseJSON
+          = withObject "MachineTypesScopedListWarning"
+              (\ o ->
+                 MachineTypesScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON MachineTypesScopedListWarning where
+        toJSON MachineTypesScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _mtslwData,
+                  ("code" .=) <$> _mtslwCode,
+                  ("message" .=) <$> _mtslwMessage])
+
+-- | A TargetInstance resource. This resource defines an endpoint instance
+-- that terminates traffic of certain protocols.
+--
+-- /See:/ 'targetInstance' smart constructor.
+data TargetInstance = TargetInstance'
+    { _tiKind              :: !Text
+    , _tiNATPolicy         :: !(Maybe TargetInstanceNATPolicy)
+    , _tiZone              :: !(Maybe Text)
+    , _tiSelfLink          :: !(Maybe Text)
+    , _tiName              :: !(Maybe Text)
+    , _tiCreationTimestamp :: !(Maybe Text)
+    , _tiId                :: !(Maybe (Textual Word64))
+    , _tiDescription       :: !(Maybe Text)
+    , _tiInstance          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tiKind'
+--
+-- * 'tiNATPolicy'
+--
+-- * 'tiZone'
+--
+-- * 'tiSelfLink'
+--
+-- * 'tiName'
+--
+-- * 'tiCreationTimestamp'
+--
+-- * 'tiId'
+--
+-- * 'tiDescription'
+--
+-- * 'tiInstance'
+targetInstance
+    :: TargetInstance
+targetInstance =
+    TargetInstance'
+    { _tiKind = "compute#targetInstance"
+    , _tiNATPolicy = Nothing
+    , _tiZone = Nothing
+    , _tiSelfLink = Nothing
+    , _tiName = Nothing
+    , _tiCreationTimestamp = Nothing
+    , _tiId = Nothing
+    , _tiDescription = Nothing
+    , _tiInstance = Nothing
+    }
+
+-- | [Output Only] The type of the resource. Always compute#targetInstance
+-- for target instances.
+tiKind :: Lens' TargetInstance Text
+tiKind = lens _tiKind (\ s a -> s{_tiKind = a})
+
+-- | NAT option controlling how IPs are NAT\'ed to the instance. Currently
+-- only NO_NAT (default value) is supported.
+tiNATPolicy :: Lens' TargetInstance (Maybe TargetInstanceNATPolicy)
+tiNATPolicy
+  = lens _tiNATPolicy (\ s a -> s{_tiNATPolicy = a})
+
+-- | [Output Only] URL of the zone where the target instance resides.
+tiZone :: Lens' TargetInstance (Maybe Text)
+tiZone = lens _tiZone (\ s a -> s{_tiZone = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+tiSelfLink :: Lens' TargetInstance (Maybe Text)
+tiSelfLink
+  = lens _tiSelfLink (\ s a -> s{_tiSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+tiName :: Lens' TargetInstance (Maybe Text)
+tiName = lens _tiName (\ s a -> s{_tiName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+tiCreationTimestamp :: Lens' TargetInstance (Maybe Text)
+tiCreationTimestamp
+  = lens _tiCreationTimestamp
+      (\ s a -> s{_tiCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+tiId :: Lens' TargetInstance (Maybe Word64)
+tiId
+  = lens _tiId (\ s a -> s{_tiId = a}) .
+      mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+tiDescription :: Lens' TargetInstance (Maybe Text)
+tiDescription
+  = lens _tiDescription
+      (\ s a -> s{_tiDescription = a})
+
+-- | A URL to the virtual machine instance that handles traffic for this
+-- target instance. When creating a target instance, you can provide the
+-- fully-qualified URL or a valid partial URL to the desired virtual
+-- machine. For example, the following are all valid URLs: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/instances\/instance
+-- - projects\/project\/zones\/zone\/instances\/instance -
+-- zones\/zone\/instances\/instance
+tiInstance :: Lens' TargetInstance (Maybe Text)
+tiInstance
+  = lens _tiInstance (\ s a -> s{_tiInstance = a})
+
+instance FromJSON TargetInstance where
+        parseJSON
+          = withObject "TargetInstance"
+              (\ o ->
+                 TargetInstance' <$>
+                   (o .:? "kind" .!= "compute#targetInstance") <*>
+                     (o .:? "natPolicy")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description")
+                     <*> (o .:? "instance"))
+
+instance ToJSON TargetInstance where
+        toJSON TargetInstance'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _tiKind),
+                  ("natPolicy" .=) <$> _tiNATPolicy,
+                  ("zone" .=) <$> _tiZone,
+                  ("selfLink" .=) <$> _tiSelfLink,
+                  ("name" .=) <$> _tiName,
+                  ("creationTimestamp" .=) <$> _tiCreationTimestamp,
+                  ("id" .=) <$> _tiId,
+                  ("description" .=) <$> _tiDescription,
+                  ("instance" .=) <$> _tiInstance])
+
+--
+-- /See:/ 'targetPoolInstanceHealth' smart constructor.
+data TargetPoolInstanceHealth = TargetPoolInstanceHealth'
+    { _tpihKind         :: !Text
+    , _tpihHealthStatus :: !(Maybe [HealthStatus])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolInstanceHealth' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpihKind'
+--
+-- * 'tpihHealthStatus'
+targetPoolInstanceHealth
+    :: TargetPoolInstanceHealth
+targetPoolInstanceHealth =
+    TargetPoolInstanceHealth'
+    { _tpihKind = "compute#targetPoolInstanceHealth"
+    , _tpihHealthStatus = Nothing
+    }
+
+-- | [Output Only] Type of resource. Always compute#targetPoolInstanceHealth
+-- when checking the health of an instance.
+tpihKind :: Lens' TargetPoolInstanceHealth Text
+tpihKind = lens _tpihKind (\ s a -> s{_tpihKind = a})
+
+tpihHealthStatus :: Lens' TargetPoolInstanceHealth [HealthStatus]
+tpihHealthStatus
+  = lens _tpihHealthStatus
+      (\ s a -> s{_tpihHealthStatus = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPoolInstanceHealth where
+        parseJSON
+          = withObject "TargetPoolInstanceHealth"
+              (\ o ->
+                 TargetPoolInstanceHealth' <$>
+                   (o .:? "kind" .!= "compute#targetPoolInstanceHealth")
+                     <*> (o .:? "healthStatus" .!= mempty))
+
+instance ToJSON TargetPoolInstanceHealth where
+        toJSON TargetPoolInstanceHealth'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _tpihKind),
+                  ("healthStatus" .=) <$> _tpihHealthStatus])
+
+--
+-- /See:/ 'instanceGroupManagersListManagedInstancesResponse' smart constructor.
+newtype InstanceGroupManagersListManagedInstancesResponse = InstanceGroupManagersListManagedInstancesResponse'
+    { _igmlmirManagedInstances :: Maybe [ManagedInstance]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersListManagedInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmlmirManagedInstances'
+instanceGroupManagersListManagedInstancesResponse
+    :: InstanceGroupManagersListManagedInstancesResponse
+instanceGroupManagersListManagedInstancesResponse =
+    InstanceGroupManagersListManagedInstancesResponse'
+    { _igmlmirManagedInstances = Nothing
+    }
+
+-- | [Output Only] The list of instances in the managed instance group.
+igmlmirManagedInstances :: Lens' InstanceGroupManagersListManagedInstancesResponse [ManagedInstance]
+igmlmirManagedInstances
+  = lens _igmlmirManagedInstances
+      (\ s a -> s{_igmlmirManagedInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupManagersListManagedInstancesResponse
+         where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersListManagedInstancesResponse"
+              (\ o ->
+                 InstanceGroupManagersListManagedInstancesResponse'
+                   <$> (o .:? "managedInstances" .!= mempty))
+
+instance ToJSON
+         InstanceGroupManagersListManagedInstancesResponse
+         where
+        toJSON
+          InstanceGroupManagersListManagedInstancesResponse'{..}
+          = object
+              (catMaybes
+                 [("managedInstances" .=) <$>
+                    _igmlmirManagedInstances])
+
+-- |
+--
+-- /See:/ 'instanceProperties' smart constructor.
+data InstanceProperties = InstanceProperties'
+    { _ipServiceAccounts   :: !(Maybe [ServiceAccount])
+    , _ipNetworkInterfaces :: !(Maybe [NetworkInterface])
+    , _ipMachineType       :: !(Maybe Text)
+    , _ipMetadata          :: !(Maybe Metadata)
+    , _ipScheduling        :: !(Maybe Scheduling)
+    , _ipDisks             :: !(Maybe [AttachedDisk])
+    , _ipCanIPForward      :: !(Maybe Bool)
+    , _ipDescription       :: !(Maybe Text)
+    , _ipTags              :: !(Maybe Tags)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipServiceAccounts'
+--
+-- * 'ipNetworkInterfaces'
+--
+-- * 'ipMachineType'
+--
+-- * 'ipMetadata'
+--
+-- * 'ipScheduling'
+--
+-- * 'ipDisks'
+--
+-- * 'ipCanIPForward'
+--
+-- * 'ipDescription'
+--
+-- * 'ipTags'
+instanceProperties
+    :: InstanceProperties
+instanceProperties =
+    InstanceProperties'
+    { _ipServiceAccounts = Nothing
+    , _ipNetworkInterfaces = Nothing
+    , _ipMachineType = Nothing
+    , _ipMetadata = Nothing
+    , _ipScheduling = Nothing
+    , _ipDisks = Nothing
+    , _ipCanIPForward = Nothing
+    , _ipDescription = Nothing
+    , _ipTags = Nothing
+    }
+
+-- | A list of service accounts with specified scopes. Access tokens for
+-- these service accounts are available to the instances that are created
+-- from this template. Use metadata queries to obtain the access tokens for
+-- these instances.
+ipServiceAccounts :: Lens' InstanceProperties [ServiceAccount]
+ipServiceAccounts
+  = lens _ipServiceAccounts
+      (\ s a -> s{_ipServiceAccounts = a})
+      . _Default
+      . _Coerce
+
+-- | An array of network access configurations for this interface.
+ipNetworkInterfaces :: Lens' InstanceProperties [NetworkInterface]
+ipNetworkInterfaces
+  = lens _ipNetworkInterfaces
+      (\ s a -> s{_ipNetworkInterfaces = a})
+      . _Default
+      . _Coerce
+
+-- | The machine type to use for instances that are created from this
+-- template.
+ipMachineType :: Lens' InstanceProperties (Maybe Text)
+ipMachineType
+  = lens _ipMachineType
+      (\ s a -> s{_ipMachineType = a})
+
+-- | The metadata key\/value pairs to assign to instances that are created
+-- from this template. These pairs can consist of custom metadata or
+-- predefined keys. See Project and instance metadata for more information.
+ipMetadata :: Lens' InstanceProperties (Maybe Metadata)
+ipMetadata
+  = lens _ipMetadata (\ s a -> s{_ipMetadata = a})
+
+-- | Specifies the scheduling options for the instances that are created from
+-- this template.
+ipScheduling :: Lens' InstanceProperties (Maybe Scheduling)
+ipScheduling
+  = lens _ipScheduling (\ s a -> s{_ipScheduling = a})
+
+-- | An array of disks that are associated with the instances that are
+-- created from this template.
+ipDisks :: Lens' InstanceProperties [AttachedDisk]
+ipDisks
+  = lens _ipDisks (\ s a -> s{_ipDisks = a}) . _Default
+      . _Coerce
+
+-- | Enables instances created based on this template to send packets with
+-- source IP addresses other than their own and receive packets with
+-- destination IP addresses other than their own. If these instances will
+-- be used as an IP gateway or it will be set as the next-hop in a Route
+-- resource, specify true. If unsure, leave this set to false. See the
+-- canIpForward documentation for more information.
+ipCanIPForward :: Lens' InstanceProperties (Maybe Bool)
+ipCanIPForward
+  = lens _ipCanIPForward
+      (\ s a -> s{_ipCanIPForward = a})
+
+-- | An optional text description for the instances that are created from
+-- this instance template.
+ipDescription :: Lens' InstanceProperties (Maybe Text)
+ipDescription
+  = lens _ipDescription
+      (\ s a -> s{_ipDescription = a})
+
+-- | A list of tags to apply to the instances that are created from this
+-- template. The tags identify valid sources or targets for network
+-- firewalls. The setTags method can modify this list of tags. Each tag
+-- within the list must comply with RFC1035.
+ipTags :: Lens' InstanceProperties (Maybe Tags)
+ipTags = lens _ipTags (\ s a -> s{_ipTags = a})
+
+instance FromJSON InstanceProperties where
+        parseJSON
+          = withObject "InstanceProperties"
+              (\ o ->
+                 InstanceProperties' <$>
+                   (o .:? "serviceAccounts" .!= mempty) <*>
+                     (o .:? "networkInterfaces" .!= mempty)
+                     <*> (o .:? "machineType")
+                     <*> (o .:? "metadata")
+                     <*> (o .:? "scheduling")
+                     <*> (o .:? "disks" .!= mempty)
+                     <*> (o .:? "canIpForward")
+                     <*> (o .:? "description")
+                     <*> (o .:? "tags"))
+
+instance ToJSON InstanceProperties where
+        toJSON InstanceProperties'{..}
+          = object
+              (catMaybes
+                 [("serviceAccounts" .=) <$> _ipServiceAccounts,
+                  ("networkInterfaces" .=) <$> _ipNetworkInterfaces,
+                  ("machineType" .=) <$> _ipMachineType,
+                  ("metadata" .=) <$> _ipMetadata,
+                  ("scheduling" .=) <$> _ipScheduling,
+                  ("disks" .=) <$> _ipDisks,
+                  ("canIpForward" .=) <$> _ipCanIPForward,
+                  ("description" .=) <$> _ipDescription,
+                  ("tags" .=) <$> _ipTags])
+
+-- | [Output Only] Informational warning which replaces the list of disk
+-- types when the list is empty.
+--
+-- /See:/ 'diskTypesScopedListWarning' smart constructor.
+data DiskTypesScopedListWarning = DiskTypesScopedListWarning'
+    { _dtslwData    :: !(Maybe [DiskTypesScopedListWarningDataItem])
+    , _dtslwCode    :: !(Maybe DiskTypesScopedListWarningCode)
+    , _dtslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskTypesScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtslwData'
+--
+-- * 'dtslwCode'
+--
+-- * 'dtslwMessage'
+diskTypesScopedListWarning
+    :: DiskTypesScopedListWarning
+diskTypesScopedListWarning =
+    DiskTypesScopedListWarning'
+    { _dtslwData = Nothing
+    , _dtslwCode = Nothing
+    , _dtslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+dtslwData :: Lens' DiskTypesScopedListWarning [DiskTypesScopedListWarningDataItem]
+dtslwData
+  = lens _dtslwData (\ s a -> s{_dtslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+dtslwCode :: Lens' DiskTypesScopedListWarning (Maybe DiskTypesScopedListWarningCode)
+dtslwCode
+  = lens _dtslwCode (\ s a -> s{_dtslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+dtslwMessage :: Lens' DiskTypesScopedListWarning (Maybe Text)
+dtslwMessage
+  = lens _dtslwMessage (\ s a -> s{_dtslwMessage = a})
+
+instance FromJSON DiskTypesScopedListWarning where
+        parseJSON
+          = withObject "DiskTypesScopedListWarning"
+              (\ o ->
+                 DiskTypesScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON DiskTypesScopedListWarning where
+        toJSON DiskTypesScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _dtslwData,
+                  ("code" .=) <$> _dtslwCode,
+                  ("message" .=) <$> _dtslwMessage])
+
+-- | [Input Only] Specifies the parameters for a new disk that will be
+-- created alongside the new instance. Use initialization parameters to
+-- create boot disks or local SSDs attached to the new instance. This
+-- property is mutually exclusive with the source property; you can only
+-- define one or the other, but not both.
+--
+-- /See:/ 'attachedDiskInitializeParams' smart constructor.
+data AttachedDiskInitializeParams = AttachedDiskInitializeParams'
+    { _adipSourceImage :: !(Maybe Text)
+    , _adipDiskSizeGb  :: !(Maybe (Textual Int64))
+    , _adipDiskName    :: !(Maybe Text)
+    , _adipDiskType    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AttachedDiskInitializeParams' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adipSourceImage'
+--
+-- * 'adipDiskSizeGb'
+--
+-- * 'adipDiskName'
+--
+-- * 'adipDiskType'
+attachedDiskInitializeParams
+    :: AttachedDiskInitializeParams
+attachedDiskInitializeParams =
+    AttachedDiskInitializeParams'
+    { _adipSourceImage = Nothing
+    , _adipDiskSizeGb = Nothing
+    , _adipDiskName = Nothing
+    , _adipDiskType = Nothing
+    }
+
+-- | The source image used to create this disk. If the source image is
+-- deleted, this field will not be set. To create a disk with one of the
+-- public operating system images, specify the image by its family name.
+-- For example, specify family\/debian-8 to use the latest Debian 8 image:
+-- projects\/debian-cloud\/global\/images\/family\/debian-8 Alternatively,
+-- use a specific version of a public operating system image:
+-- projects\/debian-cloud\/global\/images\/debian-8-jessie-vYYYYMMDD To
+-- create a disk with a private image that you created, specify the image
+-- name in the following format: global\/images\/my-private-image You can
+-- also specify a private image by its image family, which returns the
+-- latest version of the image in that family. Replace the image name with
+-- family\/family-name: global\/images\/family\/my-private-family
+adipSourceImage :: Lens' AttachedDiskInitializeParams (Maybe Text)
+adipSourceImage
+  = lens _adipSourceImage
+      (\ s a -> s{_adipSourceImage = a})
+
+-- | Specifies the size of the disk in base-2 GB.
+adipDiskSizeGb :: Lens' AttachedDiskInitializeParams (Maybe Int64)
+adipDiskSizeGb
+  = lens _adipDiskSizeGb
+      (\ s a -> s{_adipDiskSizeGb = a})
+      . mapping _Coerce
+
+-- | Specifies the disk name. If not specified, the default is to use the
+-- name of the instance.
+adipDiskName :: Lens' AttachedDiskInitializeParams (Maybe Text)
+adipDiskName
+  = lens _adipDiskName (\ s a -> s{_adipDiskName = a})
+
+-- | Specifies the disk type to use to create the instance. If not specified,
+-- the default is pd-standard, specified using the full URL. For example:
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/diskTypes\/pd-standard
+-- Other values include pd-ssd and local-ssd. If you define this field, you
+-- can provide either the full or partial URL. For example, the following
+-- are valid values: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/diskTypes\/diskType
+-- - projects\/project\/zones\/zone\/diskTypes\/diskType -
+-- zones\/zone\/diskTypes\/diskType
+adipDiskType :: Lens' AttachedDiskInitializeParams (Maybe Text)
+adipDiskType
+  = lens _adipDiskType (\ s a -> s{_adipDiskType = a})
+
+instance FromJSON AttachedDiskInitializeParams where
+        parseJSON
+          = withObject "AttachedDiskInitializeParams"
+              (\ o ->
+                 AttachedDiskInitializeParams' <$>
+                   (o .:? "sourceImage") <*> (o .:? "diskSizeGb") <*>
+                     (o .:? "diskName")
+                     <*> (o .:? "diskType"))
+
+instance ToJSON AttachedDiskInitializeParams where
+        toJSON AttachedDiskInitializeParams'{..}
+          = object
+              (catMaybes
+                 [("sourceImage" .=) <$> _adipSourceImage,
+                  ("diskSizeGb" .=) <$> _adipDiskSizeGb,
+                  ("diskName" .=) <$> _adipDiskName,
+                  ("diskType" .=) <$> _adipDiskType])
+
+--
+-- /See:/ 'addressesScopedListWarningDataItem' smart constructor.
+data AddressesScopedListWarningDataItem = AddressesScopedListWarningDataItem'
+    { _aslwdiValue :: !(Maybe Text)
+    , _aslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddressesScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aslwdiValue'
+--
+-- * 'aslwdiKey'
+addressesScopedListWarningDataItem
+    :: AddressesScopedListWarningDataItem
+addressesScopedListWarningDataItem =
+    AddressesScopedListWarningDataItem'
+    { _aslwdiValue = Nothing
+    , _aslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+aslwdiValue :: Lens' AddressesScopedListWarningDataItem (Maybe Text)
+aslwdiValue
+  = lens _aslwdiValue (\ s a -> s{_aslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+aslwdiKey :: Lens' AddressesScopedListWarningDataItem (Maybe Text)
+aslwdiKey
+  = lens _aslwdiKey (\ s a -> s{_aslwdiKey = a})
+
+instance FromJSON AddressesScopedListWarningDataItem
+         where
+        parseJSON
+          = withObject "AddressesScopedListWarningDataItem"
+              (\ o ->
+                 AddressesScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON AddressesScopedListWarningDataItem
+         where
+        toJSON AddressesScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _aslwdiValue,
+                  ("key" .=) <$> _aslwdiKey])
+
+-- | A network interface resource attached to an instance.
+--
+-- /See:/ 'networkInterface' smart constructor.
+data NetworkInterface = NetworkInterface'
+    { _niNetwork       :: !(Maybe Text)
+    , _niName          :: !(Maybe Text)
+    , _niNetworkIP     :: !(Maybe Text)
+    , _niSubnetwork    :: !(Maybe Text)
+    , _niAccessConfigs :: !(Maybe [AccessConfig])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInterface' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niNetwork'
+--
+-- * 'niName'
+--
+-- * 'niNetworkIP'
+--
+-- * 'niSubnetwork'
+--
+-- * 'niAccessConfigs'
+networkInterface
+    :: NetworkInterface
+networkInterface =
+    NetworkInterface'
+    { _niNetwork = Nothing
+    , _niName = Nothing
+    , _niNetworkIP = Nothing
+    , _niSubnetwork = Nothing
+    , _niAccessConfigs = Nothing
+    }
+
+-- | URL of the network resource for this instance. This is required for
+-- creating an instance but optional when creating a firewall rule. If not
+-- specified when creating a firewall rule, the default network is used:
+-- global\/networks\/default If you specify this property, you can specify
+-- the network as a full or partial URL. For example, the following are all
+-- valid URLs: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/global\/networks\/network
+-- - projects\/project\/global\/networks\/network -
+-- global\/networks\/default
+niNetwork :: Lens' NetworkInterface (Maybe Text)
+niNetwork
+  = lens _niNetwork (\ s a -> s{_niNetwork = a})
+
+-- | [Output Only] The name of the network interface, generated by the
+-- server. For network devices, these are eth0, eth1, etc.
+niName :: Lens' NetworkInterface (Maybe Text)
+niName = lens _niName (\ s a -> s{_niName = a})
+
+-- | An IPv4 internal network address to assign to the instance for this
+-- network interface. If not specified by the user, an unused internal IP
+-- is assigned by the system.
+niNetworkIP :: Lens' NetworkInterface (Maybe Text)
+niNetworkIP
+  = lens _niNetworkIP (\ s a -> s{_niNetworkIP = a})
+
+-- | The URL of the Subnetwork resource for this instance. If the network
+-- resource is in legacy mode, do not provide this property. If the network
+-- is in auto subnet mode, providing the subnetwork is optional. If the
+-- network is in custom subnet mode, then this field should be specified.
+-- If you specify this property, you can specify the subnetwork as a full
+-- or partial URL. For example, the following are all valid URLs: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/regions\/region\/subnetworks\/subnetwork
+-- - regions\/region\/subnetworks\/subnetwork
+niSubnetwork :: Lens' NetworkInterface (Maybe Text)
+niSubnetwork
+  = lens _niSubnetwork (\ s a -> s{_niSubnetwork = a})
+
+-- | An array of configurations for this interface. Currently, ONE_TO_ONE_NAT
+-- is the only access config supported. If there are no accessConfigs
+-- specified, then this instance will have no external internet access.
+niAccessConfigs :: Lens' NetworkInterface [AccessConfig]
+niAccessConfigs
+  = lens _niAccessConfigs
+      (\ s a -> s{_niAccessConfigs = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON NetworkInterface where
+        parseJSON
+          = withObject "NetworkInterface"
+              (\ o ->
+                 NetworkInterface' <$>
+                   (o .:? "network") <*> (o .:? "name") <*>
+                     (o .:? "networkIP")
+                     <*> (o .:? "subnetwork")
+                     <*> (o .:? "accessConfigs" .!= mempty))
+
+instance ToJSON NetworkInterface where
+        toJSON NetworkInterface'{..}
+          = object
+              (catMaybes
+                 [("network" .=) <$> _niNetwork,
+                  ("name" .=) <$> _niName,
+                  ("networkIP" .=) <$> _niNetworkIP,
+                  ("subnetwork" .=) <$> _niSubnetwork,
+                  ("accessConfigs" .=) <$> _niAccessConfigs])
+
+--
+-- /See:/ 'targetPoolsRemoveHealthCheckRequest' smart constructor.
+newtype TargetPoolsRemoveHealthCheckRequest = TargetPoolsRemoveHealthCheckRequest'
+    { _tprhcrHealthChecks :: Maybe [HealthCheckReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsRemoveHealthCheckRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tprhcrHealthChecks'
+targetPoolsRemoveHealthCheckRequest
+    :: TargetPoolsRemoveHealthCheckRequest
+targetPoolsRemoveHealthCheckRequest =
+    TargetPoolsRemoveHealthCheckRequest'
+    { _tprhcrHealthChecks = Nothing
+    }
+
+-- | Health check URL to be removed. This can be a full or valid partial URL.
+-- For example, the following are valid URLs: -
+-- https:\/\/www.googleapis.com\/compute\/beta\/projects\/project\/global\/httpHealthChecks\/health-check
+-- - projects\/project\/global\/httpHealthChecks\/health-check -
+-- global\/httpHealthChecks\/health-check
+tprhcrHealthChecks :: Lens' TargetPoolsRemoveHealthCheckRequest [HealthCheckReference]
+tprhcrHealthChecks
+  = lens _tprhcrHealthChecks
+      (\ s a -> s{_tprhcrHealthChecks = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPoolsRemoveHealthCheckRequest
+         where
+        parseJSON
+          = withObject "TargetPoolsRemoveHealthCheckRequest"
+              (\ o ->
+                 TargetPoolsRemoveHealthCheckRequest' <$>
+                   (o .:? "healthChecks" .!= mempty))
+
+instance ToJSON TargetPoolsRemoveHealthCheckRequest
+         where
+        toJSON TargetPoolsRemoveHealthCheckRequest'{..}
+          = object
+              (catMaybes
+                 [("healthChecks" .=) <$> _tprhcrHealthChecks])
+
+-- | A list of instance templates.
+--
+-- /See:/ 'instanceTemplateList' smart constructor.
+data InstanceTemplateList = InstanceTemplateList'
+    { _itlNextPageToken :: !(Maybe Text)
+    , _itlKind          :: !Text
+    , _itlItems         :: !(Maybe [InstanceTemplate])
+    , _itlSelfLink      :: !(Maybe Text)
+    , _itlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceTemplateList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'itlNextPageToken'
+--
+-- * 'itlKind'
+--
+-- * 'itlItems'
+--
+-- * 'itlSelfLink'
+--
+-- * 'itlId'
+instanceTemplateList
+    :: InstanceTemplateList
+instanceTemplateList =
+    InstanceTemplateList'
+    { _itlNextPageToken = Nothing
+    , _itlKind = "compute#instanceTemplateList"
+    , _itlItems = Nothing
+    , _itlSelfLink = Nothing
+    , _itlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+itlNextPageToken :: Lens' InstanceTemplateList (Maybe Text)
+itlNextPageToken
+  = lens _itlNextPageToken
+      (\ s a -> s{_itlNextPageToken = a})
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceTemplatesListResponse for instance template lists.
+itlKind :: Lens' InstanceTemplateList Text
+itlKind = lens _itlKind (\ s a -> s{_itlKind = a})
+
+-- | [Output Only] list of InstanceTemplate resources.
+itlItems :: Lens' InstanceTemplateList [InstanceTemplate]
+itlItems
+  = lens _itlItems (\ s a -> s{_itlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The URL for this instance template list. The server
+-- defines this URL.
+itlSelfLink :: Lens' InstanceTemplateList (Maybe Text)
+itlSelfLink
+  = lens _itlSelfLink (\ s a -> s{_itlSelfLink = a})
+
+-- | [Output Only] A unique identifier for this instance template. The server
+-- defines this identifier.
+itlId :: Lens' InstanceTemplateList (Maybe Text)
+itlId = lens _itlId (\ s a -> s{_itlId = a})
+
+instance FromJSON InstanceTemplateList where
+        parseJSON
+          = withObject "InstanceTemplateList"
+              (\ o ->
+                 InstanceTemplateList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#instanceTemplateList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceTemplateList where
+        toJSON InstanceTemplateList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _itlNextPageToken,
+                  Just ("kind" .= _itlKind),
+                  ("items" .=) <$> _itlItems,
+                  ("selfLink" .=) <$> _itlSelfLink,
+                  ("id" .=) <$> _itlId])
+
+-- | Contains a list of Route resources.
+--
+-- /See:/ 'routeList' smart constructor.
+data RouteList = RouteList'
+    { _rlNextPageToken :: !(Maybe Text)
+    , _rlKind          :: !Text
+    , _rlItems         :: !(Maybe [Route])
+    , _rlSelfLink      :: !(Maybe Text)
+    , _rlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RouteList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlNextPageToken'
+--
+-- * 'rlKind'
+--
+-- * 'rlItems'
+--
+-- * 'rlSelfLink'
+--
+-- * 'rlId'
+routeList
+    :: RouteList
+routeList =
+    RouteList'
+    { _rlNextPageToken = Nothing
+    , _rlKind = "compute#routeList"
+    , _rlItems = Nothing
+    , _rlSelfLink = Nothing
+    , _rlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+rlNextPageToken :: Lens' RouteList (Maybe Text)
+rlNextPageToken
+  = lens _rlNextPageToken
+      (\ s a -> s{_rlNextPageToken = a})
+
+-- | Type of resource.
+rlKind :: Lens' RouteList Text
+rlKind = lens _rlKind (\ s a -> s{_rlKind = a})
+
+-- | [Output Only] A list of Route resources.
+rlItems :: Lens' RouteList [Route]
+rlItems
+  = lens _rlItems (\ s a -> s{_rlItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+rlSelfLink :: Lens' RouteList (Maybe Text)
+rlSelfLink
+  = lens _rlSelfLink (\ s a -> s{_rlSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Defined by the server.
+rlId :: Lens' RouteList (Maybe Text)
+rlId = lens _rlId (\ s a -> s{_rlId = a})
+
+instance FromJSON RouteList where
+        parseJSON
+          = withObject "RouteList"
+              (\ o ->
+                 RouteList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#routeList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON RouteList where
+        toJSON RouteList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _rlNextPageToken,
+                  Just ("kind" .= _rlKind), ("items" .=) <$> _rlItems,
+                  ("selfLink" .=) <$> _rlSelfLink,
+                  ("id" .=) <$> _rlId])
+
+-- | Contains a list of TargetVpnGateway resources.
+--
+-- /See:/ 'targetVPNGatewayList' smart constructor.
+data TargetVPNGatewayList = TargetVPNGatewayList'
+    { _tvglNextPageToken :: !(Maybe Text)
+    , _tvglKind          :: !Text
+    , _tvglItems         :: !(Maybe [TargetVPNGateway])
+    , _tvglSelfLink      :: !(Maybe Text)
+    , _tvglId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGatewayList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvglNextPageToken'
+--
+-- * 'tvglKind'
+--
+-- * 'tvglItems'
+--
+-- * 'tvglSelfLink'
+--
+-- * 'tvglId'
+targetVPNGatewayList
+    :: TargetVPNGatewayList
+targetVPNGatewayList =
+    TargetVPNGatewayList'
+    { _tvglNextPageToken = Nothing
+    , _tvglKind = "compute#targetVpnGatewayList"
+    , _tvglItems = Nothing
+    , _tvglSelfLink = Nothing
+    , _tvglId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+tvglNextPageToken :: Lens' TargetVPNGatewayList (Maybe Text)
+tvglNextPageToken
+  = lens _tvglNextPageToken
+      (\ s a -> s{_tvglNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#targetVpnGateway for
+-- target VPN gateways.
+tvglKind :: Lens' TargetVPNGatewayList Text
+tvglKind = lens _tvglKind (\ s a -> s{_tvglKind = a})
+
+-- | [Output Only] A list of TargetVpnGateway resources.
+tvglItems :: Lens' TargetVPNGatewayList [TargetVPNGateway]
+tvglItems
+  = lens _tvglItems (\ s a -> s{_tvglItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for the resource.
+tvglSelfLink :: Lens' TargetVPNGatewayList (Maybe Text)
+tvglSelfLink
+  = lens _tvglSelfLink (\ s a -> s{_tvglSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+tvglId :: Lens' TargetVPNGatewayList (Maybe Text)
+tvglId = lens _tvglId (\ s a -> s{_tvglId = a})
+
+instance FromJSON TargetVPNGatewayList where
+        parseJSON
+          = withObject "TargetVPNGatewayList"
+              (\ o ->
+                 TargetVPNGatewayList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#targetVpnGatewayList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetVPNGatewayList where
+        toJSON TargetVPNGatewayList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tvglNextPageToken,
+                  Just ("kind" .= _tvglKind),
+                  ("items" .=) <$> _tvglItems,
+                  ("selfLink" .=) <$> _tvglSelfLink,
+                  ("id" .=) <$> _tvglId])
+
+-- | Contains a list of SslCertificate resources.
+--
+-- /See:/ 'sslCertificateList' smart constructor.
+data SSLCertificateList = SSLCertificateList'
+    { _sclNextPageToken :: !(Maybe Text)
+    , _sclKind          :: !Text
+    , _sclItems         :: !(Maybe [SSLCertificate])
+    , _sclSelfLink      :: !(Maybe Text)
+    , _sclId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SSLCertificateList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sclNextPageToken'
+--
+-- * 'sclKind'
+--
+-- * 'sclItems'
+--
+-- * 'sclSelfLink'
+--
+-- * 'sclId'
+sslCertificateList
+    :: SSLCertificateList
+sslCertificateList =
+    SSLCertificateList'
+    { _sclNextPageToken = Nothing
+    , _sclKind = "compute#sslCertificateList"
+    , _sclItems = Nothing
+    , _sclSelfLink = Nothing
+    , _sclId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+sclNextPageToken :: Lens' SSLCertificateList (Maybe Text)
+sclNextPageToken
+  = lens _sclNextPageToken
+      (\ s a -> s{_sclNextPageToken = a})
+
+-- | Type of resource.
+sclKind :: Lens' SSLCertificateList Text
+sclKind = lens _sclKind (\ s a -> s{_sclKind = a})
+
+-- | A list of SslCertificate resources.
+sclItems :: Lens' SSLCertificateList [SSLCertificate]
+sclItems
+  = lens _sclItems (\ s a -> s{_sclItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+sclSelfLink :: Lens' SSLCertificateList (Maybe Text)
+sclSelfLink
+  = lens _sclSelfLink (\ s a -> s{_sclSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Defined by the server.
+sclId :: Lens' SSLCertificateList (Maybe Text)
+sclId = lens _sclId (\ s a -> s{_sclId = a})
+
+instance FromJSON SSLCertificateList where
+        parseJSON
+          = withObject "SSLCertificateList"
+              (\ o ->
+                 SSLCertificateList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#sslCertificateList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON SSLCertificateList where
+        toJSON SSLCertificateList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _sclNextPageToken,
+                  Just ("kind" .= _sclKind),
+                  ("items" .=) <$> _sclItems,
+                  ("selfLink" .=) <$> _sclSelfLink,
+                  ("id" .=) <$> _sclId])
+
+--
+-- /See:/ 'firewallAllowedItem' smart constructor.
+data FirewallAllowedItem = FirewallAllowedItem'
+    { _faiIPProtocol :: !(Maybe Text)
+    , _faiPorts      :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FirewallAllowedItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'faiIPProtocol'
+--
+-- * 'faiPorts'
+firewallAllowedItem
+    :: FirewallAllowedItem
+firewallAllowedItem =
+    FirewallAllowedItem'
+    { _faiIPProtocol = Nothing
+    , _faiPorts = Nothing
+    }
+
+-- | The IP protocol that is allowed for this rule. The protocol type is
+-- required when creating a firewall rule. This value can either be one of
+-- the following well known protocol strings (tcp, udp, icmp, esp, ah,
+-- sctp), or the IP protocol number.
+faiIPProtocol :: Lens' FirewallAllowedItem (Maybe Text)
+faiIPProtocol
+  = lens _faiIPProtocol
+      (\ s a -> s{_faiIPProtocol = a})
+
+-- | An optional list of ports which are allowed. This field is only
+-- applicable for UDP or TCP protocol. Each entry must be either an integer
+-- or a range. If not specified, connections through any port are allowed
+-- Example inputs include: [\"22\"], [\"80\",\"443\"], and
+-- [\"12345-12349\"].
+faiPorts :: Lens' FirewallAllowedItem [Text]
+faiPorts
+  = lens _faiPorts (\ s a -> s{_faiPorts = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON FirewallAllowedItem where
+        parseJSON
+          = withObject "FirewallAllowedItem"
+              (\ o ->
+                 FirewallAllowedItem' <$>
+                   (o .:? "IPProtocol") <*> (o .:? "ports" .!= mempty))
+
+instance ToJSON FirewallAllowedItem where
+        toJSON FirewallAllowedItem'{..}
+          = object
+              (catMaybes
+                 [("IPProtocol" .=) <$> _faiIPProtocol,
+                  ("ports" .=) <$> _faiPorts])
+
+-- | Represents a Network resource. Read Networks and Firewalls for more
+-- information.
+--
+-- /See:/ 'network' smart constructor.
+data Network = Network'
+    { _nAutoCreateSubnetworks :: !(Maybe Bool)
+    , _nKind                  :: !Text
+    , _nSubnetworks           :: !(Maybe [Text])
+    , _nIPv4Range             :: !(Maybe Text)
+    , _nSelfLink              :: !(Maybe Text)
+    , _nName                  :: !(Maybe Text)
+    , _nCreationTimestamp     :: !(Maybe Text)
+    , _nId                    :: !(Maybe (Textual Word64))
+    , _nGatewayIPv4           :: !(Maybe Text)
+    , _nDescription           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Network' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nAutoCreateSubnetworks'
+--
+-- * 'nKind'
+--
+-- * 'nSubnetworks'
+--
+-- * 'nIPv4Range'
+--
+-- * 'nSelfLink'
+--
+-- * 'nName'
+--
+-- * 'nCreationTimestamp'
+--
+-- * 'nId'
+--
+-- * 'nGatewayIPv4'
+--
+-- * 'nDescription'
+network
+    :: Network
+network =
+    Network'
+    { _nAutoCreateSubnetworks = Nothing
+    , _nKind = "compute#network"
+    , _nSubnetworks = Nothing
+    , _nIPv4Range = Nothing
+    , _nSelfLink = Nothing
+    , _nName = Nothing
+    , _nCreationTimestamp = Nothing
+    , _nId = Nothing
+    , _nGatewayIPv4 = Nothing
+    , _nDescription = Nothing
+    }
+
+-- | When set to true, the network is created in \"auto subnet mode\". When
+-- set to false, the network is in \"custom subnet mode\". In \"auto subnet
+-- mode\", a newly created network is assigned the default CIDR of
+-- 10.128.0.0\/9 and it automatically creates one subnetwork per region.
+nAutoCreateSubnetworks :: Lens' Network (Maybe Bool)
+nAutoCreateSubnetworks
+  = lens _nAutoCreateSubnetworks
+      (\ s a -> s{_nAutoCreateSubnetworks = a})
+
+-- | [Output Only] Type of the resource. Always compute#network for networks.
+nKind :: Lens' Network Text
+nKind = lens _nKind (\ s a -> s{_nKind = a})
+
+-- | [Output Only] Server-defined fully-qualified URLs for all subnetworks in
+-- this network.
+nSubnetworks :: Lens' Network [Text]
+nSubnetworks
+  = lens _nSubnetworks (\ s a -> s{_nSubnetworks = a})
+      . _Default
+      . _Coerce
+
+-- | The range of internal addresses that are legal on this network. This
+-- range is a CIDR specification, for example: 192.168.0.0\/16. Provided by
+-- the client when the network is created.
+nIPv4Range :: Lens' Network (Maybe Text)
+nIPv4Range
+  = lens _nIPv4Range (\ s a -> s{_nIPv4Range = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+nSelfLink :: Lens' Network (Maybe Text)
+nSelfLink
+  = lens _nSelfLink (\ s a -> s{_nSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+nName :: Lens' Network (Maybe Text)
+nName = lens _nName (\ s a -> s{_nName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+nCreationTimestamp :: Lens' Network (Maybe Text)
+nCreationTimestamp
+  = lens _nCreationTimestamp
+      (\ s a -> s{_nCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+nId :: Lens' Network (Maybe Word64)
+nId
+  = lens _nId (\ s a -> s{_nId = a}) . mapping _Coerce
+
+-- | A gateway address for default routing to other networks. This value is
+-- read only and is selected by the Google Compute Engine, typically as the
+-- first usable address in the IPv4Range.
+nGatewayIPv4 :: Lens' Network (Maybe Text)
+nGatewayIPv4
+  = lens _nGatewayIPv4 (\ s a -> s{_nGatewayIPv4 = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+nDescription :: Lens' Network (Maybe Text)
+nDescription
+  = lens _nDescription (\ s a -> s{_nDescription = a})
+
+instance FromJSON Network where
+        parseJSON
+          = withObject "Network"
+              (\ o ->
+                 Network' <$>
+                   (o .:? "autoCreateSubnetworks") <*>
+                     (o .:? "kind" .!= "compute#network")
+                     <*> (o .:? "subnetworks" .!= mempty)
+                     <*> (o .:? "IPv4Range")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "gatewayIPv4")
+                     <*> (o .:? "description"))
+
+instance ToJSON Network where
+        toJSON Network'{..}
+          = object
+              (catMaybes
+                 [("autoCreateSubnetworks" .=) <$>
+                    _nAutoCreateSubnetworks,
+                  Just ("kind" .= _nKind),
+                  ("subnetworks" .=) <$> _nSubnetworks,
+                  ("IPv4Range" .=) <$> _nIPv4Range,
+                  ("selfLink" .=) <$> _nSelfLink,
+                  ("name" .=) <$> _nName,
+                  ("creationTimestamp" .=) <$> _nCreationTimestamp,
+                  ("id" .=) <$> _nId,
+                  ("gatewayIPv4" .=) <$> _nGatewayIPv4,
+                  ("description" .=) <$> _nDescription])
+
+-- | [Output Only] Informational warning which replaces the list of addresses
+-- when the list is empty.
+--
+-- /See:/ 'addressesScopedListWarning' smart constructor.
+data AddressesScopedListWarning = AddressesScopedListWarning'
+    { _aData    :: !(Maybe [AddressesScopedListWarningDataItem])
+    , _aCode    :: !(Maybe AddressesScopedListWarningCode)
+    , _aMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddressesScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aData'
+--
+-- * 'aCode'
+--
+-- * 'aMessage'
+addressesScopedListWarning
+    :: AddressesScopedListWarning
+addressesScopedListWarning =
+    AddressesScopedListWarning'
+    { _aData = Nothing
+    , _aCode = Nothing
+    , _aMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+aData :: Lens' AddressesScopedListWarning [AddressesScopedListWarningDataItem]
+aData
+  = lens _aData (\ s a -> s{_aData = a}) . _Default .
+      _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+aCode :: Lens' AddressesScopedListWarning (Maybe AddressesScopedListWarningCode)
+aCode = lens _aCode (\ s a -> s{_aCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+aMessage :: Lens' AddressesScopedListWarning (Maybe Text)
+aMessage = lens _aMessage (\ s a -> s{_aMessage = a})
+
+instance FromJSON AddressesScopedListWarning where
+        parseJSON
+          = withObject "AddressesScopedListWarning"
+              (\ o ->
+                 AddressesScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON AddressesScopedListWarning where
+        toJSON AddressesScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _aData, ("code" .=) <$> _aCode,
+                  ("message" .=) <$> _aMessage])
+
+-- | The parameters of the raw disk image.
+--
+-- /See:/ 'imageRawDisk' smart constructor.
+data ImageRawDisk = ImageRawDisk'
+    { _irdContainerType :: !(Maybe ImageRawDiskContainerType)
+    , _irdSource        :: !(Maybe Text)
+    , _irdSha1Checksum  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImageRawDisk' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'irdContainerType'
+--
+-- * 'irdSource'
+--
+-- * 'irdSha1Checksum'
+imageRawDisk
+    :: ImageRawDisk
+imageRawDisk =
+    ImageRawDisk'
+    { _irdContainerType = Nothing
+    , _irdSource = Nothing
+    , _irdSha1Checksum = Nothing
+    }
+
+-- | The format used to encode and transmit the block device, which should be
+-- TAR. This is just a container and transmission format and not a runtime
+-- format. Provided by the client when the disk image is created.
+irdContainerType :: Lens' ImageRawDisk (Maybe ImageRawDiskContainerType)
+irdContainerType
+  = lens _irdContainerType
+      (\ s a -> s{_irdContainerType = a})
+
+-- | The full Google Cloud Storage URL where the disk image is stored. You
+-- must provide either this property or the sourceDisk property but not
+-- both.
+irdSource :: Lens' ImageRawDisk (Maybe Text)
+irdSource
+  = lens _irdSource (\ s a -> s{_irdSource = a})
+
+-- | An optional SHA1 checksum of the disk image before unpackaging; provided
+-- by the client when the disk image is created.
+irdSha1Checksum :: Lens' ImageRawDisk (Maybe Text)
+irdSha1Checksum
+  = lens _irdSha1Checksum
+      (\ s a -> s{_irdSha1Checksum = a})
+
+instance FromJSON ImageRawDisk where
+        parseJSON
+          = withObject "ImageRawDisk"
+              (\ o ->
+                 ImageRawDisk' <$>
+                   (o .:? "containerType") <*> (o .:? "source") <*>
+                     (o .:? "sha1Checksum"))
+
+instance ToJSON ImageRawDisk where
+        toJSON ImageRawDisk'{..}
+          = object
+              (catMaybes
+                 [("containerType" .=) <$> _irdContainerType,
+                  ("source" .=) <$> _irdSource,
+                  ("sha1Checksum" .=) <$> _irdSha1Checksum])
+
+--
+-- /See:/ 'instanceAggregatedList' smart constructor.
+data InstanceAggregatedList = InstanceAggregatedList'
+    { _ialNextPageToken :: !(Maybe Text)
+    , _ialKind          :: !Text
+    , _ialItems         :: !(Maybe InstanceAggregatedListItems)
+    , _ialSelfLink      :: !(Maybe Text)
+    , _ialId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ialNextPageToken'
+--
+-- * 'ialKind'
+--
+-- * 'ialItems'
+--
+-- * 'ialSelfLink'
+--
+-- * 'ialId'
+instanceAggregatedList
+    :: InstanceAggregatedList
+instanceAggregatedList =
+    InstanceAggregatedList'
+    { _ialNextPageToken = Nothing
+    , _ialKind = "compute#instanceAggregatedList"
+    , _ialItems = Nothing
+    , _ialSelfLink = Nothing
+    , _ialId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+ialNextPageToken :: Lens' InstanceAggregatedList (Maybe Text)
+ialNextPageToken
+  = lens _ialNextPageToken
+      (\ s a -> s{_ialNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#instanceAggregatedList
+-- for aggregated lists of Instance resources.
+ialKind :: Lens' InstanceAggregatedList Text
+ialKind = lens _ialKind (\ s a -> s{_ialKind = a})
+
+-- | [Output Only] A map of scoped instance lists.
+ialItems :: Lens' InstanceAggregatedList (Maybe InstanceAggregatedListItems)
+ialItems = lens _ialItems (\ s a -> s{_ialItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+ialSelfLink :: Lens' InstanceAggregatedList (Maybe Text)
+ialSelfLink
+  = lens _ialSelfLink (\ s a -> s{_ialSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+ialId :: Lens' InstanceAggregatedList (Maybe Text)
+ialId = lens _ialId (\ s a -> s{_ialId = a})
+
+instance FromJSON InstanceAggregatedList where
+        parseJSON
+          = withObject "InstanceAggregatedList"
+              (\ o ->
+                 InstanceAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#instanceAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceAggregatedList where
+        toJSON InstanceAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ialNextPageToken,
+                  Just ("kind" .= _ialKind),
+                  ("items" .=) <$> _ialItems,
+                  ("selfLink" .=) <$> _ialSelfLink,
+                  ("id" .=) <$> _ialId])
+
+-- | A reserved address resource.
+--
+-- /See:/ 'address' smart constructor.
+data Address = Address'
+    { _aStatus            :: !(Maybe AddressStatus)
+    , _aUsers             :: !(Maybe [Text])
+    , _aKind              :: !Text
+    , _aAddress           :: !(Maybe Text)
+    , _aSelfLink          :: !(Maybe Text)
+    , _aName              :: !(Maybe Text)
+    , _aCreationTimestamp :: !(Maybe Text)
+    , _aId                :: !(Maybe (Textual Word64))
+    , _aRegion            :: !(Maybe Text)
+    , _aDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Address' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aStatus'
+--
+-- * 'aUsers'
+--
+-- * 'aKind'
+--
+-- * 'aAddress'
+--
+-- * 'aSelfLink'
+--
+-- * 'aName'
+--
+-- * 'aCreationTimestamp'
+--
+-- * 'aId'
+--
+-- * 'aRegion'
+--
+-- * 'aDescription'
+address
+    :: Address
+address =
+    Address'
+    { _aStatus = Nothing
+    , _aUsers = Nothing
+    , _aKind = "compute#address"
+    , _aAddress = Nothing
+    , _aSelfLink = Nothing
+    , _aName = Nothing
+    , _aCreationTimestamp = Nothing
+    , _aId = Nothing
+    , _aRegion = Nothing
+    , _aDescription = Nothing
+    }
+
+-- | [Output Only] The status of the address, which can be either IN_USE or
+-- RESERVED. An address that is RESERVED is currently reserved and
+-- available to use. An IN_USE address is currently being used by another
+-- resource and is not available.
+aStatus :: Lens' Address (Maybe AddressStatus)
+aStatus = lens _aStatus (\ s a -> s{_aStatus = a})
+
+-- | [Output Only] The URLs of the resources that are using this address.
+aUsers :: Lens' Address [Text]
+aUsers
+  = lens _aUsers (\ s a -> s{_aUsers = a}) . _Default .
+      _Coerce
+
+-- | [Output Only] Type of the resource. Always compute#address for
+-- addresses.
+aKind :: Lens' Address Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | The static external IP address represented by this resource.
+aAddress :: Lens' Address (Maybe Text)
+aAddress = lens _aAddress (\ s a -> s{_aAddress = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+aSelfLink :: Lens' Address (Maybe Text)
+aSelfLink
+  = lens _aSelfLink (\ s a -> s{_aSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+aName :: Lens' Address (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+aCreationTimestamp :: Lens' Address (Maybe Text)
+aCreationTimestamp
+  = lens _aCreationTimestamp
+      (\ s a -> s{_aCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+aId :: Lens' Address (Maybe Word64)
+aId
+  = lens _aId (\ s a -> s{_aId = a}) . mapping _Coerce
+
+-- | [Output Only] URL of the region where the regional address resides. This
+-- field is not applicable to global addresses.
+aRegion :: Lens' Address (Maybe Text)
+aRegion = lens _aRegion (\ s a -> s{_aRegion = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+aDescription :: Lens' Address (Maybe Text)
+aDescription
+  = lens _aDescription (\ s a -> s{_aDescription = a})
+
+instance FromJSON Address where
+        parseJSON
+          = withObject "Address"
+              (\ o ->
+                 Address' <$>
+                   (o .:? "status") <*> (o .:? "users" .!= mempty) <*>
+                     (o .:? "kind" .!= "compute#address")
+                     <*> (o .:? "address")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description"))
+
+instance ToJSON Address where
+        toJSON Address'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _aStatus,
+                  ("users" .=) <$> _aUsers, Just ("kind" .= _aKind),
+                  ("address" .=) <$> _aAddress,
+                  ("selfLink" .=) <$> _aSelfLink,
+                  ("name" .=) <$> _aName,
+                  ("creationTimestamp" .=) <$> _aCreationTimestamp,
+                  ("id" .=) <$> _aId, ("region" .=) <$> _aRegion,
+                  ("description" .=) <$> _aDescription])
+
+-- | A Zone resource.
+--
+-- /See:/ 'zone' smart constructor.
+data Zone = Zone'
+    { _zStatus            :: !(Maybe ZoneStatus)
+    , _zKind              :: !Text
+    , _zSelfLink          :: !(Maybe Text)
+    , _zName              :: !(Maybe Text)
+    , _zCreationTimestamp :: !(Maybe Text)
+    , _zId                :: !(Maybe (Textual Word64))
+    , _zRegion            :: !(Maybe Text)
+    , _zDescription       :: !(Maybe Text)
+    , _zDeprecated        :: !(Maybe DeprecationStatus)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Zone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'zStatus'
+--
+-- * 'zKind'
+--
+-- * 'zSelfLink'
+--
+-- * 'zName'
+--
+-- * 'zCreationTimestamp'
+--
+-- * 'zId'
+--
+-- * 'zRegion'
+--
+-- * 'zDescription'
+--
+-- * 'zDeprecated'
+zone
+    :: Zone
+zone =
+    Zone'
+    { _zStatus = Nothing
+    , _zKind = "compute#zone"
+    , _zSelfLink = Nothing
+    , _zName = Nothing
+    , _zCreationTimestamp = Nothing
+    , _zId = Nothing
+    , _zRegion = Nothing
+    , _zDescription = Nothing
+    , _zDeprecated = Nothing
+    }
+
+-- | [Output Only] Status of the zone, either UP or DOWN.
+zStatus :: Lens' Zone (Maybe ZoneStatus)
+zStatus = lens _zStatus (\ s a -> s{_zStatus = a})
+
+-- | [Output Only] Type of the resource. Always compute#zone for zones.
+zKind :: Lens' Zone Text
+zKind = lens _zKind (\ s a -> s{_zKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+zSelfLink :: Lens' Zone (Maybe Text)
+zSelfLink
+  = lens _zSelfLink (\ s a -> s{_zSelfLink = a})
+
+-- | [Output Only] Name of the resource.
+zName :: Lens' Zone (Maybe Text)
+zName = lens _zName (\ s a -> s{_zName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+zCreationTimestamp :: Lens' Zone (Maybe Text)
+zCreationTimestamp
+  = lens _zCreationTimestamp
+      (\ s a -> s{_zCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+zId :: Lens' Zone (Maybe Word64)
+zId
+  = lens _zId (\ s a -> s{_zId = a}) . mapping _Coerce
+
+-- | [Output Only] Full URL reference to the region which hosts the zone.
+zRegion :: Lens' Zone (Maybe Text)
+zRegion = lens _zRegion (\ s a -> s{_zRegion = a})
+
+-- | [Output Only] Textual description of the resource.
+zDescription :: Lens' Zone (Maybe Text)
+zDescription
+  = lens _zDescription (\ s a -> s{_zDescription = a})
+
+-- | [Output Only] The deprecation status associated with this zone.
+zDeprecated :: Lens' Zone (Maybe DeprecationStatus)
+zDeprecated
+  = lens _zDeprecated (\ s a -> s{_zDeprecated = a})
+
+instance FromJSON Zone where
+        parseJSON
+          = withObject "Zone"
+              (\ o ->
+                 Zone' <$>
+                   (o .:? "status") <*>
+                     (o .:? "kind" .!= "compute#zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description")
+                     <*> (o .:? "deprecated"))
+
+instance ToJSON Zone where
+        toJSON Zone'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _zStatus, Just ("kind" .= _zKind),
+                  ("selfLink" .=) <$> _zSelfLink,
+                  ("name" .=) <$> _zName,
+                  ("creationTimestamp" .=) <$> _zCreationTimestamp,
+                  ("id" .=) <$> _zId, ("region" .=) <$> _zRegion,
+                  ("description" .=) <$> _zDescription,
+                  ("deprecated" .=) <$> _zDeprecated])
+
+--
+-- /See:/ 'instanceGroupManagersRecreateInstancesRequest' smart constructor.
+newtype InstanceGroupManagersRecreateInstancesRequest = InstanceGroupManagersRecreateInstancesRequest'
+    { _igmrirInstances :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersRecreateInstancesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmrirInstances'
+instanceGroupManagersRecreateInstancesRequest
+    :: InstanceGroupManagersRecreateInstancesRequest
+instanceGroupManagersRecreateInstancesRequest =
+    InstanceGroupManagersRecreateInstancesRequest'
+    { _igmrirInstances = Nothing
+    }
+
+-- | The URL for one or more instances to recreate.
+igmrirInstances :: Lens' InstanceGroupManagersRecreateInstancesRequest [Text]
+igmrirInstances
+  = lens _igmrirInstances
+      (\ s a -> s{_igmrirInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupManagersRecreateInstancesRequest where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersRecreateInstancesRequest"
+              (\ o ->
+                 InstanceGroupManagersRecreateInstancesRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON
+         InstanceGroupManagersRecreateInstancesRequest where
+        toJSON
+          InstanceGroupManagersRecreateInstancesRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _igmrirInstances])
+
+--
+-- /See:/ 'instancesScopedList' smart constructor.
+data InstancesScopedList = InstancesScopedList'
+    { _islWarning   :: !(Maybe InstancesScopedListWarning)
+    , _islInstances :: !(Maybe [Instance])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstancesScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'islWarning'
+--
+-- * 'islInstances'
+instancesScopedList
+    :: InstancesScopedList
+instancesScopedList =
+    InstancesScopedList'
+    { _islWarning = Nothing
+    , _islInstances = Nothing
+    }
+
+-- | [Output Only] Informational warning which replaces the list of instances
+-- when the list is empty.
+islWarning :: Lens' InstancesScopedList (Maybe InstancesScopedListWarning)
+islWarning
+  = lens _islWarning (\ s a -> s{_islWarning = a})
+
+-- | [Output Only] List of instances contained in this scope.
+islInstances :: Lens' InstancesScopedList [Instance]
+islInstances
+  = lens _islInstances (\ s a -> s{_islInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstancesScopedList where
+        parseJSON
+          = withObject "InstancesScopedList"
+              (\ o ->
+                 InstancesScopedList' <$>
+                   (o .:? "warning") <*> (o .:? "instances" .!= mempty))
+
+instance ToJSON InstancesScopedList where
+        toJSON InstancesScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _islWarning,
+                  ("instances" .=) <$> _islInstances])
+
+-- | A full or valid partial URL to a health check. For example, the
+-- following are valid URLs: -
+-- https:\/\/www.googleapis.com\/compute\/beta\/projects\/project-id\/global\/httpHealthChecks\/health-check
+-- - projects\/project-id\/global\/httpHealthChecks\/health-check -
+-- global\/httpHealthChecks\/health-check
+--
+-- /See:/ 'healthCheckReference' smart constructor.
+newtype HealthCheckReference = HealthCheckReference'
+    { _hcrHealthCheck :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HealthCheckReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hcrHealthCheck'
+healthCheckReference
+    :: HealthCheckReference
+healthCheckReference =
+    HealthCheckReference'
+    { _hcrHealthCheck = Nothing
+    }
+
+hcrHealthCheck :: Lens' HealthCheckReference (Maybe Text)
+hcrHealthCheck
+  = lens _hcrHealthCheck
+      (\ s a -> s{_hcrHealthCheck = a})
+
+instance FromJSON HealthCheckReference where
+        parseJSON
+          = withObject "HealthCheckReference"
+              (\ o ->
+                 HealthCheckReference' <$> (o .:? "healthCheck"))
+
+instance ToJSON HealthCheckReference where
+        toJSON HealthCheckReference'{..}
+          = object
+              (catMaybes [("healthCheck" .=) <$> _hcrHealthCheck])
+
+-- | A map of scoped target instance lists.
+--
+-- /See:/ 'targetInstanceAggregatedListItems' smart constructor.
+newtype TargetInstanceAggregatedListItems = TargetInstanceAggregatedListItems'
+    { _tialiAddtional :: HashMap Text TargetInstancesScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstanceAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tialiAddtional'
+targetInstanceAggregatedListItems
+    :: HashMap Text TargetInstancesScopedList -- ^ 'tialiAddtional'
+    -> TargetInstanceAggregatedListItems
+targetInstanceAggregatedListItems pTialiAddtional_ =
+    TargetInstanceAggregatedListItems'
+    { _tialiAddtional = _Coerce # pTialiAddtional_
+    }
+
+-- | Name of the scope containing this set of target instances.
+tialiAddtional :: Lens' TargetInstanceAggregatedListItems (HashMap Text TargetInstancesScopedList)
+tialiAddtional
+  = lens _tialiAddtional
+      (\ s a -> s{_tialiAddtional = a})
+      . _Coerce
+
+instance FromJSON TargetInstanceAggregatedListItems
+         where
+        parseJSON
+          = withObject "TargetInstanceAggregatedListItems"
+              (\ o ->
+                 TargetInstanceAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON TargetInstanceAggregatedListItems
+         where
+        toJSON = toJSON . _tialiAddtional
+
+--
+-- /See:/ 'instanceGroupAggregatedList' smart constructor.
+data InstanceGroupAggregatedList = InstanceGroupAggregatedList'
+    { _igalNextPageToken :: !(Maybe Text)
+    , _igalKind          :: !Text
+    , _igalItems         :: !(Maybe InstanceGroupAggregatedListItems)
+    , _igalSelfLink      :: !(Maybe Text)
+    , _igalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igalNextPageToken'
+--
+-- * 'igalKind'
+--
+-- * 'igalItems'
+--
+-- * 'igalSelfLink'
+--
+-- * 'igalId'
+instanceGroupAggregatedList
+    :: InstanceGroupAggregatedList
+instanceGroupAggregatedList =
+    InstanceGroupAggregatedList'
+    { _igalNextPageToken = Nothing
+    , _igalKind = "compute#instanceGroupAggregatedList"
+    , _igalItems = Nothing
+    , _igalSelfLink = Nothing
+    , _igalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+igalNextPageToken :: Lens' InstanceGroupAggregatedList (Maybe Text)
+igalNextPageToken
+  = lens _igalNextPageToken
+      (\ s a -> s{_igalNextPageToken = a})
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceGroupAggregatedList for aggregated lists of instance
+-- groups.
+igalKind :: Lens' InstanceGroupAggregatedList Text
+igalKind = lens _igalKind (\ s a -> s{_igalKind = a})
+
+-- | A map of scoped instance group lists.
+igalItems :: Lens' InstanceGroupAggregatedList (Maybe InstanceGroupAggregatedListItems)
+igalItems
+  = lens _igalItems (\ s a -> s{_igalItems = a})
+
+-- | [Output Only] The URL for this resource type. The server generates this
+-- URL.
+igalSelfLink :: Lens' InstanceGroupAggregatedList (Maybe Text)
+igalSelfLink
+  = lens _igalSelfLink (\ s a -> s{_igalSelfLink = a})
+
+-- | [Output Only] A unique identifier for this aggregated list of instance
+-- groups. The server generates this identifier.
+igalId :: Lens' InstanceGroupAggregatedList (Maybe Text)
+igalId = lens _igalId (\ s a -> s{_igalId = a})
+
+instance FromJSON InstanceGroupAggregatedList where
+        parseJSON
+          = withObject "InstanceGroupAggregatedList"
+              (\ o ->
+                 InstanceGroupAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#instanceGroupAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceGroupAggregatedList where
+        toJSON InstanceGroupAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _igalNextPageToken,
+                  Just ("kind" .= _igalKind),
+                  ("items" .=) <$> _igalItems,
+                  ("selfLink" .=) <$> _igalSelfLink,
+                  ("id" .=) <$> _igalId])
+
+-- | Represents a Route resource. A route specifies how certain packets
+-- should be handled by the network. Routes are associated with instances
+-- by tags and the set of routes for a particular instance is called its
+-- routing table. For each packet leaving a instance, the system searches
+-- that instance\'s routing table for a single best matching route. Routes
+-- match packets by destination IP address, preferring smaller or more
+-- specific ranges over larger ones. If there is a tie, the system selects
+-- the route with the smallest priority value. If there is still a tie, it
+-- uses the layer three and four packet headers to select just one of the
+-- remaining matching routes. The packet is then forwarded as specified by
+-- the nextHop field of the winning route - either to another instance
+-- destination, a instance gateway or a Google Compute Engine-operated
+-- gateway. Packets that do not match any route in the sending instance\'s
+-- routing table are dropped.
+--
+-- /See:/ 'route' smart constructor.
+data Route = Route'
+    { _rPriority          :: !(Maybe (Textual Word32))
+    , _rKind              :: !Text
+    , _rNextHopGateway    :: !(Maybe Text)
+    , _rNextHopNetwork    :: !(Maybe Text)
+    , _rNetwork           :: !(Maybe Text)
+    , _rWarnings          :: !(Maybe [RouteWarningsItem])
+    , _rNextHopIP         :: !(Maybe Text)
+    , _rDestRange         :: !(Maybe Text)
+    , _rSelfLink          :: !(Maybe Text)
+    , _rName              :: !(Maybe Text)
+    , _rCreationTimestamp :: !(Maybe Text)
+    , _rId                :: !(Maybe (Textual Word64))
+    , _rNextHopVPNTunnel  :: !(Maybe Text)
+    , _rDescription       :: !(Maybe Text)
+    , _rTags              :: !(Maybe [Text])
+    , _rNextHopInstance   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Route' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rPriority'
+--
+-- * 'rKind'
+--
+-- * 'rNextHopGateway'
+--
+-- * 'rNextHopNetwork'
+--
+-- * 'rNetwork'
+--
+-- * 'rWarnings'
+--
+-- * 'rNextHopIP'
+--
+-- * 'rDestRange'
+--
+-- * 'rSelfLink'
+--
+-- * 'rName'
+--
+-- * 'rCreationTimestamp'
+--
+-- * 'rId'
+--
+-- * 'rNextHopVPNTunnel'
+--
+-- * 'rDescription'
+--
+-- * 'rTags'
+--
+-- * 'rNextHopInstance'
+route
+    :: Route
+route =
+    Route'
+    { _rPriority = Nothing
+    , _rKind = "compute#route"
+    , _rNextHopGateway = Nothing
+    , _rNextHopNetwork = Nothing
+    , _rNetwork = Nothing
+    , _rWarnings = Nothing
+    , _rNextHopIP = Nothing
+    , _rDestRange = Nothing
+    , _rSelfLink = Nothing
+    , _rName = Nothing
+    , _rCreationTimestamp = Nothing
+    , _rId = Nothing
+    , _rNextHopVPNTunnel = Nothing
+    , _rDescription = Nothing
+    , _rTags = Nothing
+    , _rNextHopInstance = Nothing
+    }
+
+-- | The priority of this route. Priority is used to break ties in cases
+-- where there is more than one matching route of equal prefix length. In
+-- the case of two routes with equal prefix length, the one with the
+-- lowest-numbered priority value wins. Default value is 1000. Valid range
+-- is 0 through 65535.
+rPriority :: Lens' Route (Maybe Word32)
+rPriority
+  = lens _rPriority (\ s a -> s{_rPriority = a}) .
+      mapping _Coerce
+
+-- | [Output Only] Type of this resource. Always compute#routes for Route
+-- resources.
+rKind :: Lens' Route Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | The URL to a gateway that should handle matching packets. You can only
+-- specify the internet gateway using a full or partial valid URL:
+-- projects\/\/global\/gateways\/default-internet-gateway
+rNextHopGateway :: Lens' Route (Maybe Text)
+rNextHopGateway
+  = lens _rNextHopGateway
+      (\ s a -> s{_rNextHopGateway = a})
+
+-- | The URL of the local network if it should handle matching packets.
+rNextHopNetwork :: Lens' Route (Maybe Text)
+rNextHopNetwork
+  = lens _rNextHopNetwork
+      (\ s a -> s{_rNextHopNetwork = a})
+
+-- | Fully-qualified URL of the network that this route applies to.
+rNetwork :: Lens' Route (Maybe Text)
+rNetwork = lens _rNetwork (\ s a -> s{_rNetwork = a})
+
+-- | [Output Only] If potential misconfigurations are detected for this
+-- route, this field will be populated with warning messages.
+rWarnings :: Lens' Route [RouteWarningsItem]
+rWarnings
+  = lens _rWarnings (\ s a -> s{_rWarnings = a}) .
+      _Default
+      . _Coerce
+
+-- | The network IP address of an instance that should handle matching
+-- packets.
+rNextHopIP :: Lens' Route (Maybe Text)
+rNextHopIP
+  = lens _rNextHopIP (\ s a -> s{_rNextHopIP = a})
+
+-- | The destination range of outgoing packets that this route applies to.
+rDestRange :: Lens' Route (Maybe Text)
+rDestRange
+  = lens _rDestRange (\ s a -> s{_rDestRange = a})
+
+-- | [Output Only] Server-defined fully-qualified URL for this resource.
+rSelfLink :: Lens' Route (Maybe Text)
+rSelfLink
+  = lens _rSelfLink (\ s a -> s{_rSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+rName :: Lens' Route (Maybe Text)
+rName = lens _rName (\ s a -> s{_rName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+rCreationTimestamp :: Lens' Route (Maybe Text)
+rCreationTimestamp
+  = lens _rCreationTimestamp
+      (\ s a -> s{_rCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+rId :: Lens' Route (Maybe Word64)
+rId
+  = lens _rId (\ s a -> s{_rId = a}) . mapping _Coerce
+
+-- | The URL to a VpnTunnel that should handle matching packets.
+rNextHopVPNTunnel :: Lens' Route (Maybe Text)
+rNextHopVPNTunnel
+  = lens _rNextHopVPNTunnel
+      (\ s a -> s{_rNextHopVPNTunnel = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+rDescription :: Lens' Route (Maybe Text)
+rDescription
+  = lens _rDescription (\ s a -> s{_rDescription = a})
+
+-- | A list of instance tags to which this route applies.
+rTags :: Lens' Route [Text]
+rTags
+  = lens _rTags (\ s a -> s{_rTags = a}) . _Default .
+      _Coerce
+
+-- | The URL to an instance that should handle matching packets. You can
+-- specify this as a full or partial URL. For example:
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/instances\/
+rNextHopInstance :: Lens' Route (Maybe Text)
+rNextHopInstance
+  = lens _rNextHopInstance
+      (\ s a -> s{_rNextHopInstance = a})
+
+instance FromJSON Route where
+        parseJSON
+          = withObject "Route"
+              (\ o ->
+                 Route' <$>
+                   (o .:? "priority") <*>
+                     (o .:? "kind" .!= "compute#route")
+                     <*> (o .:? "nextHopGateway")
+                     <*> (o .:? "nextHopNetwork")
+                     <*> (o .:? "network")
+                     <*> (o .:? "warnings" .!= mempty)
+                     <*> (o .:? "nextHopIp")
+                     <*> (o .:? "destRange")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "nextHopVpnTunnel")
+                     <*> (o .:? "description")
+                     <*> (o .:? "tags" .!= mempty)
+                     <*> (o .:? "nextHopInstance"))
+
+instance ToJSON Route where
+        toJSON Route'{..}
+          = object
+              (catMaybes
+                 [("priority" .=) <$> _rPriority,
+                  Just ("kind" .= _rKind),
+                  ("nextHopGateway" .=) <$> _rNextHopGateway,
+                  ("nextHopNetwork" .=) <$> _rNextHopNetwork,
+                  ("network" .=) <$> _rNetwork,
+                  ("warnings" .=) <$> _rWarnings,
+                  ("nextHopIp" .=) <$> _rNextHopIP,
+                  ("destRange" .=) <$> _rDestRange,
+                  ("selfLink" .=) <$> _rSelfLink,
+                  ("name" .=) <$> _rName,
+                  ("creationTimestamp" .=) <$> _rCreationTimestamp,
+                  ("id" .=) <$> _rId,
+                  ("nextHopVpnTunnel" .=) <$> _rNextHopVPNTunnel,
+                  ("description" .=) <$> _rDescription,
+                  ("tags" .=) <$> _rTags,
+                  ("nextHopInstance" .=) <$> _rNextHopInstance])
+
+--
+-- /See:/ 'targetVPNGatewaysScopedListWarningDataItem' smart constructor.
+data TargetVPNGatewaysScopedListWarningDataItem = TargetVPNGatewaysScopedListWarningDataItem'
+    { _tvgslwdiValue :: !(Maybe Text)
+    , _tvgslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGatewaysScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvgslwdiValue'
+--
+-- * 'tvgslwdiKey'
+targetVPNGatewaysScopedListWarningDataItem
+    :: TargetVPNGatewaysScopedListWarningDataItem
+targetVPNGatewaysScopedListWarningDataItem =
+    TargetVPNGatewaysScopedListWarningDataItem'
+    { _tvgslwdiValue = Nothing
+    , _tvgslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+tvgslwdiValue :: Lens' TargetVPNGatewaysScopedListWarningDataItem (Maybe Text)
+tvgslwdiValue
+  = lens _tvgslwdiValue
+      (\ s a -> s{_tvgslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+tvgslwdiKey :: Lens' TargetVPNGatewaysScopedListWarningDataItem (Maybe Text)
+tvgslwdiKey
+  = lens _tvgslwdiKey (\ s a -> s{_tvgslwdiKey = a})
+
+instance FromJSON
+         TargetVPNGatewaysScopedListWarningDataItem where
+        parseJSON
+          = withObject
+              "TargetVPNGatewaysScopedListWarningDataItem"
+              (\ o ->
+                 TargetVPNGatewaysScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON
+         TargetVPNGatewaysScopedListWarningDataItem where
+        toJSON
+          TargetVPNGatewaysScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _tvgslwdiValue,
+                  ("key" .=) <$> _tvgslwdiKey])
+
+--
+-- /See:/ 'targetHTTPSProxiesSetSSLCertificatesRequest' smart constructor.
+newtype TargetHTTPSProxiesSetSSLCertificatesRequest = TargetHTTPSProxiesSetSSLCertificatesRequest'
+    { _thpsscrSSLCertificates :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetHTTPSProxiesSetSSLCertificatesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'thpsscrSSLCertificates'
+targetHTTPSProxiesSetSSLCertificatesRequest
+    :: TargetHTTPSProxiesSetSSLCertificatesRequest
+targetHTTPSProxiesSetSSLCertificatesRequest =
+    TargetHTTPSProxiesSetSSLCertificatesRequest'
+    { _thpsscrSSLCertificates = Nothing
+    }
+
+-- | New set of SslCertificate resources to associate with this
+-- TargetHttpsProxy resource. Currently exactly one SslCertificate resource
+-- must be specified.
+thpsscrSSLCertificates :: Lens' TargetHTTPSProxiesSetSSLCertificatesRequest [Text]
+thpsscrSSLCertificates
+  = lens _thpsscrSSLCertificates
+      (\ s a -> s{_thpsscrSSLCertificates = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         TargetHTTPSProxiesSetSSLCertificatesRequest where
+        parseJSON
+          = withObject
+              "TargetHTTPSProxiesSetSSLCertificatesRequest"
+              (\ o ->
+                 TargetHTTPSProxiesSetSSLCertificatesRequest' <$>
+                   (o .:? "sslCertificates" .!= mempty))
+
+instance ToJSON
+         TargetHTTPSProxiesSetSSLCertificatesRequest where
+        toJSON
+          TargetHTTPSProxiesSetSSLCertificatesRequest'{..}
+          = object
+              (catMaybes
+                 [("sslCertificates" .=) <$> _thpsscrSSLCertificates])
+
+-- | An Instance Template resource.
+--
+-- /See:/ 'instanceTemplate' smart constructor.
+data InstanceTemplate = InstanceTemplate'
+    { _itKind              :: !Text
+    , _itSelfLink          :: !(Maybe Text)
+    , _itName              :: !(Maybe Text)
+    , _itCreationTimestamp :: !(Maybe Text)
+    , _itId                :: !(Maybe (Textual Word64))
+    , _itDescription       :: !(Maybe Text)
+    , _itProperties        :: !(Maybe InstanceProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceTemplate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'itKind'
+--
+-- * 'itSelfLink'
+--
+-- * 'itName'
+--
+-- * 'itCreationTimestamp'
+--
+-- * 'itId'
+--
+-- * 'itDescription'
+--
+-- * 'itProperties'
+instanceTemplate
+    :: InstanceTemplate
+instanceTemplate =
+    InstanceTemplate'
+    { _itKind = "compute#instanceTemplate"
+    , _itSelfLink = Nothing
+    , _itName = Nothing
+    , _itCreationTimestamp = Nothing
+    , _itId = Nothing
+    , _itDescription = Nothing
+    , _itProperties = Nothing
+    }
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceTemplate for instance templates.
+itKind :: Lens' InstanceTemplate Text
+itKind = lens _itKind (\ s a -> s{_itKind = a})
+
+-- | [Output Only] The URL for this instance template. The server defines
+-- this URL.
+itSelfLink :: Lens' InstanceTemplate (Maybe Text)
+itSelfLink
+  = lens _itSelfLink (\ s a -> s{_itSelfLink = a})
+
+-- | Name of the resource; provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+itName :: Lens' InstanceTemplate (Maybe Text)
+itName = lens _itName (\ s a -> s{_itName = a})
+
+-- | [Output Only] The creation timestamp for this instance template in
+-- RFC3339 text format.
+itCreationTimestamp :: Lens' InstanceTemplate (Maybe Text)
+itCreationTimestamp
+  = lens _itCreationTimestamp
+      (\ s a -> s{_itCreationTimestamp = a})
+
+-- | [Output Only] A unique identifier for this instance template. The server
+-- defines this identifier.
+itId :: Lens' InstanceTemplate (Maybe Word64)
+itId
+  = lens _itId (\ s a -> s{_itId = a}) .
+      mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+itDescription :: Lens' InstanceTemplate (Maybe Text)
+itDescription
+  = lens _itDescription
+      (\ s a -> s{_itDescription = a})
+
+-- | The instance properties for this instance template.
+itProperties :: Lens' InstanceTemplate (Maybe InstanceProperties)
+itProperties
+  = lens _itProperties (\ s a -> s{_itProperties = a})
+
+instance FromJSON InstanceTemplate where
+        parseJSON
+          = withObject "InstanceTemplate"
+              (\ o ->
+                 InstanceTemplate' <$>
+                   (o .:? "kind" .!= "compute#instanceTemplate") <*>
+                     (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description")
+                     <*> (o .:? "properties"))
+
+instance ToJSON InstanceTemplate where
+        toJSON InstanceTemplate'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _itKind),
+                  ("selfLink" .=) <$> _itSelfLink,
+                  ("name" .=) <$> _itName,
+                  ("creationTimestamp" .=) <$> _itCreationTimestamp,
+                  ("id" .=) <$> _itId,
+                  ("description" .=) <$> _itDescription,
+                  ("properties" .=) <$> _itProperties])
+
+-- | Represents a Target VPN gateway resource.
+--
+-- /See:/ 'targetVPNGateway' smart constructor.
+data TargetVPNGateway = TargetVPNGateway'
+    { _tvgStatus            :: !(Maybe TargetVPNGatewayStatus)
+    , _tvgKind              :: !Text
+    , _tvgNetwork           :: !(Maybe Text)
+    , _tvgSelfLink          :: !(Maybe Text)
+    , _tvgName              :: !(Maybe Text)
+    , _tvgCreationTimestamp :: !(Maybe Text)
+    , _tvgId                :: !(Maybe (Textual Word64))
+    , _tvgRegion            :: !(Maybe Text)
+    , _tvgTunnels           :: !(Maybe [Text])
+    , _tvgDescription       :: !(Maybe Text)
+    , _tvgForwardingRules   :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGateway' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvgStatus'
+--
+-- * 'tvgKind'
+--
+-- * 'tvgNetwork'
+--
+-- * 'tvgSelfLink'
+--
+-- * 'tvgName'
+--
+-- * 'tvgCreationTimestamp'
+--
+-- * 'tvgId'
+--
+-- * 'tvgRegion'
+--
+-- * 'tvgTunnels'
+--
+-- * 'tvgDescription'
+--
+-- * 'tvgForwardingRules'
+targetVPNGateway
+    :: TargetVPNGateway
+targetVPNGateway =
+    TargetVPNGateway'
+    { _tvgStatus = Nothing
+    , _tvgKind = "compute#targetVpnGateway"
+    , _tvgNetwork = Nothing
+    , _tvgSelfLink = Nothing
+    , _tvgName = Nothing
+    , _tvgCreationTimestamp = Nothing
+    , _tvgId = Nothing
+    , _tvgRegion = Nothing
+    , _tvgTunnels = Nothing
+    , _tvgDescription = Nothing
+    , _tvgForwardingRules = Nothing
+    }
+
+-- | [Output Only] The status of the VPN gateway.
+tvgStatus :: Lens' TargetVPNGateway (Maybe TargetVPNGatewayStatus)
+tvgStatus
+  = lens _tvgStatus (\ s a -> s{_tvgStatus = a})
+
+-- | [Output Only] Type of resource. Always compute#targetVpnGateway for
+-- target VPN gateways.
+tvgKind :: Lens' TargetVPNGateway Text
+tvgKind = lens _tvgKind (\ s a -> s{_tvgKind = a})
+
+-- | URL of the network to which this VPN gateway is attached. Provided by
+-- the client when the VPN gateway is created.
+tvgNetwork :: Lens' TargetVPNGateway (Maybe Text)
+tvgNetwork
+  = lens _tvgNetwork (\ s a -> s{_tvgNetwork = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+tvgSelfLink :: Lens' TargetVPNGateway (Maybe Text)
+tvgSelfLink
+  = lens _tvgSelfLink (\ s a -> s{_tvgSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+tvgName :: Lens' TargetVPNGateway (Maybe Text)
+tvgName = lens _tvgName (\ s a -> s{_tvgName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+tvgCreationTimestamp :: Lens' TargetVPNGateway (Maybe Text)
+tvgCreationTimestamp
+  = lens _tvgCreationTimestamp
+      (\ s a -> s{_tvgCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+tvgId :: Lens' TargetVPNGateway (Maybe Word64)
+tvgId
+  = lens _tvgId (\ s a -> s{_tvgId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] URL of the region where the target VPN gateway resides.
+tvgRegion :: Lens' TargetVPNGateway (Maybe Text)
+tvgRegion
+  = lens _tvgRegion (\ s a -> s{_tvgRegion = a})
+
+-- | [Output Only] A list of URLs to VpnTunnel resources. VpnTunnels are
+-- created using compute.vpntunnels.insert method and associated to a VPN
+-- gateway.
+tvgTunnels :: Lens' TargetVPNGateway [Text]
+tvgTunnels
+  = lens _tvgTunnels (\ s a -> s{_tvgTunnels = a}) .
+      _Default
+      . _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+tvgDescription :: Lens' TargetVPNGateway (Maybe Text)
+tvgDescription
+  = lens _tvgDescription
+      (\ s a -> s{_tvgDescription = a})
+
+-- | [Output Only] A list of URLs to the ForwardingRule resources.
+-- ForwardingRules are created using compute.forwardingRules.insert and
+-- associated to a VPN gateway.
+tvgForwardingRules :: Lens' TargetVPNGateway [Text]
+tvgForwardingRules
+  = lens _tvgForwardingRules
+      (\ s a -> s{_tvgForwardingRules = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetVPNGateway where
+        parseJSON
+          = withObject "TargetVPNGateway"
+              (\ o ->
+                 TargetVPNGateway' <$>
+                   (o .:? "status") <*>
+                     (o .:? "kind" .!= "compute#targetVpnGateway")
+                     <*> (o .:? "network")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "region")
+                     <*> (o .:? "tunnels" .!= mempty)
+                     <*> (o .:? "description")
+                     <*> (o .:? "forwardingRules" .!= mempty))
+
+instance ToJSON TargetVPNGateway where
+        toJSON TargetVPNGateway'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _tvgStatus,
+                  Just ("kind" .= _tvgKind),
+                  ("network" .=) <$> _tvgNetwork,
+                  ("selfLink" .=) <$> _tvgSelfLink,
+                  ("name" .=) <$> _tvgName,
+                  ("creationTimestamp" .=) <$> _tvgCreationTimestamp,
+                  ("id" .=) <$> _tvgId, ("region" .=) <$> _tvgRegion,
+                  ("tunnels" .=) <$> _tvgTunnels,
+                  ("description" .=) <$> _tvgDescription,
+                  ("forwardingRules" .=) <$> _tvgForwardingRules])
+
+--
+-- /See:/ 'urlMapsValidateResponse' smart constructor.
+newtype URLMapsValidateResponse = URLMapsValidateResponse'
+    { _umvrResult :: Maybe URLMapValidationResult
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMapsValidateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umvrResult'
+urlMapsValidateResponse
+    :: URLMapsValidateResponse
+urlMapsValidateResponse =
+    URLMapsValidateResponse'
+    { _umvrResult = Nothing
+    }
+
+umvrResult :: Lens' URLMapsValidateResponse (Maybe URLMapValidationResult)
+umvrResult
+  = lens _umvrResult (\ s a -> s{_umvrResult = a})
+
+instance FromJSON URLMapsValidateResponse where
+        parseJSON
+          = withObject "URLMapsValidateResponse"
+              (\ o ->
+                 URLMapsValidateResponse' <$> (o .:? "result"))
+
+instance ToJSON URLMapsValidateResponse where
+        toJSON URLMapsValidateResponse'{..}
+          = object (catMaybes [("result" .=) <$> _umvrResult])
+
+-- | An SslCertificate resource. This resource provides a mechanism to upload
+-- an SSL key and certificate to the load balancer to serve secure
+-- connections from the user.
+--
+-- /See:/ 'sslCertificate' smart constructor.
+data SSLCertificate = SSLCertificate'
+    { _scPrivateKey        :: !(Maybe Text)
+    , _scKind              :: !Text
+    , _scSelfLink          :: !(Maybe Text)
+    , _scName              :: !(Maybe Text)
+    , _scCreationTimestamp :: !(Maybe Text)
+    , _scId                :: !(Maybe (Textual Word64))
+    , _scCertificate       :: !(Maybe Text)
+    , _scDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SSLCertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scPrivateKey'
+--
+-- * 'scKind'
+--
+-- * 'scSelfLink'
+--
+-- * 'scName'
+--
+-- * 'scCreationTimestamp'
+--
+-- * 'scId'
+--
+-- * 'scCertificate'
+--
+-- * 'scDescription'
+sslCertificate
+    :: SSLCertificate
+sslCertificate =
+    SSLCertificate'
+    { _scPrivateKey = Nothing
+    , _scKind = "compute#sslCertificate"
+    , _scSelfLink = Nothing
+    , _scName = Nothing
+    , _scCreationTimestamp = Nothing
+    , _scId = Nothing
+    , _scCertificate = Nothing
+    , _scDescription = Nothing
+    }
+
+-- | A write-only private key in PEM format. Only insert RPCs will include
+-- this field.
+scPrivateKey :: Lens' SSLCertificate (Maybe Text)
+scPrivateKey
+  = lens _scPrivateKey (\ s a -> s{_scPrivateKey = a})
+
+-- | [Output Only] Type of the resource. Always compute#sslCertificate for
+-- SSL certificates.
+scKind :: Lens' SSLCertificate Text
+scKind = lens _scKind (\ s a -> s{_scKind = a})
+
+-- | [Output only] Server-defined URL for the resource.
+scSelfLink :: Lens' SSLCertificate (Maybe Text)
+scSelfLink
+  = lens _scSelfLink (\ s a -> s{_scSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+scName :: Lens' SSLCertificate (Maybe Text)
+scName = lens _scName (\ s a -> s{_scName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+scCreationTimestamp :: Lens' SSLCertificate (Maybe Text)
+scCreationTimestamp
+  = lens _scCreationTimestamp
+      (\ s a -> s{_scCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+scId :: Lens' SSLCertificate (Maybe Word64)
+scId
+  = lens _scId (\ s a -> s{_scId = a}) .
+      mapping _Coerce
+
+-- | A local certificate file. The certificate must be in PEM format. The
+-- certificate chain must be no greater than 5 certs long. The chain must
+-- include at least one intermediate cert.
+scCertificate :: Lens' SSLCertificate (Maybe Text)
+scCertificate
+  = lens _scCertificate
+      (\ s a -> s{_scCertificate = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+scDescription :: Lens' SSLCertificate (Maybe Text)
+scDescription
+  = lens _scDescription
+      (\ s a -> s{_scDescription = a})
+
+instance FromJSON SSLCertificate where
+        parseJSON
+          = withObject "SSLCertificate"
+              (\ o ->
+                 SSLCertificate' <$>
+                   (o .:? "privateKey") <*>
+                     (o .:? "kind" .!= "compute#sslCertificate")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "certificate")
+                     <*> (o .:? "description"))
+
+instance ToJSON SSLCertificate where
+        toJSON SSLCertificate'{..}
+          = object
+              (catMaybes
+                 [("privateKey" .=) <$> _scPrivateKey,
+                  Just ("kind" .= _scKind),
+                  ("selfLink" .=) <$> _scSelfLink,
+                  ("name" .=) <$> _scName,
+                  ("creationTimestamp" .=) <$> _scCreationTimestamp,
+                  ("id" .=) <$> _scId,
+                  ("certificate" .=) <$> _scCertificate,
+                  ("description" .=) <$> _scDescription])
+
+--
+-- /See:/ 'urlMapReference' smart constructor.
+newtype URLMapReference = URLMapReference'
+    { _umrURLMap :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMapReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umrURLMap'
+urlMapReference
+    :: URLMapReference
+urlMapReference =
+    URLMapReference'
+    { _umrURLMap = Nothing
+    }
+
+umrURLMap :: Lens' URLMapReference (Maybe Text)
+umrURLMap
+  = lens _umrURLMap (\ s a -> s{_umrURLMap = a})
+
+instance FromJSON URLMapReference where
+        parseJSON
+          = withObject "URLMapReference"
+              (\ o -> URLMapReference' <$> (o .:? "urlMap"))
+
+instance ToJSON URLMapReference where
+        toJSON URLMapReference'{..}
+          = object (catMaybes [("urlMap" .=) <$> _umrURLMap])
+
+--
+-- /See:/ 'targetPoolsAddHealthCheckRequest' smart constructor.
+newtype TargetPoolsAddHealthCheckRequest = TargetPoolsAddHealthCheckRequest'
+    { _tpahcrHealthChecks :: Maybe [HealthCheckReference]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsAddHealthCheckRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpahcrHealthChecks'
+targetPoolsAddHealthCheckRequest
+    :: TargetPoolsAddHealthCheckRequest
+targetPoolsAddHealthCheckRequest =
+    TargetPoolsAddHealthCheckRequest'
+    { _tpahcrHealthChecks = Nothing
+    }
+
+-- | A list of HttpHealthCheck resources to add to the target pool.
+tpahcrHealthChecks :: Lens' TargetPoolsAddHealthCheckRequest [HealthCheckReference]
+tpahcrHealthChecks
+  = lens _tpahcrHealthChecks
+      (\ s a -> s{_tpahcrHealthChecks = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetPoolsAddHealthCheckRequest
+         where
+        parseJSON
+          = withObject "TargetPoolsAddHealthCheckRequest"
+              (\ o ->
+                 TargetPoolsAddHealthCheckRequest' <$>
+                   (o .:? "healthChecks" .!= mempty))
+
+instance ToJSON TargetPoolsAddHealthCheckRequest
+         where
+        toJSON TargetPoolsAddHealthCheckRequest'{..}
+          = object
+              (catMaybes
+                 [("healthChecks" .=) <$> _tpahcrHealthChecks])
+
+-- | [Output Only] A map of scoped disk lists.
+--
+-- /See:/ 'diskAggregatedListItems' smart constructor.
+newtype DiskAggregatedListItems = DiskAggregatedListItems'
+    { _daliAddtional :: HashMap Text DisksScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daliAddtional'
+diskAggregatedListItems
+    :: HashMap Text DisksScopedList -- ^ 'daliAddtional'
+    -> DiskAggregatedListItems
+diskAggregatedListItems pDaliAddtional_ =
+    DiskAggregatedListItems'
+    { _daliAddtional = _Coerce # pDaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of disks.
+daliAddtional :: Lens' DiskAggregatedListItems (HashMap Text DisksScopedList)
+daliAddtional
+  = lens _daliAddtional
+      (\ s a -> s{_daliAddtional = a})
+      . _Coerce
+
+instance FromJSON DiskAggregatedListItems where
+        parseJSON
+          = withObject "DiskAggregatedListItems"
+              (\ o ->
+                 DiskAggregatedListItems' <$> (parseJSONObject o))
+
+instance ToJSON DiskAggregatedListItems where
+        toJSON = toJSON . _daliAddtional
+
+-- | The location in Cloud Storage and naming method of the daily usage
+-- report. Contains bucket_name and report_name prefix.
+--
+-- /See:/ 'usageExportLocation' smart constructor.
+data UsageExportLocation = UsageExportLocation'
+    { _uelReportNamePrefix :: !(Maybe Text)
+    , _uelBucketName       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsageExportLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uelReportNamePrefix'
+--
+-- * 'uelBucketName'
+usageExportLocation
+    :: UsageExportLocation
+usageExportLocation =
+    UsageExportLocation'
+    { _uelReportNamePrefix = Nothing
+    , _uelBucketName = Nothing
+    }
+
+-- | An optional prefix for the name of the usage report object stored in
+-- bucketName. If not supplied, defaults to usage. The report is stored as
+-- a CSV file named report_name_prefix_gce_YYYYMMDD.csv where YYYYMMDD is
+-- the day of the usage according to Pacific Time. If you supply a prefix,
+-- it should conform to Cloud Storage object naming conventions.
+uelReportNamePrefix :: Lens' UsageExportLocation (Maybe Text)
+uelReportNamePrefix
+  = lens _uelReportNamePrefix
+      (\ s a -> s{_uelReportNamePrefix = a})
+
+-- | The name of an existing bucket in Cloud Storage where the usage report
+-- object is stored. The Google Service Account is granted write access to
+-- this bucket. This can either be the bucket name by itself, such as
+-- example-bucket, or the bucket name with gs:\/\/ or
+-- https:\/\/storage.googleapis.com\/ in front of it, such as
+-- gs:\/\/example-bucket.
+uelBucketName :: Lens' UsageExportLocation (Maybe Text)
+uelBucketName
+  = lens _uelBucketName
+      (\ s a -> s{_uelBucketName = a})
+
+instance FromJSON UsageExportLocation where
+        parseJSON
+          = withObject "UsageExportLocation"
+              (\ o ->
+                 UsageExportLocation' <$>
+                   (o .:? "reportNamePrefix") <*> (o .:? "bucketName"))
+
+instance ToJSON UsageExportLocation where
+        toJSON UsageExportLocation'{..}
+          = object
+              (catMaybes
+                 [("reportNamePrefix" .=) <$> _uelReportNamePrefix,
+                  ("bucketName" .=) <$> _uelBucketName])
+
+-- | Contains a list of zone resources.
+--
+-- /See:/ 'zoneList' smart constructor.
+data ZoneList = ZoneList'
+    { _zlNextPageToken :: !(Maybe Text)
+    , _zlKind          :: !Text
+    , _zlItems         :: !(Maybe [Zone])
+    , _zlSelfLink      :: !(Maybe Text)
+    , _zlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ZoneList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'zlNextPageToken'
+--
+-- * 'zlKind'
+--
+-- * 'zlItems'
+--
+-- * 'zlSelfLink'
+--
+-- * 'zlId'
+zoneList
+    :: ZoneList
+zoneList =
+    ZoneList'
+    { _zlNextPageToken = Nothing
+    , _zlKind = "compute#zoneList"
+    , _zlItems = Nothing
+    , _zlSelfLink = Nothing
+    , _zlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+zlNextPageToken :: Lens' ZoneList (Maybe Text)
+zlNextPageToken
+  = lens _zlNextPageToken
+      (\ s a -> s{_zlNextPageToken = a})
+
+-- | Type of resource.
+zlKind :: Lens' ZoneList Text
+zlKind = lens _zlKind (\ s a -> s{_zlKind = a})
+
+-- | [Output Only] A list of Zone resources.
+zlItems :: Lens' ZoneList [Zone]
+zlItems
+  = lens _zlItems (\ s a -> s{_zlItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+zlSelfLink :: Lens' ZoneList (Maybe Text)
+zlSelfLink
+  = lens _zlSelfLink (\ s a -> s{_zlSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource; defined by the server.
+zlId :: Lens' ZoneList (Maybe Text)
+zlId = lens _zlId (\ s a -> s{_zlId = a})
+
+instance FromJSON ZoneList where
+        parseJSON
+          = withObject "ZoneList"
+              (\ o ->
+                 ZoneList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#zoneList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON ZoneList where
+        toJSON ZoneList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _zlNextPageToken,
+                  Just ("kind" .= _zlKind), ("items" .=) <$> _zlItems,
+                  ("selfLink" .=) <$> _zlSelfLink,
+                  ("id" .=) <$> _zlId])
+
+--
+-- /See:/ 'managedInstance' smart constructor.
+data ManagedInstance = ManagedInstance'
+    { _miLastAttempt    :: !(Maybe ManagedInstanceLastAttempt)
+    , _miCurrentAction  :: !(Maybe ManagedInstanceCurrentAction)
+    , _miId             :: !(Maybe (Textual Word64))
+    , _miInstanceStatus :: !(Maybe ManagedInstanceInstanceStatus)
+    , _miInstance       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'miLastAttempt'
+--
+-- * 'miCurrentAction'
+--
+-- * 'miId'
+--
+-- * 'miInstanceStatus'
+--
+-- * 'miInstance'
+managedInstance
+    :: ManagedInstance
+managedInstance =
+    ManagedInstance'
+    { _miLastAttempt = Nothing
+    , _miCurrentAction = Nothing
+    , _miId = Nothing
+    , _miInstanceStatus = Nothing
+    , _miInstance = Nothing
+    }
+
+-- | [Output Only] Information about the last attempt to create or delete the
+-- instance.
+miLastAttempt :: Lens' ManagedInstance (Maybe ManagedInstanceLastAttempt)
+miLastAttempt
+  = lens _miLastAttempt
+      (\ s a -> s{_miLastAttempt = a})
+
+-- | [Output Only] The current action that the managed instance group has
+-- scheduled for the instance. Possible values: - NONE The instance is
+-- running, and the managed instance group does not have any scheduled
+-- actions for this instance. - CREATING The managed instance group is
+-- creating this instance. If the group fails to create this instance, it
+-- will try again until it is successful. - CREATING_WITHOUT_RETRIES The
+-- managed instance group is attempting to create this instance only once.
+-- If the group fails to create this instance, it does not try again and
+-- the group\'s target_size value is decreased. - RECREATING The managed
+-- instance group is recreating this instance. - DELETING The managed
+-- instance group is permanently deleting this instance. - ABANDONING The
+-- managed instance group is abandoning this instance. The instance will be
+-- removed from the instance group and from any target pools that are
+-- associated with this group. - RESTARTING The managed instance group is
+-- restarting the instance. - REFRESHING The managed instance group is
+-- applying configuration changes to the instance without stopping it. For
+-- example, the group can update the target pool list for an instance
+-- without stopping that instance.
+miCurrentAction :: Lens' ManagedInstance (Maybe ManagedInstanceCurrentAction)
+miCurrentAction
+  = lens _miCurrentAction
+      (\ s a -> s{_miCurrentAction = a})
+
+-- | [Output only] The unique identifier for this resource. This field is
+-- empty when instance does not exist.
+miId :: Lens' ManagedInstance (Maybe Word64)
+miId
+  = lens _miId (\ s a -> s{_miId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The status of the instance. This field is empty when the
+-- instance does not exist.
+miInstanceStatus :: Lens' ManagedInstance (Maybe ManagedInstanceInstanceStatus)
+miInstanceStatus
+  = lens _miInstanceStatus
+      (\ s a -> s{_miInstanceStatus = a})
+
+-- | [Output Only] The URL of the instance. The URL can exist even if the
+-- instance has not yet been created.
+miInstance :: Lens' ManagedInstance (Maybe Text)
+miInstance
+  = lens _miInstance (\ s a -> s{_miInstance = a})
+
+instance FromJSON ManagedInstance where
+        parseJSON
+          = withObject "ManagedInstance"
+              (\ o ->
+                 ManagedInstance' <$>
+                   (o .:? "lastAttempt") <*> (o .:? "currentAction") <*>
+                     (o .:? "id")
+                     <*> (o .:? "instanceStatus")
+                     <*> (o .:? "instance"))
+
+instance ToJSON ManagedInstance where
+        toJSON ManagedInstance'{..}
+          = object
+              (catMaybes
+                 [("lastAttempt" .=) <$> _miLastAttempt,
+                  ("currentAction" .=) <$> _miCurrentAction,
+                  ("id" .=) <$> _miId,
+                  ("instanceStatus" .=) <$> _miInstanceStatus,
+                  ("instance" .=) <$> _miInstance])
+
+-- | [Output Only] A map of filtered managed instance group lists.
+--
+-- /See:/ 'instanceGroupManagerAggregatedListItems' smart constructor.
+newtype InstanceGroupManagerAggregatedListItems = InstanceGroupManagerAggregatedListItems'
+    { _igmaliAddtional :: HashMap Text InstanceGroupManagersScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagerAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmaliAddtional'
+instanceGroupManagerAggregatedListItems
+    :: HashMap Text InstanceGroupManagersScopedList -- ^ 'igmaliAddtional'
+    -> InstanceGroupManagerAggregatedListItems
+instanceGroupManagerAggregatedListItems pIgmaliAddtional_ =
+    InstanceGroupManagerAggregatedListItems'
+    { _igmaliAddtional = _Coerce # pIgmaliAddtional_
+    }
+
+-- | [Output Only] The name of the scope that contains this set of managed
+-- instance groups.
+igmaliAddtional :: Lens' InstanceGroupManagerAggregatedListItems (HashMap Text InstanceGroupManagersScopedList)
+igmaliAddtional
+  = lens _igmaliAddtional
+      (\ s a -> s{_igmaliAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupManagerAggregatedListItems where
+        parseJSON
+          = withObject
+              "InstanceGroupManagerAggregatedListItems"
+              (\ o ->
+                 InstanceGroupManagerAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON
+         InstanceGroupManagerAggregatedListItems where
+        toJSON = toJSON . _igmaliAddtional
+
+--
+-- /See:/ 'instanceGroupManagersDeleteInstancesRequest' smart constructor.
+newtype InstanceGroupManagersDeleteInstancesRequest = InstanceGroupManagersDeleteInstancesRequest'
+    { _igmdirInstances :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersDeleteInstancesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmdirInstances'
+instanceGroupManagersDeleteInstancesRequest
+    :: InstanceGroupManagersDeleteInstancesRequest
+instanceGroupManagersDeleteInstancesRequest =
+    InstanceGroupManagersDeleteInstancesRequest'
+    { _igmdirInstances = Nothing
+    }
+
+-- | The list of instances to delete from this managed instance group.
+-- Specify one or more instance URLs.
+igmdirInstances :: Lens' InstanceGroupManagersDeleteInstancesRequest [Text]
+igmdirInstances
+  = lens _igmdirInstances
+      (\ s a -> s{_igmdirInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupManagersDeleteInstancesRequest where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersDeleteInstancesRequest"
+              (\ o ->
+                 InstanceGroupManagersDeleteInstancesRequest' <$>
+                   (o .:? "instances" .!= mempty))
+
+instance ToJSON
+         InstanceGroupManagersDeleteInstancesRequest where
+        toJSON
+          InstanceGroupManagersDeleteInstancesRequest'{..}
+          = object
+              (catMaybes [("instances" .=) <$> _igmdirInstances])
+
+-- | Message containing information of one individual backend.
+--
+-- /See:/ 'backend' smart constructor.
+data Backend = Backend'
+    { _bGroup              :: !(Maybe Text)
+    , _bBalancingMode      :: !(Maybe BackendBalancingMode)
+    , _bMaxUtilization     :: !(Maybe (Textual Double))
+    , _bMaxRate            :: !(Maybe (Textual Int32))
+    , _bMaxRatePerInstance :: !(Maybe (Textual Double))
+    , _bDescription        :: !(Maybe Text)
+    , _bCapacityScaler     :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Backend' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bGroup'
+--
+-- * 'bBalancingMode'
+--
+-- * 'bMaxUtilization'
+--
+-- * 'bMaxRate'
+--
+-- * 'bMaxRatePerInstance'
+--
+-- * 'bDescription'
+--
+-- * 'bCapacityScaler'
+backend
+    :: Backend
+backend =
+    Backend'
+    { _bGroup = Nothing
+    , _bBalancingMode = Nothing
+    , _bMaxUtilization = Nothing
+    , _bMaxRate = Nothing
+    , _bMaxRatePerInstance = Nothing
+    , _bDescription = Nothing
+    , _bCapacityScaler = Nothing
+    }
+
+-- | The fully-qualified URL of a zonal Instance Group resource. This
+-- instance group defines the list of instances that serve traffic. Member
+-- virtual machine instances from each instance group must live in the same
+-- zone as the instance group itself. No two backends in a backend service
+-- are allowed to use same Instance Group resource. Note that you must
+-- specify an Instance Group resource using the fully-qualified URL, rather
+-- than a partial URL.
+bGroup :: Lens' Backend (Maybe Text)
+bGroup = lens _bGroup (\ s a -> s{_bGroup = a})
+
+-- | Specifies the balancing mode for this backend. For global HTTP(S) load
+-- balancing, the default is UTILIZATION. Valid values are UTILIZATION and
+-- RATE.
+bBalancingMode :: Lens' Backend (Maybe BackendBalancingMode)
+bBalancingMode
+  = lens _bBalancingMode
+      (\ s a -> s{_bBalancingMode = a})
+
+-- | Used when balancingMode is UTILIZATION. This ratio defines the CPU
+-- utilization target for the group. The default is 0.8. Valid range is
+-- [0.0, 1.0].
+bMaxUtilization :: Lens' Backend (Maybe Double)
+bMaxUtilization
+  = lens _bMaxUtilization
+      (\ s a -> s{_bMaxUtilization = a})
+      . mapping _Coerce
+
+-- | The max requests per second (RPS) of the group. Can be used with either
+-- RATE or UTILIZATION balancing modes, but required if RATE mode. For RATE
+-- mode, either maxRate or maxRatePerInstance must be set.
+bMaxRate :: Lens' Backend (Maybe Int32)
+bMaxRate
+  = lens _bMaxRate (\ s a -> s{_bMaxRate = a}) .
+      mapping _Coerce
+
+-- | The max requests per second (RPS) that a single backend instance can
+-- handle.This is used to calculate the capacity of the group. Can be used
+-- in either balancing mode. For RATE mode, either maxRate or
+-- maxRatePerInstance must be set.
+bMaxRatePerInstance :: Lens' Backend (Maybe Double)
+bMaxRatePerInstance
+  = lens _bMaxRatePerInstance
+      (\ s a -> s{_bMaxRatePerInstance = a})
+      . mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+bDescription :: Lens' Backend (Maybe Text)
+bDescription
+  = lens _bDescription (\ s a -> s{_bDescription = a})
+
+-- | A multiplier applied to the group\'s maximum servicing capacity (either
+-- UTILIZATION or RATE). Default value is 1, which means the group will
+-- serve up to 100% of its configured CPU or RPS (depending on
+-- balancingMode). A setting of 0 means the group is completely drained,
+-- offering 0% of its available CPU or RPS. Valid range is [0.0,1.0].
+bCapacityScaler :: Lens' Backend (Maybe Double)
+bCapacityScaler
+  = lens _bCapacityScaler
+      (\ s a -> s{_bCapacityScaler = a})
+      . mapping _Coerce
+
+instance FromJSON Backend where
+        parseJSON
+          = withObject "Backend"
+              (\ o ->
+                 Backend' <$>
+                   (o .:? "group") <*> (o .:? "balancingMode") <*>
+                     (o .:? "maxUtilization")
+                     <*> (o .:? "maxRate")
+                     <*> (o .:? "maxRatePerInstance")
+                     <*> (o .:? "description")
+                     <*> (o .:? "capacityScaler"))
+
+instance ToJSON Backend where
+        toJSON Backend'{..}
+          = object
+              (catMaybes
+                 [("group" .=) <$> _bGroup,
+                  ("balancingMode" .=) <$> _bBalancingMode,
+                  ("maxUtilization" .=) <$> _bMaxUtilization,
+                  ("maxRate" .=) <$> _bMaxRate,
+                  ("maxRatePerInstance" .=) <$> _bMaxRatePerInstance,
+                  ("description" .=) <$> _bDescription,
+                  ("capacityScaler" .=) <$> _bCapacityScaler])
+
+-- | [Output Only] Informational warning which replaces the list of addresses
+-- when the list is empty.
+--
+-- /See:/ 'targetVPNGatewaysScopedListWarning' smart constructor.
+data TargetVPNGatewaysScopedListWarning = TargetVPNGatewaysScopedListWarning'
+    { _tvgslwData    :: !(Maybe [TargetVPNGatewaysScopedListWarningDataItem])
+    , _tvgslwCode    :: !(Maybe TargetVPNGatewaysScopedListWarningCode)
+    , _tvgslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGatewaysScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvgslwData'
+--
+-- * 'tvgslwCode'
+--
+-- * 'tvgslwMessage'
+targetVPNGatewaysScopedListWarning
+    :: TargetVPNGatewaysScopedListWarning
+targetVPNGatewaysScopedListWarning =
+    TargetVPNGatewaysScopedListWarning'
+    { _tvgslwData = Nothing
+    , _tvgslwCode = Nothing
+    , _tvgslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+tvgslwData :: Lens' TargetVPNGatewaysScopedListWarning [TargetVPNGatewaysScopedListWarningDataItem]
+tvgslwData
+  = lens _tvgslwData (\ s a -> s{_tvgslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+tvgslwCode :: Lens' TargetVPNGatewaysScopedListWarning (Maybe TargetVPNGatewaysScopedListWarningCode)
+tvgslwCode
+  = lens _tvgslwCode (\ s a -> s{_tvgslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+tvgslwMessage :: Lens' TargetVPNGatewaysScopedListWarning (Maybe Text)
+tvgslwMessage
+  = lens _tvgslwMessage
+      (\ s a -> s{_tvgslwMessage = a})
+
+instance FromJSON TargetVPNGatewaysScopedListWarning
+         where
+        parseJSON
+          = withObject "TargetVPNGatewaysScopedListWarning"
+              (\ o ->
+                 TargetVPNGatewaysScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON TargetVPNGatewaysScopedListWarning
+         where
+        toJSON TargetVPNGatewaysScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _tvgslwData,
+                  ("code" .=) <$> _tvgslwCode,
+                  ("message" .=) <$> _tvgslwMessage])
+
+-- | Contains a list of addresses.
+--
+-- /See:/ 'addressList' smart constructor.
+data AddressList = AddressList'
+    { _alNextPageToken :: !(Maybe Text)
+    , _alKind          :: !Text
+    , _alItems         :: !(Maybe [Address])
+    , _alSelfLink      :: !(Maybe Text)
+    , _alId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddressList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alNextPageToken'
+--
+-- * 'alKind'
+--
+-- * 'alItems'
+--
+-- * 'alSelfLink'
+--
+-- * 'alId'
+addressList
+    :: AddressList
+addressList =
+    AddressList'
+    { _alNextPageToken = Nothing
+    , _alKind = "compute#addressList"
+    , _alItems = Nothing
+    , _alSelfLink = Nothing
+    , _alId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+alNextPageToken :: Lens' AddressList (Maybe Text)
+alNextPageToken
+  = lens _alNextPageToken
+      (\ s a -> s{_alNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#addressList for lists of
+-- addresses.
+alKind :: Lens' AddressList Text
+alKind = lens _alKind (\ s a -> s{_alKind = a})
+
+-- | [Output Only] A list of addresses.
+alItems :: Lens' AddressList [Address]
+alItems
+  = lens _alItems (\ s a -> s{_alItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for the resource.
+alSelfLink :: Lens' AddressList (Maybe Text)
+alSelfLink
+  = lens _alSelfLink (\ s a -> s{_alSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+alId :: Lens' AddressList (Maybe Text)
+alId = lens _alId (\ s a -> s{_alId = a})
+
+instance FromJSON AddressList where
+        parseJSON
+          = withObject "AddressList"
+              (\ o ->
+                 AddressList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#addressList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON AddressList where
+        toJSON AddressList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _alNextPageToken,
+                  Just ("kind" .= _alKind), ("items" .=) <$> _alItems,
+                  ("selfLink" .=) <$> _alSelfLink,
+                  ("id" .=) <$> _alId])
+
+-- | A map of scoped forwarding rule lists.
+--
+-- /See:/ 'forwardingRuleAggregatedListItems' smart constructor.
+newtype ForwardingRuleAggregatedListItems = ForwardingRuleAggregatedListItems'
+    { _fraliAddtional :: HashMap Text ForwardingRulesScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRuleAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fraliAddtional'
+forwardingRuleAggregatedListItems
+    :: HashMap Text ForwardingRulesScopedList -- ^ 'fraliAddtional'
+    -> ForwardingRuleAggregatedListItems
+forwardingRuleAggregatedListItems pFraliAddtional_ =
+    ForwardingRuleAggregatedListItems'
+    { _fraliAddtional = _Coerce # pFraliAddtional_
+    }
+
+-- | Name of the scope containing this set of addresses.
+fraliAddtional :: Lens' ForwardingRuleAggregatedListItems (HashMap Text ForwardingRulesScopedList)
+fraliAddtional
+  = lens _fraliAddtional
+      (\ s a -> s{_fraliAddtional = a})
+      . _Coerce
+
+instance FromJSON ForwardingRuleAggregatedListItems
+         where
+        parseJSON
+          = withObject "ForwardingRuleAggregatedListItems"
+              (\ o ->
+                 ForwardingRuleAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON ForwardingRuleAggregatedListItems
+         where
+        toJSON = toJSON . _fraliAddtional
+
+-- | [Output Only] A map of scoped operation lists.
+--
+-- /See:/ 'operationAggregatedListItems' smart constructor.
+newtype OperationAggregatedListItems = OperationAggregatedListItems'
+    { _oaliAddtional :: HashMap Text OperationsScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oaliAddtional'
+operationAggregatedListItems
+    :: HashMap Text OperationsScopedList -- ^ 'oaliAddtional'
+    -> OperationAggregatedListItems
+operationAggregatedListItems pOaliAddtional_ =
+    OperationAggregatedListItems'
+    { _oaliAddtional = _Coerce # pOaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of operations.
+oaliAddtional :: Lens' OperationAggregatedListItems (HashMap Text OperationsScopedList)
+oaliAddtional
+  = lens _oaliAddtional
+      (\ s a -> s{_oaliAddtional = a})
+      . _Coerce
+
+instance FromJSON OperationAggregatedListItems where
+        parseJSON
+          = withObject "OperationAggregatedListItems"
+              (\ o ->
+                 OperationAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON OperationAggregatedListItems where
+        toJSON = toJSON . _oaliAddtional
+
+--
+-- /See:/ 'instanceGroupManagerActionsSummary' smart constructor.
+data InstanceGroupManagerActionsSummary = InstanceGroupManagerActionsSummary'
+    { _igmasDeleting   :: !(Maybe (Textual Int32))
+    , _igmasRestarting :: !(Maybe (Textual Int32))
+    , _igmasNone       :: !(Maybe (Textual Int32))
+    , _igmasCreating   :: !(Maybe (Textual Int32))
+    , _igmasRefreshing :: !(Maybe (Textual Int32))
+    , _igmasRecreating :: !(Maybe (Textual Int32))
+    , _igmasAbandoning :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagerActionsSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmasDeleting'
+--
+-- * 'igmasRestarting'
+--
+-- * 'igmasNone'
+--
+-- * 'igmasCreating'
+--
+-- * 'igmasRefreshing'
+--
+-- * 'igmasRecreating'
+--
+-- * 'igmasAbandoning'
+instanceGroupManagerActionsSummary
+    :: InstanceGroupManagerActionsSummary
+instanceGroupManagerActionsSummary =
+    InstanceGroupManagerActionsSummary'
+    { _igmasDeleting = Nothing
+    , _igmasRestarting = Nothing
+    , _igmasNone = Nothing
+    , _igmasCreating = Nothing
+    , _igmasRefreshing = Nothing
+    , _igmasRecreating = Nothing
+    , _igmasAbandoning = Nothing
+    }
+
+-- | [Output Only] The number of instances in the managed instance group that
+-- are scheduled to be deleted or are currently being deleted.
+igmasDeleting :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasDeleting
+  = lens _igmasDeleting
+      (\ s a -> s{_igmasDeleting = a})
+      . mapping _Coerce
+
+-- | [Output Only] The number of instances in the managed instance group that
+-- are scheduled to be restarted or are currently being restarted.
+igmasRestarting :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasRestarting
+  = lens _igmasRestarting
+      (\ s a -> s{_igmasRestarting = a})
+      . mapping _Coerce
+
+-- | [Output Only] The number of instances in the managed instance group that
+-- are running and have no scheduled actions.
+igmasNone :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasNone
+  = lens _igmasNone (\ s a -> s{_igmasNone = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The number of instances in the managed instance group that
+-- are scheduled to be created or are currently being created. If the group
+-- fails to create one of these instances, it tries again until it creates
+-- the instance successfully.
+igmasCreating :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasCreating
+  = lens _igmasCreating
+      (\ s a -> s{_igmasCreating = a})
+      . mapping _Coerce
+
+-- | [Output Only] The number of instances in the managed instance group that
+-- are being reconfigured with properties that do not require a restart or
+-- a recreate action. For example, setting or removing target pools for the
+-- instance.
+igmasRefreshing :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasRefreshing
+  = lens _igmasRefreshing
+      (\ s a -> s{_igmasRefreshing = a})
+      . mapping _Coerce
+
+-- | [Output Only] The number of instances in the managed instance group that
+-- are scheduled to be recreated or are currently being being recreated.
+-- Recreating an instance deletes the existing root persistent disk and
+-- creates a new disk from the image that is defined in the instance
+-- template.
+igmasRecreating :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasRecreating
+  = lens _igmasRecreating
+      (\ s a -> s{_igmasRecreating = a})
+      . mapping _Coerce
+
+-- | [Output Only] The total number of instances in the managed instance
+-- group that are scheduled to be abandoned. Abandoning an instance removes
+-- it from the managed instance group without deleting it.
+igmasAbandoning :: Lens' InstanceGroupManagerActionsSummary (Maybe Int32)
+igmasAbandoning
+  = lens _igmasAbandoning
+      (\ s a -> s{_igmasAbandoning = a})
+      . mapping _Coerce
+
+instance FromJSON InstanceGroupManagerActionsSummary
+         where
+        parseJSON
+          = withObject "InstanceGroupManagerActionsSummary"
+              (\ o ->
+                 InstanceGroupManagerActionsSummary' <$>
+                   (o .:? "deleting") <*> (o .:? "restarting") <*>
+                     (o .:? "none")
+                     <*> (o .:? "creating")
+                     <*> (o .:? "refreshing")
+                     <*> (o .:? "recreating")
+                     <*> (o .:? "abandoning"))
+
+instance ToJSON InstanceGroupManagerActionsSummary
+         where
+        toJSON InstanceGroupManagerActionsSummary'{..}
+          = object
+              (catMaybes
+                 [("deleting" .=) <$> _igmasDeleting,
+                  ("restarting" .=) <$> _igmasRestarting,
+                  ("none" .=) <$> _igmasNone,
+                  ("creating" .=) <$> _igmasCreating,
+                  ("refreshing" .=) <$> _igmasRefreshing,
+                  ("recreating" .=) <$> _igmasRecreating,
+                  ("abandoning" .=) <$> _igmasAbandoning])
+
+-- | A service account.
+--
+-- /See:/ 'serviceAccount' smart constructor.
+data ServiceAccount = ServiceAccount'
+    { _saEmail  :: !(Maybe Text)
+    , _saScopes :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saEmail'
+--
+-- * 'saScopes'
+serviceAccount
+    :: ServiceAccount
+serviceAccount =
+    ServiceAccount'
+    { _saEmail = Nothing
+    , _saScopes = Nothing
+    }
+
+-- | Email address of the service account.
+saEmail :: Lens' ServiceAccount (Maybe Text)
+saEmail = lens _saEmail (\ s a -> s{_saEmail = a})
+
+-- | The list of scopes to be made available for this service account.
+saScopes :: Lens' ServiceAccount [Text]
+saScopes
+  = lens _saScopes (\ s a -> s{_saScopes = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ServiceAccount where
+        parseJSON
+          = withObject "ServiceAccount"
+              (\ o ->
+                 ServiceAccount' <$>
+                   (o .:? "email") <*> (o .:? "scopes" .!= mempty))
+
+instance ToJSON ServiceAccount where
+        toJSON ServiceAccount'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _saEmail,
+                  ("scopes" .=) <$> _saScopes])
+
+-- | Contains a list of networks.
+--
+-- /See:/ 'networkList' smart constructor.
+data NetworkList = NetworkList'
+    { _nlNextPageToken :: !(Maybe Text)
+    , _nlKind          :: !Text
+    , _nlItems         :: !(Maybe [Network])
+    , _nlSelfLink      :: !(Maybe Text)
+    , _nlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nlNextPageToken'
+--
+-- * 'nlKind'
+--
+-- * 'nlItems'
+--
+-- * 'nlSelfLink'
+--
+-- * 'nlId'
+networkList
+    :: NetworkList
+networkList =
+    NetworkList'
+    { _nlNextPageToken = Nothing
+    , _nlKind = "compute#networkList"
+    , _nlItems = Nothing
+    , _nlSelfLink = Nothing
+    , _nlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+nlNextPageToken :: Lens' NetworkList (Maybe Text)
+nlNextPageToken
+  = lens _nlNextPageToken
+      (\ s a -> s{_nlNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#networkList for lists of
+-- networks.
+nlKind :: Lens' NetworkList Text
+nlKind = lens _nlKind (\ s a -> s{_nlKind = a})
+
+-- | [Output Only] A list of Network resources.
+nlItems :: Lens' NetworkList [Network]
+nlItems
+  = lens _nlItems (\ s a -> s{_nlItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource .
+nlSelfLink :: Lens' NetworkList (Maybe Text)
+nlSelfLink
+  = lens _nlSelfLink (\ s a -> s{_nlSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+nlId :: Lens' NetworkList (Maybe Text)
+nlId = lens _nlId (\ s a -> s{_nlId = a})
+
+instance FromJSON NetworkList where
+        parseJSON
+          = withObject "NetworkList"
+              (\ o ->
+                 NetworkList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#networkList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON NetworkList where
+        toJSON NetworkList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _nlNextPageToken,
+                  Just ("kind" .= _nlKind), ("items" .=) <$> _nlItems,
+                  ("selfLink" .=) <$> _nlSelfLink,
+                  ("id" .=) <$> _nlId])
+
+--
+-- /See:/ 'instanceGroupsListInstancesRequest' smart constructor.
+newtype InstanceGroupsListInstancesRequest = InstanceGroupsListInstancesRequest'
+    { _iglirInstanceState :: Maybe InstanceGroupsListInstancesRequestInstanceState
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsListInstancesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iglirInstanceState'
+instanceGroupsListInstancesRequest
+    :: InstanceGroupsListInstancesRequest
+instanceGroupsListInstancesRequest =
+    InstanceGroupsListInstancesRequest'
+    { _iglirInstanceState = Nothing
+    }
+
+-- | A filter for the state of the instances in the instance group. Valid
+-- options are ALL or RUNNING. If you do not specify this parameter the
+-- list includes all instances regardless of their state.
+iglirInstanceState :: Lens' InstanceGroupsListInstancesRequest (Maybe InstanceGroupsListInstancesRequestInstanceState)
+iglirInstanceState
+  = lens _iglirInstanceState
+      (\ s a -> s{_iglirInstanceState = a})
+
+instance FromJSON InstanceGroupsListInstancesRequest
+         where
+        parseJSON
+          = withObject "InstanceGroupsListInstancesRequest"
+              (\ o ->
+                 InstanceGroupsListInstancesRequest' <$>
+                   (o .:? "instanceState"))
+
+instance ToJSON InstanceGroupsListInstancesRequest
+         where
+        toJSON InstanceGroupsListInstancesRequest'{..}
+          = object
+              (catMaybes
+                 [("instanceState" .=) <$> _iglirInstanceState])
+
+-- | [Output Only] A map of scoped target pool lists.
+--
+-- /See:/ 'targetPoolAggregatedListItems' smart constructor.
+newtype TargetPoolAggregatedListItems = TargetPoolAggregatedListItems'
+    { _tpaliAddtional :: HashMap Text TargetPoolsScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpaliAddtional'
+targetPoolAggregatedListItems
+    :: HashMap Text TargetPoolsScopedList -- ^ 'tpaliAddtional'
+    -> TargetPoolAggregatedListItems
+targetPoolAggregatedListItems pTpaliAddtional_ =
+    TargetPoolAggregatedListItems'
+    { _tpaliAddtional = _Coerce # pTpaliAddtional_
+    }
+
+-- | Name of the scope containing this set of target pools.
+tpaliAddtional :: Lens' TargetPoolAggregatedListItems (HashMap Text TargetPoolsScopedList)
+tpaliAddtional
+  = lens _tpaliAddtional
+      (\ s a -> s{_tpaliAddtional = a})
+      . _Coerce
+
+instance FromJSON TargetPoolAggregatedListItems where
+        parseJSON
+          = withObject "TargetPoolAggregatedListItems"
+              (\ o ->
+                 TargetPoolAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON TargetPoolAggregatedListItems where
+        toJSON = toJSON . _tpaliAddtional
+
+--
+-- /See:/ 'targetInstancesScopedList' smart constructor.
+data TargetInstancesScopedList = TargetInstancesScopedList'
+    { _tislWarning         :: !(Maybe TargetInstancesScopedListWarning)
+    , _tislTargetInstances :: !(Maybe [TargetInstance])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstancesScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tislWarning'
+--
+-- * 'tislTargetInstances'
+targetInstancesScopedList
+    :: TargetInstancesScopedList
+targetInstancesScopedList =
+    TargetInstancesScopedList'
+    { _tislWarning = Nothing
+    , _tislTargetInstances = Nothing
+    }
+
+-- | Informational warning which replaces the list of addresses when the list
+-- is empty.
+tislWarning :: Lens' TargetInstancesScopedList (Maybe TargetInstancesScopedListWarning)
+tislWarning
+  = lens _tislWarning (\ s a -> s{_tislWarning = a})
+
+-- | List of target instances contained in this scope.
+tislTargetInstances :: Lens' TargetInstancesScopedList [TargetInstance]
+tislTargetInstances
+  = lens _tislTargetInstances
+      (\ s a -> s{_tislTargetInstances = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON TargetInstancesScopedList where
+        parseJSON
+          = withObject "TargetInstancesScopedList"
+              (\ o ->
+                 TargetInstancesScopedList' <$>
+                   (o .:? "warning") <*>
+                     (o .:? "targetInstances" .!= mempty))
+
+instance ToJSON TargetInstancesScopedList where
+        toJSON TargetInstancesScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _tislWarning,
+                  ("targetInstances" .=) <$> _tislTargetInstances])
+
+-- | [Output Only] A map of scoped address lists.
+--
+-- /See:/ 'addressAggregatedListItems' smart constructor.
+newtype AddressAggregatedListItems = AddressAggregatedListItems'
+    { _aAddtional :: HashMap Text AddressesScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddressAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aAddtional'
+addressAggregatedListItems
+    :: HashMap Text AddressesScopedList -- ^ 'aAddtional'
+    -> AddressAggregatedListItems
+addressAggregatedListItems pAAddtional_ =
+    AddressAggregatedListItems'
+    { _aAddtional = _Coerce # pAAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of addresses.
+aAddtional :: Lens' AddressAggregatedListItems (HashMap Text AddressesScopedList)
+aAddtional
+  = lens _aAddtional (\ s a -> s{_aAddtional = a}) .
+      _Coerce
+
+instance FromJSON AddressAggregatedListItems where
+        parseJSON
+          = withObject "AddressAggregatedListItems"
+              (\ o ->
+                 AddressAggregatedListItems' <$> (parseJSONObject o))
+
+instance ToJSON AddressAggregatedListItems where
+        toJSON = toJSON . _aAddtional
+
+-- | Contains a list of Autoscaler resources.
+--
+-- /See:/ 'autoscalerList' smart constructor.
+data AutoscalerList = AutoscalerList'
+    { _autNextPageToken :: !(Maybe Text)
+    , _autKind          :: !Text
+    , _autItems         :: !(Maybe [Autoscaler])
+    , _autSelfLink      :: !(Maybe Text)
+    , _autId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalerList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'autNextPageToken'
+--
+-- * 'autKind'
+--
+-- * 'autItems'
+--
+-- * 'autSelfLink'
+--
+-- * 'autId'
+autoscalerList
+    :: AutoscalerList
+autoscalerList =
+    AutoscalerList'
+    { _autNextPageToken = Nothing
+    , _autKind = "compute#autoscalerList"
+    , _autItems = Nothing
+    , _autSelfLink = Nothing
+    , _autId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+autNextPageToken :: Lens' AutoscalerList (Maybe Text)
+autNextPageToken
+  = lens _autNextPageToken
+      (\ s a -> s{_autNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#autoscalerList for lists
+-- of autoscalers.
+autKind :: Lens' AutoscalerList Text
+autKind = lens _autKind (\ s a -> s{_autKind = a})
+
+-- | A list of Autoscaler resources.
+autItems :: Lens' AutoscalerList [Autoscaler]
+autItems
+  = lens _autItems (\ s a -> s{_autItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+autSelfLink :: Lens' AutoscalerList (Maybe Text)
+autSelfLink
+  = lens _autSelfLink (\ s a -> s{_autSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+autId :: Lens' AutoscalerList (Maybe Text)
+autId = lens _autId (\ s a -> s{_autId = a})
+
+instance FromJSON AutoscalerList where
+        parseJSON
+          = withObject "AutoscalerList"
+              (\ o ->
+                 AutoscalerList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#autoscalerList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON AutoscalerList where
+        toJSON AutoscalerList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _autNextPageToken,
+                  Just ("kind" .= _autKind),
+                  ("items" .=) <$> _autItems,
+                  ("selfLink" .=) <$> _autSelfLink,
+                  ("id" .=) <$> _autId])
+
+--
+-- /See:/ 'vpnTunnelAggregatedList' smart constructor.
+data VPNTunnelAggregatedList = VPNTunnelAggregatedList'
+    { _vtalNextPageToken :: !(Maybe Text)
+    , _vtalKind          :: !Text
+    , _vtalItems         :: !(Maybe VPNTunnelAggregatedListItems)
+    , _vtalSelfLink      :: !(Maybe Text)
+    , _vtalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnelAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtalNextPageToken'
+--
+-- * 'vtalKind'
+--
+-- * 'vtalItems'
+--
+-- * 'vtalSelfLink'
+--
+-- * 'vtalId'
+vpnTunnelAggregatedList
+    :: VPNTunnelAggregatedList
+vpnTunnelAggregatedList =
+    VPNTunnelAggregatedList'
+    { _vtalNextPageToken = Nothing
+    , _vtalKind = "compute#vpnTunnelAggregatedList"
+    , _vtalItems = Nothing
+    , _vtalSelfLink = Nothing
+    , _vtalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+vtalNextPageToken :: Lens' VPNTunnelAggregatedList (Maybe Text)
+vtalNextPageToken
+  = lens _vtalNextPageToken
+      (\ s a -> s{_vtalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#vpnTunnel for VPN
+-- tunnels.
+vtalKind :: Lens' VPNTunnelAggregatedList Text
+vtalKind = lens _vtalKind (\ s a -> s{_vtalKind = a})
+
+-- | [Output Only] A map of scoped vpn tunnel lists.
+vtalItems :: Lens' VPNTunnelAggregatedList (Maybe VPNTunnelAggregatedListItems)
+vtalItems
+  = lens _vtalItems (\ s a -> s{_vtalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+vtalSelfLink :: Lens' VPNTunnelAggregatedList (Maybe Text)
+vtalSelfLink
+  = lens _vtalSelfLink (\ s a -> s{_vtalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+vtalId :: Lens' VPNTunnelAggregatedList (Maybe Text)
+vtalId = lens _vtalId (\ s a -> s{_vtalId = a})
+
+instance FromJSON VPNTunnelAggregatedList where
+        parseJSON
+          = withObject "VPNTunnelAggregatedList"
+              (\ o ->
+                 VPNTunnelAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#vpnTunnelAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON VPNTunnelAggregatedList where
+        toJSON VPNTunnelAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _vtalNextPageToken,
+                  Just ("kind" .= _vtalKind),
+                  ("items" .=) <$> _vtalItems,
+                  ("selfLink" .=) <$> _vtalSelfLink,
+                  ("id" .=) <$> _vtalId])
+
+-- | An instance-attached disk resource.
+--
+-- /See:/ 'attachedDisk' smart constructor.
+data AttachedDisk = AttachedDisk'
+    { _adKind             :: !Text
+    , _adMode             :: !(Maybe AttachedDiskMode)
+    , _adBoot             :: !(Maybe Bool)
+    , _adAutoDelete       :: !(Maybe Bool)
+    , _adInitializeParams :: !(Maybe AttachedDiskInitializeParams)
+    , _adDeviceName       :: !(Maybe Text)
+    , _adInterface        :: !(Maybe AttachedDiskInterface)
+    , _adSource           :: !(Maybe Text)
+    , _adLicenses         :: !(Maybe [Text])
+    , _adType             :: !(Maybe AttachedDiskType)
+    , _adIndex            :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AttachedDisk' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adKind'
+--
+-- * 'adMode'
+--
+-- * 'adBoot'
+--
+-- * 'adAutoDelete'
+--
+-- * 'adInitializeParams'
+--
+-- * 'adDeviceName'
+--
+-- * 'adInterface'
+--
+-- * 'adSource'
+--
+-- * 'adLicenses'
+--
+-- * 'adType'
+--
+-- * 'adIndex'
+attachedDisk
+    :: AttachedDisk
+attachedDisk =
+    AttachedDisk'
+    { _adKind = "compute#attachedDisk"
+    , _adMode = Nothing
+    , _adBoot = Nothing
+    , _adAutoDelete = Nothing
+    , _adInitializeParams = Nothing
+    , _adDeviceName = Nothing
+    , _adInterface = Nothing
+    , _adSource = Nothing
+    , _adLicenses = Nothing
+    , _adType = Nothing
+    , _adIndex = Nothing
+    }
+
+-- | [Output Only] Type of the resource. Always compute#attachedDisk for
+-- attached disks.
+adKind :: Lens' AttachedDisk Text
+adKind = lens _adKind (\ s a -> s{_adKind = a})
+
+-- | The mode in which to attach this disk, either READ_WRITE or READ_ONLY.
+-- If not specified, the default is to attach the disk in READ_WRITE mode.
+adMode :: Lens' AttachedDisk (Maybe AttachedDiskMode)
+adMode = lens _adMode (\ s a -> s{_adMode = a})
+
+-- | Indicates that this is a boot disk. The virtual machine will use the
+-- first partition of the disk for its root filesystem.
+adBoot :: Lens' AttachedDisk (Maybe Bool)
+adBoot = lens _adBoot (\ s a -> s{_adBoot = a})
+
+-- | Specifies whether the disk will be auto-deleted when the instance is
+-- deleted (but not when the disk is detached from the instance).
+adAutoDelete :: Lens' AttachedDisk (Maybe Bool)
+adAutoDelete
+  = lens _adAutoDelete (\ s a -> s{_adAutoDelete = a})
+
+-- | [Input Only] Specifies the parameters for a new disk that will be
+-- created alongside the new instance. Use initialization parameters to
+-- create boot disks or local SSDs attached to the new instance. This
+-- property is mutually exclusive with the source property; you can only
+-- define one or the other, but not both.
+adInitializeParams :: Lens' AttachedDisk (Maybe AttachedDiskInitializeParams)
+adInitializeParams
+  = lens _adInitializeParams
+      (\ s a -> s{_adInitializeParams = a})
+
+-- | Specifies a unique device name of your choice that is reflected into the
+-- \/dev\/disk\/by-id\/google-* tree of a Linux operating system running
+-- within the instance. This name can be used to reference the device for
+-- mounting, resizing, and so on, from within the instance. If not
+-- specified, the server chooses a default device name to apply to this
+-- disk, in the form persistent-disks-x, where x is a number assigned by
+-- Google Compute Engine. This field is only applicable for persistent
+-- disks.
+adDeviceName :: Lens' AttachedDisk (Maybe Text)
+adDeviceName
+  = lens _adDeviceName (\ s a -> s{_adDeviceName = a})
+
+-- | Specifies the disk interface to use for attaching this disk, which is
+-- either SCSI or NVME. The default is SCSI. Persistent disks must always
+-- use SCSI and the request will fail if you attempt to attach a persistent
+-- disk in any other format than SCSI. Local SSDs can use either NVME or
+-- SCSI. For performance characteristics of SCSI over NVMe, see Local SSD
+-- performance.
+adInterface :: Lens' AttachedDisk (Maybe AttachedDiskInterface)
+adInterface
+  = lens _adInterface (\ s a -> s{_adInterface = a})
+
+-- | Specifies a valid partial or full URL to an existing Persistent Disk
+-- resource. This field is only applicable for persistent disks.
+adSource :: Lens' AttachedDisk (Maybe Text)
+adSource = lens _adSource (\ s a -> s{_adSource = a})
+
+-- | [Output Only] Any valid publicly visible licenses.
+adLicenses :: Lens' AttachedDisk [Text]
+adLicenses
+  = lens _adLicenses (\ s a -> s{_adLicenses = a}) .
+      _Default
+      . _Coerce
+
+-- | Specifies the type of the disk, either SCRATCH or PERSISTENT. If not
+-- specified, the default is PERSISTENT.
+adType :: Lens' AttachedDisk (Maybe AttachedDiskType)
+adType = lens _adType (\ s a -> s{_adType = a})
+
+-- | Assigns a zero-based index to this disk, where 0 is reserved for the
+-- boot disk. For example, if you have many disks attached to an instance,
+-- each disk would have a unique index number. If not specified, the server
+-- will choose an appropriate value.
+adIndex :: Lens' AttachedDisk (Maybe Int32)
+adIndex
+  = lens _adIndex (\ s a -> s{_adIndex = a}) .
+      mapping _Coerce
+
+instance FromJSON AttachedDisk where
+        parseJSON
+          = withObject "AttachedDisk"
+              (\ o ->
+                 AttachedDisk' <$>
+                   (o .:? "kind" .!= "compute#attachedDisk") <*>
+                     (o .:? "mode")
+                     <*> (o .:? "boot")
+                     <*> (o .:? "autoDelete")
+                     <*> (o .:? "initializeParams")
+                     <*> (o .:? "deviceName")
+                     <*> (o .:? "interface")
+                     <*> (o .:? "source")
+                     <*> (o .:? "licenses" .!= mempty)
+                     <*> (o .:? "type")
+                     <*> (o .:? "index"))
+
+instance ToJSON AttachedDisk where
+        toJSON AttachedDisk'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _adKind), ("mode" .=) <$> _adMode,
+                  ("boot" .=) <$> _adBoot,
+                  ("autoDelete" .=) <$> _adAutoDelete,
+                  ("initializeParams" .=) <$> _adInitializeParams,
+                  ("deviceName" .=) <$> _adDeviceName,
+                  ("interface" .=) <$> _adInterface,
+                  ("source" .=) <$> _adSource,
+                  ("licenses" .=) <$> _adLicenses,
+                  ("type" .=) <$> _adType, ("index" .=) <$> _adIndex])
+
+-- | Contains a list of disk types.
+--
+-- /See:/ 'diskTypeList' smart constructor.
+data DiskTypeList = DiskTypeList'
+    { _dtlNextPageToken :: !(Maybe Text)
+    , _dtlKind          :: !Text
+    , _dtlItems         :: !(Maybe [DiskType])
+    , _dtlSelfLink      :: !(Maybe Text)
+    , _dtlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskTypeList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtlNextPageToken'
+--
+-- * 'dtlKind'
+--
+-- * 'dtlItems'
+--
+-- * 'dtlSelfLink'
+--
+-- * 'dtlId'
+diskTypeList
+    :: DiskTypeList
+diskTypeList =
+    DiskTypeList'
+    { _dtlNextPageToken = Nothing
+    , _dtlKind = "compute#diskTypeList"
+    , _dtlItems = Nothing
+    , _dtlSelfLink = Nothing
+    , _dtlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+dtlNextPageToken :: Lens' DiskTypeList (Maybe Text)
+dtlNextPageToken
+  = lens _dtlNextPageToken
+      (\ s a -> s{_dtlNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#diskTypeList for disk
+-- types.
+dtlKind :: Lens' DiskTypeList Text
+dtlKind = lens _dtlKind (\ s a -> s{_dtlKind = a})
+
+-- | [Output Only] A list of Disk Type resources.
+dtlItems :: Lens' DiskTypeList [DiskType]
+dtlItems
+  = lens _dtlItems (\ s a -> s{_dtlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+dtlSelfLink :: Lens' DiskTypeList (Maybe Text)
+dtlSelfLink
+  = lens _dtlSelfLink (\ s a -> s{_dtlSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+dtlId :: Lens' DiskTypeList (Maybe Text)
+dtlId = lens _dtlId (\ s a -> s{_dtlId = a})
+
+instance FromJSON DiskTypeList where
+        parseJSON
+          = withObject "DiskTypeList"
+              (\ o ->
+                 DiskTypeList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#diskTypeList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON DiskTypeList where
+        toJSON DiskTypeList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _dtlNextPageToken,
+                  Just ("kind" .= _dtlKind),
+                  ("items" .=) <$> _dtlItems,
+                  ("selfLink" .=) <$> _dtlSelfLink,
+                  ("id" .=) <$> _dtlId])
+
+-- | Contains a list of machine types.
+--
+-- /See:/ 'machineTypeList' smart constructor.
+data MachineTypeList = MachineTypeList'
+    { _mtlNextPageToken :: !(Maybe Text)
+    , _mtlKind          :: !Text
+    , _mtlItems         :: !(Maybe [MachineType])
+    , _mtlSelfLink      :: !(Maybe Text)
+    , _mtlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypeList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtlNextPageToken'
+--
+-- * 'mtlKind'
+--
+-- * 'mtlItems'
+--
+-- * 'mtlSelfLink'
+--
+-- * 'mtlId'
+machineTypeList
+    :: MachineTypeList
+machineTypeList =
+    MachineTypeList'
+    { _mtlNextPageToken = Nothing
+    , _mtlKind = "compute#machineTypeList"
+    , _mtlItems = Nothing
+    , _mtlSelfLink = Nothing
+    , _mtlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+mtlNextPageToken :: Lens' MachineTypeList (Maybe Text)
+mtlNextPageToken
+  = lens _mtlNextPageToken
+      (\ s a -> s{_mtlNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#machineTypeList for lists
+-- of machine types.
+mtlKind :: Lens' MachineTypeList Text
+mtlKind = lens _mtlKind (\ s a -> s{_mtlKind = a})
+
+-- | [Output Only] A list of Machine Type resources.
+mtlItems :: Lens' MachineTypeList [MachineType]
+mtlItems
+  = lens _mtlItems (\ s a -> s{_mtlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+mtlSelfLink :: Lens' MachineTypeList (Maybe Text)
+mtlSelfLink
+  = lens _mtlSelfLink (\ s a -> s{_mtlSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+mtlId :: Lens' MachineTypeList (Maybe Text)
+mtlId = lens _mtlId (\ s a -> s{_mtlId = a})
+
+instance FromJSON MachineTypeList where
+        parseJSON
+          = withObject "MachineTypeList"
+              (\ o ->
+                 MachineTypeList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#machineTypeList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON MachineTypeList where
+        toJSON MachineTypeList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _mtlNextPageToken,
+                  Just ("kind" .= _mtlKind),
+                  ("items" .=) <$> _mtlItems,
+                  ("selfLink" .=) <$> _mtlSelfLink,
+                  ("id" .=) <$> _mtlId])
+
+-- | A list of TargetHttpProxy resources.
+--
+-- /See:/ 'targetHTTPProxyList' smart constructor.
+data TargetHTTPProxyList = TargetHTTPProxyList'
+    { _thttpplNextPageToken :: !(Maybe Text)
+    , _thttpplKind          :: !Text
+    , _thttpplItems         :: !(Maybe [TargetHTTPProxy])
+    , _thttpplSelfLink      :: !(Maybe Text)
+    , _thttpplId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetHTTPProxyList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'thttpplNextPageToken'
+--
+-- * 'thttpplKind'
+--
+-- * 'thttpplItems'
+--
+-- * 'thttpplSelfLink'
+--
+-- * 'thttpplId'
+targetHTTPProxyList
+    :: TargetHTTPProxyList
+targetHTTPProxyList =
+    TargetHTTPProxyList'
+    { _thttpplNextPageToken = Nothing
+    , _thttpplKind = "compute#targetHttpProxyList"
+    , _thttpplItems = Nothing
+    , _thttpplSelfLink = Nothing
+    , _thttpplId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+thttpplNextPageToken :: Lens' TargetHTTPProxyList (Maybe Text)
+thttpplNextPageToken
+  = lens _thttpplNextPageToken
+      (\ s a -> s{_thttpplNextPageToken = a})
+
+-- | Type of resource. Always compute#targetHttpProxyList for lists of target
+-- HTTP proxies.
+thttpplKind :: Lens' TargetHTTPProxyList Text
+thttpplKind
+  = lens _thttpplKind (\ s a -> s{_thttpplKind = a})
+
+-- | A list of TargetHttpProxy resources.
+thttpplItems :: Lens' TargetHTTPProxyList [TargetHTTPProxy]
+thttpplItems
+  = lens _thttpplItems (\ s a -> s{_thttpplItems = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+thttpplSelfLink :: Lens' TargetHTTPProxyList (Maybe Text)
+thttpplSelfLink
+  = lens _thttpplSelfLink
+      (\ s a -> s{_thttpplSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+thttpplId :: Lens' TargetHTTPProxyList (Maybe Text)
+thttpplId
+  = lens _thttpplId (\ s a -> s{_thttpplId = a})
+
+instance FromJSON TargetHTTPProxyList where
+        parseJSON
+          = withObject "TargetHTTPProxyList"
+              (\ o ->
+                 TargetHTTPProxyList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#targetHttpProxyList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetHTTPProxyList where
+        toJSON TargetHTTPProxyList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _thttpplNextPageToken,
+                  Just ("kind" .= _thttpplKind),
+                  ("items" .=) <$> _thttpplItems,
+                  ("selfLink" .=) <$> _thttpplSelfLink,
+                  ("id" .=) <$> _thttpplId])
+
+--
+-- /See:/ 'diskTypesScopedList' smart constructor.
+data DiskTypesScopedList = DiskTypesScopedList'
+    { _dtslDiskTypes :: !(Maybe [DiskType])
+    , _dtslWarning   :: !(Maybe DiskTypesScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskTypesScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtslDiskTypes'
+--
+-- * 'dtslWarning'
+diskTypesScopedList
+    :: DiskTypesScopedList
+diskTypesScopedList =
+    DiskTypesScopedList'
+    { _dtslDiskTypes = Nothing
+    , _dtslWarning = Nothing
+    }
+
+-- | [Output Only] List of disk types contained in this scope.
+dtslDiskTypes :: Lens' DiskTypesScopedList [DiskType]
+dtslDiskTypes
+  = lens _dtslDiskTypes
+      (\ s a -> s{_dtslDiskTypes = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Informational warning which replaces the list of disk
+-- types when the list is empty.
+dtslWarning :: Lens' DiskTypesScopedList (Maybe DiskTypesScopedListWarning)
+dtslWarning
+  = lens _dtslWarning (\ s a -> s{_dtslWarning = a})
+
+instance FromJSON DiskTypesScopedList where
+        parseJSON
+          = withObject "DiskTypesScopedList"
+              (\ o ->
+                 DiskTypesScopedList' <$>
+                   (o .:? "diskTypes" .!= mempty) <*> (o .:? "warning"))
+
+instance ToJSON DiskTypesScopedList where
+        toJSON DiskTypesScopedList'{..}
+          = object
+              (catMaybes
+                 [("diskTypes" .=) <$> _dtslDiskTypes,
+                  ("warning" .=) <$> _dtslWarning])
+
+--
+-- /See:/ 'diskTypeAggregatedList' smart constructor.
+data DiskTypeAggregatedList = DiskTypeAggregatedList'
+    { _dtalNextPageToken :: !(Maybe Text)
+    , _dtalKind          :: !Text
+    , _dtalItems         :: !(Maybe DiskTypeAggregatedListItems)
+    , _dtalSelfLink      :: !(Maybe Text)
+    , _dtalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskTypeAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtalNextPageToken'
+--
+-- * 'dtalKind'
+--
+-- * 'dtalItems'
+--
+-- * 'dtalSelfLink'
+--
+-- * 'dtalId'
+diskTypeAggregatedList
+    :: DiskTypeAggregatedList
+diskTypeAggregatedList =
+    DiskTypeAggregatedList'
+    { _dtalNextPageToken = Nothing
+    , _dtalKind = "compute#diskTypeAggregatedList"
+    , _dtalItems = Nothing
+    , _dtalSelfLink = Nothing
+    , _dtalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+dtalNextPageToken :: Lens' DiskTypeAggregatedList (Maybe Text)
+dtalNextPageToken
+  = lens _dtalNextPageToken
+      (\ s a -> s{_dtalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#diskTypeAggregatedList.
+dtalKind :: Lens' DiskTypeAggregatedList Text
+dtalKind = lens _dtalKind (\ s a -> s{_dtalKind = a})
+
+-- | [Output Only] A map of scoped disk type lists.
+dtalItems :: Lens' DiskTypeAggregatedList (Maybe DiskTypeAggregatedListItems)
+dtalItems
+  = lens _dtalItems (\ s a -> s{_dtalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+dtalSelfLink :: Lens' DiskTypeAggregatedList (Maybe Text)
+dtalSelfLink
+  = lens _dtalSelfLink (\ s a -> s{_dtalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+dtalId :: Lens' DiskTypeAggregatedList (Maybe Text)
+dtalId = lens _dtalId (\ s a -> s{_dtalId = a})
+
+instance FromJSON DiskTypeAggregatedList where
+        parseJSON
+          = withObject "DiskTypeAggregatedList"
+              (\ o ->
+                 DiskTypeAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#diskTypeAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON DiskTypeAggregatedList where
+        toJSON DiskTypeAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _dtalNextPageToken,
+                  Just ("kind" .= _dtalKind),
+                  ("items" .=) <$> _dtalItems,
+                  ("selfLink" .=) <$> _dtalSelfLink,
+                  ("id" .=) <$> _dtalId])
+
+-- | An HttpHealthCheck resource. This resource defines a template for how
+-- individual instances should be checked for health, via HTTP.
+--
+-- /See:/ 'hTTPHealthCheck' smart constructor.
+data HTTPHealthCheck = HTTPHealthCheck'
+    { _httphcHealthyThreshold   :: !(Maybe (Textual Int32))
+    , _httphcKind               :: !Text
+    , _httphcRequestPath        :: !(Maybe Text)
+    , _httphcSelfLink           :: !(Maybe Text)
+    , _httphcCheckIntervalSec   :: !(Maybe (Textual Int32))
+    , _httphcName               :: !(Maybe Text)
+    , _httphcCreationTimestamp  :: !(Maybe Text)
+    , _httphcId                 :: !(Maybe (Textual Word64))
+    , _httphcHost               :: !(Maybe Text)
+    , _httphcTimeoutSec         :: !(Maybe (Textual Int32))
+    , _httphcDescription        :: !(Maybe Text)
+    , _httphcUnhealthyThreshold :: !(Maybe (Textual Int32))
+    , _httphcPort               :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPHealthCheck' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'httphcHealthyThreshold'
+--
+-- * 'httphcKind'
+--
+-- * 'httphcRequestPath'
+--
+-- * 'httphcSelfLink'
+--
+-- * 'httphcCheckIntervalSec'
+--
+-- * 'httphcName'
+--
+-- * 'httphcCreationTimestamp'
+--
+-- * 'httphcId'
+--
+-- * 'httphcHost'
+--
+-- * 'httphcTimeoutSec'
+--
+-- * 'httphcDescription'
+--
+-- * 'httphcUnhealthyThreshold'
+--
+-- * 'httphcPort'
+hTTPHealthCheck
+    :: HTTPHealthCheck
+hTTPHealthCheck =
+    HTTPHealthCheck'
+    { _httphcHealthyThreshold = Nothing
+    , _httphcKind = "compute#httpHealthCheck"
+    , _httphcRequestPath = Nothing
+    , _httphcSelfLink = Nothing
+    , _httphcCheckIntervalSec = Nothing
+    , _httphcName = Nothing
+    , _httphcCreationTimestamp = Nothing
+    , _httphcId = Nothing
+    , _httphcHost = Nothing
+    , _httphcTimeoutSec = Nothing
+    , _httphcDescription = Nothing
+    , _httphcUnhealthyThreshold = Nothing
+    , _httphcPort = Nothing
+    }
+
+-- | A so-far unhealthy instance will be marked healthy after this many
+-- consecutive successes. The default value is 2.
+httphcHealthyThreshold :: Lens' HTTPHealthCheck (Maybe Int32)
+httphcHealthyThreshold
+  = lens _httphcHealthyThreshold
+      (\ s a -> s{_httphcHealthyThreshold = a})
+      . mapping _Coerce
+
+-- | [Output Only] Type of the resource. Always compute#httpHealthCheck for
+-- HTTP health checks.
+httphcKind :: Lens' HTTPHealthCheck Text
+httphcKind
+  = lens _httphcKind (\ s a -> s{_httphcKind = a})
+
+-- | The request path of the HTTP health check request. The default value is
+-- \/.
+httphcRequestPath :: Lens' HTTPHealthCheck (Maybe Text)
+httphcRequestPath
+  = lens _httphcRequestPath
+      (\ s a -> s{_httphcRequestPath = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+httphcSelfLink :: Lens' HTTPHealthCheck (Maybe Text)
+httphcSelfLink
+  = lens _httphcSelfLink
+      (\ s a -> s{_httphcSelfLink = a})
+
+-- | How often (in seconds) to send a health check. The default value is 5
+-- seconds.
+httphcCheckIntervalSec :: Lens' HTTPHealthCheck (Maybe Int32)
+httphcCheckIntervalSec
+  = lens _httphcCheckIntervalSec
+      (\ s a -> s{_httphcCheckIntervalSec = a})
+      . mapping _Coerce
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+httphcName :: Lens' HTTPHealthCheck (Maybe Text)
+httphcName
+  = lens _httphcName (\ s a -> s{_httphcName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+httphcCreationTimestamp :: Lens' HTTPHealthCheck (Maybe Text)
+httphcCreationTimestamp
+  = lens _httphcCreationTimestamp
+      (\ s a -> s{_httphcCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+httphcId :: Lens' HTTPHealthCheck (Maybe Word64)
+httphcId
+  = lens _httphcId (\ s a -> s{_httphcId = a}) .
+      mapping _Coerce
+
+-- | The value of the host header in the HTTP health check request. If left
+-- empty (default value), the public IP on behalf of which this health
+-- check is performed will be used.
+httphcHost :: Lens' HTTPHealthCheck (Maybe Text)
+httphcHost
+  = lens _httphcHost (\ s a -> s{_httphcHost = a})
+
+-- | How long (in seconds) to wait before claiming failure. The default value
+-- is 5 seconds. It is invalid for timeoutSec to have greater value than
+-- checkIntervalSec.
+httphcTimeoutSec :: Lens' HTTPHealthCheck (Maybe Int32)
+httphcTimeoutSec
+  = lens _httphcTimeoutSec
+      (\ s a -> s{_httphcTimeoutSec = a})
+      . mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+httphcDescription :: Lens' HTTPHealthCheck (Maybe Text)
+httphcDescription
+  = lens _httphcDescription
+      (\ s a -> s{_httphcDescription = a})
+
+-- | A so-far healthy instance will be marked unhealthy after this many
+-- consecutive failures. The default value is 2.
+httphcUnhealthyThreshold :: Lens' HTTPHealthCheck (Maybe Int32)
+httphcUnhealthyThreshold
+  = lens _httphcUnhealthyThreshold
+      (\ s a -> s{_httphcUnhealthyThreshold = a})
+      . mapping _Coerce
+
+-- | The TCP port number for the HTTP health check request. The default value
+-- is 80.
+httphcPort :: Lens' HTTPHealthCheck (Maybe Int32)
+httphcPort
+  = lens _httphcPort (\ s a -> s{_httphcPort = a}) .
+      mapping _Coerce
+
+instance FromJSON HTTPHealthCheck where
+        parseJSON
+          = withObject "HTTPHealthCheck"
+              (\ o ->
+                 HTTPHealthCheck' <$>
+                   (o .:? "healthyThreshold") <*>
+                     (o .:? "kind" .!= "compute#httpHealthCheck")
+                     <*> (o .:? "requestPath")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "checkIntervalSec")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "host")
+                     <*> (o .:? "timeoutSec")
+                     <*> (o .:? "description")
+                     <*> (o .:? "unhealthyThreshold")
+                     <*> (o .:? "port"))
+
+instance ToJSON HTTPHealthCheck where
+        toJSON HTTPHealthCheck'{..}
+          = object
+              (catMaybes
+                 [("healthyThreshold" .=) <$> _httphcHealthyThreshold,
+                  Just ("kind" .= _httphcKind),
+                  ("requestPath" .=) <$> _httphcRequestPath,
+                  ("selfLink" .=) <$> _httphcSelfLink,
+                  ("checkIntervalSec" .=) <$> _httphcCheckIntervalSec,
+                  ("name" .=) <$> _httphcName,
+                  ("creationTimestamp" .=) <$>
+                    _httphcCreationTimestamp,
+                  ("id" .=) <$> _httphcId, ("host" .=) <$> _httphcHost,
+                  ("timeoutSec" .=) <$> _httphcTimeoutSec,
+                  ("description" .=) <$> _httphcDescription,
+                  ("unhealthyThreshold" .=) <$>
+                    _httphcUnhealthyThreshold,
+                  ("port" .=) <$> _httphcPort])
+
+--
+-- /See:/ 'backendServiceGroupHealth' smart constructor.
+data BackendServiceGroupHealth = BackendServiceGroupHealth'
+    { _bsghKind         :: !Text
+    , _bsghHealthStatus :: !(Maybe [HealthStatus])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BackendServiceGroupHealth' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsghKind'
+--
+-- * 'bsghHealthStatus'
+backendServiceGroupHealth
+    :: BackendServiceGroupHealth
+backendServiceGroupHealth =
+    BackendServiceGroupHealth'
+    { _bsghKind = "compute#backendServiceGroupHealth"
+    , _bsghHealthStatus = Nothing
+    }
+
+-- | [Output Only] Type of resource. Always compute#backendServiceGroupHealth
+-- for the health of backend services.
+bsghKind :: Lens' BackendServiceGroupHealth Text
+bsghKind = lens _bsghKind (\ s a -> s{_bsghKind = a})
+
+bsghHealthStatus :: Lens' BackendServiceGroupHealth [HealthStatus]
+bsghHealthStatus
+  = lens _bsghHealthStatus
+      (\ s a -> s{_bsghHealthStatus = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON BackendServiceGroupHealth where
+        parseJSON
+          = withObject "BackendServiceGroupHealth"
+              (\ o ->
+                 BackendServiceGroupHealth' <$>
+                   (o .:? "kind" .!=
+                      "compute#backendServiceGroupHealth")
+                     <*> (o .:? "healthStatus" .!= mempty))
+
+instance ToJSON BackendServiceGroupHealth where
+        toJSON BackendServiceGroupHealth'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _bsghKind),
+                  ("healthStatus" .=) <$> _bsghHealthStatus])
+
+--
+-- /See:/ 'autoscalersScopedList' smart constructor.
+data AutoscalersScopedList = AutoscalersScopedList'
+    { _aAutoscalers :: !(Maybe [Autoscaler])
+    , _aWarning     :: !(Maybe AutoscalersScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalersScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aAutoscalers'
+--
+-- * 'aWarning'
+autoscalersScopedList
+    :: AutoscalersScopedList
+autoscalersScopedList =
+    AutoscalersScopedList'
+    { _aAutoscalers = Nothing
+    , _aWarning = Nothing
+    }
+
+-- | [Output Only] List of autoscalers contained in this scope.
+aAutoscalers :: Lens' AutoscalersScopedList [Autoscaler]
+aAutoscalers
+  = lens _aAutoscalers (\ s a -> s{_aAutoscalers = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Informational warning which replaces the list of
+-- autoscalers when the list is empty.
+aWarning :: Lens' AutoscalersScopedList (Maybe AutoscalersScopedListWarning)
+aWarning = lens _aWarning (\ s a -> s{_aWarning = a})
+
+instance FromJSON AutoscalersScopedList where
+        parseJSON
+          = withObject "AutoscalersScopedList"
+              (\ o ->
+                 AutoscalersScopedList' <$>
+                   (o .:? "autoscalers" .!= mempty) <*>
+                     (o .:? "warning"))
+
+instance ToJSON AutoscalersScopedList where
+        toJSON AutoscalersScopedList'{..}
+          = object
+              (catMaybes
+                 [("autoscalers" .=) <$> _aAutoscalers,
+                  ("warning" .=) <$> _aWarning])
+
+--
+-- /See:/ 'autoscalerAggregatedList' smart constructor.
+data AutoscalerAggregatedList = AutoscalerAggregatedList'
+    { _aalNextPageToken :: !(Maybe Text)
+    , _aalKind          :: !Text
+    , _aalItems         :: !(Maybe AutoscalerAggregatedListItems)
+    , _aalSelfLink      :: !(Maybe Text)
+    , _aalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalerAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aalNextPageToken'
+--
+-- * 'aalKind'
+--
+-- * 'aalItems'
+--
+-- * 'aalSelfLink'
+--
+-- * 'aalId'
+autoscalerAggregatedList
+    :: AutoscalerAggregatedList
+autoscalerAggregatedList =
+    AutoscalerAggregatedList'
+    { _aalNextPageToken = Nothing
+    , _aalKind = "compute#autoscalerAggregatedList"
+    , _aalItems = Nothing
+    , _aalSelfLink = Nothing
+    , _aalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+aalNextPageToken :: Lens' AutoscalerAggregatedList (Maybe Text)
+aalNextPageToken
+  = lens _aalNextPageToken
+      (\ s a -> s{_aalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#autoscalerAggregatedList
+-- for aggregated lists of autoscalers.
+aalKind :: Lens' AutoscalerAggregatedList Text
+aalKind = lens _aalKind (\ s a -> s{_aalKind = a})
+
+-- | A map of scoped autoscaler lists.
+aalItems :: Lens' AutoscalerAggregatedList (Maybe AutoscalerAggregatedListItems)
+aalItems = lens _aalItems (\ s a -> s{_aalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+aalSelfLink :: Lens' AutoscalerAggregatedList (Maybe Text)
+aalSelfLink
+  = lens _aalSelfLink (\ s a -> s{_aalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+aalId :: Lens' AutoscalerAggregatedList (Maybe Text)
+aalId = lens _aalId (\ s a -> s{_aalId = a})
+
+instance FromJSON AutoscalerAggregatedList where
+        parseJSON
+          = withObject "AutoscalerAggregatedList"
+              (\ o ->
+                 AutoscalerAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#autoscalerAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON AutoscalerAggregatedList where
+        toJSON AutoscalerAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _aalNextPageToken,
+                  Just ("kind" .= _aalKind),
+                  ("items" .=) <$> _aalItems,
+                  ("selfLink" .=) <$> _aalSelfLink,
+                  ("id" .=) <$> _aalId])
+
+-- | Cloud Autoscaler policy.
+--
+-- /See:/ 'autoscalingPolicy' smart constructor.
+data AutoscalingPolicy = AutoscalingPolicy'
+    { _apCustomMetricUtilizations :: !(Maybe [AutoscalingPolicyCustomMetricUtilization])
+    , _apMaxNumReplicas           :: !(Maybe (Textual Int32))
+    , _apCPUUtilization           :: !(Maybe AutoscalingPolicyCPUUtilization)
+    , _apLoadBalancingUtilization :: !(Maybe AutoscalingPolicyLoadBalancingUtilization)
+    , _apMinNumReplicas           :: !(Maybe (Textual Int32))
+    , _apCoolDownPeriodSec        :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalingPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apCustomMetricUtilizations'
+--
+-- * 'apMaxNumReplicas'
+--
+-- * 'apCPUUtilization'
+--
+-- * 'apLoadBalancingUtilization'
+--
+-- * 'apMinNumReplicas'
+--
+-- * 'apCoolDownPeriodSec'
+autoscalingPolicy
+    :: AutoscalingPolicy
+autoscalingPolicy =
+    AutoscalingPolicy'
+    { _apCustomMetricUtilizations = Nothing
+    , _apMaxNumReplicas = Nothing
+    , _apCPUUtilization = Nothing
+    , _apLoadBalancingUtilization = Nothing
+    , _apMinNumReplicas = Nothing
+    , _apCoolDownPeriodSec = Nothing
+    }
+
+-- | Configuration parameters of autoscaling based on a custom metric.
+apCustomMetricUtilizations :: Lens' AutoscalingPolicy [AutoscalingPolicyCustomMetricUtilization]
+apCustomMetricUtilizations
+  = lens _apCustomMetricUtilizations
+      (\ s a -> s{_apCustomMetricUtilizations = a})
+      . _Default
+      . _Coerce
+
+-- | The maximum number of instances that the autoscaler can scale up to.
+-- This is required when creating or updating an autoscaler. The maximum
+-- number of replicas should not be lower than minimal number of replicas.
+apMaxNumReplicas :: Lens' AutoscalingPolicy (Maybe Int32)
+apMaxNumReplicas
+  = lens _apMaxNumReplicas
+      (\ s a -> s{_apMaxNumReplicas = a})
+      . mapping _Coerce
+
+-- | Defines the CPU utilization policy that allows the autoscaler to scale
+-- based on the average CPU utilization of a managed instance group.
+apCPUUtilization :: Lens' AutoscalingPolicy (Maybe AutoscalingPolicyCPUUtilization)
+apCPUUtilization
+  = lens _apCPUUtilization
+      (\ s a -> s{_apCPUUtilization = a})
+
+-- | Configuration parameters of autoscaling based on load balancer.
+apLoadBalancingUtilization :: Lens' AutoscalingPolicy (Maybe AutoscalingPolicyLoadBalancingUtilization)
+apLoadBalancingUtilization
+  = lens _apLoadBalancingUtilization
+      (\ s a -> s{_apLoadBalancingUtilization = a})
+
+-- | The minimum number of replicas that the autoscaler can scale down to.
+-- This cannot be less than 0. If not provided, autoscaler will choose a
+-- default value depending on maximum number of instances allowed.
+apMinNumReplicas :: Lens' AutoscalingPolicy (Maybe Int32)
+apMinNumReplicas
+  = lens _apMinNumReplicas
+      (\ s a -> s{_apMinNumReplicas = a})
+      . mapping _Coerce
+
+-- | The number of seconds that the autoscaler should wait before it starts
+-- collecting information from a new instance. This prevents the autoscaler
+-- from collecting information when the instance is initializing, during
+-- which the collected usage would not be reliable. The default time
+-- autoscaler waits is 60 seconds. Virtual machine initialization times
+-- might vary because of numerous factors. We recommend that you test how
+-- long an instance may take to initialize. To do this, create an instance
+-- and time the startup process.
+apCoolDownPeriodSec :: Lens' AutoscalingPolicy (Maybe Int32)
+apCoolDownPeriodSec
+  = lens _apCoolDownPeriodSec
+      (\ s a -> s{_apCoolDownPeriodSec = a})
+      . mapping _Coerce
+
+instance FromJSON AutoscalingPolicy where
+        parseJSON
+          = withObject "AutoscalingPolicy"
+              (\ o ->
+                 AutoscalingPolicy' <$>
+                   (o .:? "customMetricUtilizations" .!= mempty) <*>
+                     (o .:? "maxNumReplicas")
+                     <*> (o .:? "cpuUtilization")
+                     <*> (o .:? "loadBalancingUtilization")
+                     <*> (o .:? "minNumReplicas")
+                     <*> (o .:? "coolDownPeriodSec"))
+
+instance ToJSON AutoscalingPolicy where
+        toJSON AutoscalingPolicy'{..}
+          = object
+              (catMaybes
+                 [("customMetricUtilizations" .=) <$>
+                    _apCustomMetricUtilizations,
+                  ("maxNumReplicas" .=) <$> _apMaxNumReplicas,
+                  ("cpuUtilization" .=) <$> _apCPUUtilization,
+                  ("loadBalancingUtilization" .=) <$>
+                    _apLoadBalancingUtilization,
+                  ("minNumReplicas" .=) <$> _apMinNumReplicas,
+                  ("coolDownPeriodSec" .=) <$> _apCoolDownPeriodSec])
+
+-- | Contains a list of region resources.
+--
+-- /See:/ 'regionList' smart constructor.
+data RegionList = RegionList'
+    { _regNextPageToken :: !(Maybe Text)
+    , _regKind          :: !Text
+    , _regItems         :: !(Maybe [Region])
+    , _regSelfLink      :: !(Maybe Text)
+    , _regId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegionList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'regNextPageToken'
+--
+-- * 'regKind'
+--
+-- * 'regItems'
+--
+-- * 'regSelfLink'
+--
+-- * 'regId'
+regionList
+    :: RegionList
+regionList =
+    RegionList'
+    { _regNextPageToken = Nothing
+    , _regKind = "compute#regionList"
+    , _regItems = Nothing
+    , _regSelfLink = Nothing
+    , _regId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+regNextPageToken :: Lens' RegionList (Maybe Text)
+regNextPageToken
+  = lens _regNextPageToken
+      (\ s a -> s{_regNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#regionList for lists of
+-- regions.
+regKind :: Lens' RegionList Text
+regKind = lens _regKind (\ s a -> s{_regKind = a})
+
+-- | [Output Only] A list of Region resources.
+regItems :: Lens' RegionList [Region]
+regItems
+  = lens _regItems (\ s a -> s{_regItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+regSelfLink :: Lens' RegionList (Maybe Text)
+regSelfLink
+  = lens _regSelfLink (\ s a -> s{_regSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+regId :: Lens' RegionList (Maybe Text)
+regId = lens _regId (\ s a -> s{_regId = a})
+
+instance FromJSON RegionList where
+        parseJSON
+          = withObject "RegionList"
+              (\ o ->
+                 RegionList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#regionList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON RegionList where
+        toJSON RegionList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _regNextPageToken,
+                  Just ("kind" .= _regKind),
+                  ("items" .=) <$> _regItems,
+                  ("selfLink" .=) <$> _regSelfLink,
+                  ("id" .=) <$> _regId])
+
+-- | Contains a list of VpnTunnel resources.
+--
+-- /See:/ 'vpnTunnelList' smart constructor.
+data VPNTunnelList = VPNTunnelList'
+    { _vtlNextPageToken :: !(Maybe Text)
+    , _vtlKind          :: !Text
+    , _vtlItems         :: !(Maybe [VPNTunnel])
+    , _vtlSelfLink      :: !(Maybe Text)
+    , _vtlId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnelList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtlNextPageToken'
+--
+-- * 'vtlKind'
+--
+-- * 'vtlItems'
+--
+-- * 'vtlSelfLink'
+--
+-- * 'vtlId'
+vpnTunnelList
+    :: VPNTunnelList
+vpnTunnelList =
+    VPNTunnelList'
+    { _vtlNextPageToken = Nothing
+    , _vtlKind = "compute#vpnTunnelList"
+    , _vtlItems = Nothing
+    , _vtlSelfLink = Nothing
+    , _vtlId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+vtlNextPageToken :: Lens' VPNTunnelList (Maybe Text)
+vtlNextPageToken
+  = lens _vtlNextPageToken
+      (\ s a -> s{_vtlNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#vpnTunnel for VPN
+-- tunnels.
+vtlKind :: Lens' VPNTunnelList Text
+vtlKind = lens _vtlKind (\ s a -> s{_vtlKind = a})
+
+-- | [Output Only] A list of VpnTunnel resources.
+vtlItems :: Lens' VPNTunnelList [VPNTunnel]
+vtlItems
+  = lens _vtlItems (\ s a -> s{_vtlItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for the resource.
+vtlSelfLink :: Lens' VPNTunnelList (Maybe Text)
+vtlSelfLink
+  = lens _vtlSelfLink (\ s a -> s{_vtlSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+vtlId :: Lens' VPNTunnelList (Maybe Text)
+vtlId = lens _vtlId (\ s a -> s{_vtlId = a})
+
+instance FromJSON VPNTunnelList where
+        parseJSON
+          = withObject "VPNTunnelList"
+              (\ o ->
+                 VPNTunnelList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#vpnTunnelList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON VPNTunnelList where
+        toJSON VPNTunnelList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _vtlNextPageToken,
+                  Just ("kind" .= _vtlKind),
+                  ("items" .=) <$> _vtlItems,
+                  ("selfLink" .=) <$> _vtlSelfLink,
+                  ("id" .=) <$> _vtlId])
+
+--
+-- /See:/ 'machineTypeScratchDisksItem' smart constructor.
+newtype MachineTypeScratchDisksItem = MachineTypeScratchDisksItem'
+    { _mtsdiDiskGb :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypeScratchDisksItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtsdiDiskGb'
+machineTypeScratchDisksItem
+    :: MachineTypeScratchDisksItem
+machineTypeScratchDisksItem =
+    MachineTypeScratchDisksItem'
+    { _mtsdiDiskGb = Nothing
+    }
+
+-- | Size of the scratch disk, defined in GB.
+mtsdiDiskGb :: Lens' MachineTypeScratchDisksItem (Maybe Int32)
+mtsdiDiskGb
+  = lens _mtsdiDiskGb (\ s a -> s{_mtsdiDiskGb = a}) .
+      mapping _Coerce
+
+instance FromJSON MachineTypeScratchDisksItem where
+        parseJSON
+          = withObject "MachineTypeScratchDisksItem"
+              (\ o ->
+                 MachineTypeScratchDisksItem' <$> (o .:? "diskGb"))
+
+instance ToJSON MachineTypeScratchDisksItem where
+        toJSON MachineTypeScratchDisksItem'{..}
+          = object (catMaybes [("diskGb" .=) <$> _mtsdiDiskGb])
+
+--
+-- /See:/ 'subnetworksScopedListWarningDataItem' smart constructor.
+data SubnetworksScopedListWarningDataItem = SubnetworksScopedListWarningDataItem'
+    { _sslwdiValue :: !(Maybe Text)
+    , _sslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sslwdiValue'
+--
+-- * 'sslwdiKey'
+subnetworksScopedListWarningDataItem
+    :: SubnetworksScopedListWarningDataItem
+subnetworksScopedListWarningDataItem =
+    SubnetworksScopedListWarningDataItem'
+    { _sslwdiValue = Nothing
+    , _sslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+sslwdiValue :: Lens' SubnetworksScopedListWarningDataItem (Maybe Text)
+sslwdiValue
+  = lens _sslwdiValue (\ s a -> s{_sslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+sslwdiKey :: Lens' SubnetworksScopedListWarningDataItem (Maybe Text)
+sslwdiKey
+  = lens _sslwdiKey (\ s a -> s{_sslwdiKey = a})
+
+instance FromJSON
+         SubnetworksScopedListWarningDataItem where
+        parseJSON
+          = withObject "SubnetworksScopedListWarningDataItem"
+              (\ o ->
+                 SubnetworksScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON SubnetworksScopedListWarningDataItem
+         where
+        toJSON SubnetworksScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _sslwdiValue,
+                  ("key" .=) <$> _sslwdiKey])
+
+--
+-- /See:/ 'machineTypesScopedList' smart constructor.
+data MachineTypesScopedList = MachineTypesScopedList'
+    { _mtslMachineTypes :: !(Maybe [MachineType])
+    , _mtslWarning      :: !(Maybe MachineTypesScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypesScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtslMachineTypes'
+--
+-- * 'mtslWarning'
+machineTypesScopedList
+    :: MachineTypesScopedList
+machineTypesScopedList =
+    MachineTypesScopedList'
+    { _mtslMachineTypes = Nothing
+    , _mtslWarning = Nothing
+    }
+
+-- | [Output Only] List of machine types contained in this scope.
+mtslMachineTypes :: Lens' MachineTypesScopedList [MachineType]
+mtslMachineTypes
+  = lens _mtslMachineTypes
+      (\ s a -> s{_mtslMachineTypes = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] An informational warning that appears when the machine
+-- types list is empty.
+mtslWarning :: Lens' MachineTypesScopedList (Maybe MachineTypesScopedListWarning)
+mtslWarning
+  = lens _mtslWarning (\ s a -> s{_mtslWarning = a})
+
+instance FromJSON MachineTypesScopedList where
+        parseJSON
+          = withObject "MachineTypesScopedList"
+              (\ o ->
+                 MachineTypesScopedList' <$>
+                   (o .:? "machineTypes" .!= mempty) <*>
+                     (o .:? "warning"))
+
+instance ToJSON MachineTypesScopedList where
+        toJSON MachineTypesScopedList'{..}
+          = object
+              (catMaybes
+                 [("machineTypes" .=) <$> _mtslMachineTypes,
+                  ("warning" .=) <$> _mtslWarning])
+
+-- | A Subnetwork resource.
+--
+-- /See:/ 'subnetwork' smart constructor.
+data Subnetwork = Subnetwork'
+    { _subKind              :: !Text
+    , _subNetwork           :: !(Maybe Text)
+    , _subGatewayAddress    :: !(Maybe Text)
+    , _subSelfLink          :: !(Maybe Text)
+    , _subName              :: !(Maybe Text)
+    , _subCreationTimestamp :: !(Maybe Text)
+    , _subIPCIdRRange       :: !(Maybe Text)
+    , _subId                :: !(Maybe (Textual Word64))
+    , _subRegion            :: !(Maybe Text)
+    , _subDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Subnetwork' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'subKind'
+--
+-- * 'subNetwork'
+--
+-- * 'subGatewayAddress'
+--
+-- * 'subSelfLink'
+--
+-- * 'subName'
+--
+-- * 'subCreationTimestamp'
+--
+-- * 'subIPCIdRRange'
+--
+-- * 'subId'
+--
+-- * 'subRegion'
+--
+-- * 'subDescription'
+subnetwork
+    :: Subnetwork
+subnetwork =
+    Subnetwork'
+    { _subKind = "compute#subnetwork"
+    , _subNetwork = Nothing
+    , _subGatewayAddress = Nothing
+    , _subSelfLink = Nothing
+    , _subName = Nothing
+    , _subCreationTimestamp = Nothing
+    , _subIPCIdRRange = Nothing
+    , _subId = Nothing
+    , _subRegion = Nothing
+    , _subDescription = Nothing
+    }
+
+-- | [Output Only] Type of the resource. Always compute#subnetwork for
+-- Subnetwork resources.
+subKind :: Lens' Subnetwork Text
+subKind = lens _subKind (\ s a -> s{_subKind = a})
+
+-- | The URL of the network to which this subnetwork belongs, provided by the
+-- client when initially creating the subnetwork. Only networks that are in
+-- the distributed mode can have subnetworks.
+subNetwork :: Lens' Subnetwork (Maybe Text)
+subNetwork
+  = lens _subNetwork (\ s a -> s{_subNetwork = a})
+
+-- | [Output Only] The gateway address for default routes to reach
+-- destination addresses outside this subnetwork.
+subGatewayAddress :: Lens' Subnetwork (Maybe Text)
+subGatewayAddress
+  = lens _subGatewayAddress
+      (\ s a -> s{_subGatewayAddress = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+subSelfLink :: Lens' Subnetwork (Maybe Text)
+subSelfLink
+  = lens _subSelfLink (\ s a -> s{_subSelfLink = a})
+
+-- | The name of the resource, provided by the client when initially creating
+-- the resource. The name must be 1-63 characters long, and comply with
+-- RFC1035. Specifically, the name must be 1-63 characters long and match
+-- the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+subName :: Lens' Subnetwork (Maybe Text)
+subName = lens _subName (\ s a -> s{_subName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+subCreationTimestamp :: Lens' Subnetwork (Maybe Text)
+subCreationTimestamp
+  = lens _subCreationTimestamp
+      (\ s a -> s{_subCreationTimestamp = a})
+
+-- | The range of internal addresses that are owned by this subnetwork.
+-- Provide this property when you create the subnetwork. For example,
+-- 10.0.0.0\/8 or 192.168.0.0\/16. Ranges must be unique and
+-- non-overlapping within a network.
+subIPCIdRRange :: Lens' Subnetwork (Maybe Text)
+subIPCIdRRange
+  = lens _subIPCIdRRange
+      (\ s a -> s{_subIPCIdRRange = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+subId :: Lens' Subnetwork (Maybe Word64)
+subId
+  = lens _subId (\ s a -> s{_subId = a}) .
+      mapping _Coerce
+
+-- | URL of the region where the Subnetwork resides.
+subRegion :: Lens' Subnetwork (Maybe Text)
+subRegion
+  = lens _subRegion (\ s a -> s{_subRegion = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+subDescription :: Lens' Subnetwork (Maybe Text)
+subDescription
+  = lens _subDescription
+      (\ s a -> s{_subDescription = a})
+
+instance FromJSON Subnetwork where
+        parseJSON
+          = withObject "Subnetwork"
+              (\ o ->
+                 Subnetwork' <$>
+                   (o .:? "kind" .!= "compute#subnetwork") <*>
+                     (o .:? "network")
+                     <*> (o .:? "gatewayAddress")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "ipCidrRange")
+                     <*> (o .:? "id")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description"))
+
+instance ToJSON Subnetwork where
+        toJSON Subnetwork'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _subKind),
+                  ("network" .=) <$> _subNetwork,
+                  ("gatewayAddress" .=) <$> _subGatewayAddress,
+                  ("selfLink" .=) <$> _subSelfLink,
+                  ("name" .=) <$> _subName,
+                  ("creationTimestamp" .=) <$> _subCreationTimestamp,
+                  ("ipCidrRange" .=) <$> _subIPCIdRRange,
+                  ("id" .=) <$> _subId, ("region" .=) <$> _subRegion,
+                  ("description" .=) <$> _subDescription])
+
+--
+-- /See:/ 'machineTypeAggregatedList' smart constructor.
+data MachineTypeAggregatedList = MachineTypeAggregatedList'
+    { _mtalNextPageToken :: !(Maybe Text)
+    , _mtalKind          :: !Text
+    , _mtalItems         :: !(Maybe MachineTypeAggregatedListItems)
+    , _mtalSelfLink      :: !(Maybe Text)
+    , _mtalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypeAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtalNextPageToken'
+--
+-- * 'mtalKind'
+--
+-- * 'mtalItems'
+--
+-- * 'mtalSelfLink'
+--
+-- * 'mtalId'
+machineTypeAggregatedList
+    :: MachineTypeAggregatedList
+machineTypeAggregatedList =
+    MachineTypeAggregatedList'
+    { _mtalNextPageToken = Nothing
+    , _mtalKind = "compute#machineTypeAggregatedList"
+    , _mtalItems = Nothing
+    , _mtalSelfLink = Nothing
+    , _mtalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+mtalNextPageToken :: Lens' MachineTypeAggregatedList (Maybe Text)
+mtalNextPageToken
+  = lens _mtalNextPageToken
+      (\ s a -> s{_mtalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#machineTypeAggregatedList
+-- for aggregated lists of machine types.
+mtalKind :: Lens' MachineTypeAggregatedList Text
+mtalKind = lens _mtalKind (\ s a -> s{_mtalKind = a})
+
+-- | [Output Only] A map of scoped machine type lists.
+mtalItems :: Lens' MachineTypeAggregatedList (Maybe MachineTypeAggregatedListItems)
+mtalItems
+  = lens _mtalItems (\ s a -> s{_mtalItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+mtalSelfLink :: Lens' MachineTypeAggregatedList (Maybe Text)
+mtalSelfLink
+  = lens _mtalSelfLink (\ s a -> s{_mtalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+mtalId :: Lens' MachineTypeAggregatedList (Maybe Text)
+mtalId = lens _mtalId (\ s a -> s{_mtalId = a})
+
+instance FromJSON MachineTypeAggregatedList where
+        parseJSON
+          = withObject "MachineTypeAggregatedList"
+              (\ o ->
+                 MachineTypeAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#machineTypeAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON MachineTypeAggregatedList where
+        toJSON MachineTypeAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _mtalNextPageToken,
+                  Just ("kind" .= _mtalKind),
+                  ("items" .=) <$> _mtalItems,
+                  ("selfLink" .=) <$> _mtalSelfLink,
+                  ("id" .=) <$> _mtalId])
+
+-- | A DiskType resource.
+--
+-- /See:/ 'diskType' smart constructor.
+data DiskType = DiskType'
+    { _dtKind              :: !Text
+    , _dtZone              :: !(Maybe Text)
+    , _dtSelfLink          :: !(Maybe Text)
+    , _dtName              :: !(Maybe Text)
+    , _dtCreationTimestamp :: !(Maybe Text)
+    , _dtId                :: !(Maybe (Textual Word64))
+    , _dtValidDiskSize     :: !(Maybe Text)
+    , _dtDescription       :: !(Maybe Text)
+    , _dtDefaultDiskSizeGb :: !(Maybe (Textual Int64))
+    , _dtDeprecated        :: !(Maybe DeprecationStatus)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtKind'
+--
+-- * 'dtZone'
+--
+-- * 'dtSelfLink'
+--
+-- * 'dtName'
+--
+-- * 'dtCreationTimestamp'
+--
+-- * 'dtId'
+--
+-- * 'dtValidDiskSize'
+--
+-- * 'dtDescription'
+--
+-- * 'dtDefaultDiskSizeGb'
+--
+-- * 'dtDeprecated'
+diskType
+    :: DiskType
+diskType =
+    DiskType'
+    { _dtKind = "compute#diskType"
+    , _dtZone = Nothing
+    , _dtSelfLink = Nothing
+    , _dtName = Nothing
+    , _dtCreationTimestamp = Nothing
+    , _dtId = Nothing
+    , _dtValidDiskSize = Nothing
+    , _dtDescription = Nothing
+    , _dtDefaultDiskSizeGb = Nothing
+    , _dtDeprecated = Nothing
+    }
+
+-- | [Output Only] Type of the resource. Always compute#diskType for disk
+-- types.
+dtKind :: Lens' DiskType Text
+dtKind = lens _dtKind (\ s a -> s{_dtKind = a})
+
+-- | [Output Only] URL of the zone where the disk type resides.
+dtZone :: Lens' DiskType (Maybe Text)
+dtZone = lens _dtZone (\ s a -> s{_dtZone = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+dtSelfLink :: Lens' DiskType (Maybe Text)
+dtSelfLink
+  = lens _dtSelfLink (\ s a -> s{_dtSelfLink = a})
+
+-- | [Output Only] Name of the resource.
+dtName :: Lens' DiskType (Maybe Text)
+dtName = lens _dtName (\ s a -> s{_dtName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+dtCreationTimestamp :: Lens' DiskType (Maybe Text)
+dtCreationTimestamp
+  = lens _dtCreationTimestamp
+      (\ s a -> s{_dtCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+dtId :: Lens' DiskType (Maybe Word64)
+dtId
+  = lens _dtId (\ s a -> s{_dtId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] An optional textual description of the valid disk size,
+-- such as \"10GB-10TB\".
+dtValidDiskSize :: Lens' DiskType (Maybe Text)
+dtValidDiskSize
+  = lens _dtValidDiskSize
+      (\ s a -> s{_dtValidDiskSize = a})
+
+-- | [Output Only] An optional description of this resource.
+dtDescription :: Lens' DiskType (Maybe Text)
+dtDescription
+  = lens _dtDescription
+      (\ s a -> s{_dtDescription = a})
+
+-- | [Output Only] Server-defined default disk size in GB.
+dtDefaultDiskSizeGb :: Lens' DiskType (Maybe Int64)
+dtDefaultDiskSizeGb
+  = lens _dtDefaultDiskSizeGb
+      (\ s a -> s{_dtDefaultDiskSizeGb = a})
+      . mapping _Coerce
+
+-- | [Output Only] The deprecation status associated with this disk type.
+dtDeprecated :: Lens' DiskType (Maybe DeprecationStatus)
+dtDeprecated
+  = lens _dtDeprecated (\ s a -> s{_dtDeprecated = a})
+
+instance FromJSON DiskType where
+        parseJSON
+          = withObject "DiskType"
+              (\ o ->
+                 DiskType' <$>
+                   (o .:? "kind" .!= "compute#diskType") <*>
+                     (o .:? "zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "validDiskSize")
+                     <*> (o .:? "description")
+                     <*> (o .:? "defaultDiskSizeGb")
+                     <*> (o .:? "deprecated"))
+
+instance ToJSON DiskType where
+        toJSON DiskType'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _dtKind), ("zone" .=) <$> _dtZone,
+                  ("selfLink" .=) <$> _dtSelfLink,
+                  ("name" .=) <$> _dtName,
+                  ("creationTimestamp" .=) <$> _dtCreationTimestamp,
+                  ("id" .=) <$> _dtId,
+                  ("validDiskSize" .=) <$> _dtValidDiskSize,
+                  ("description" .=) <$> _dtDescription,
+                  ("defaultDiskSizeGb" .=) <$> _dtDefaultDiskSizeGb,
+                  ("deprecated" .=) <$> _dtDeprecated])
+
+-- | Message representing the validation result for a UrlMap.
+--
+-- /See:/ 'urlMapValidationResult' smart constructor.
+data URLMapValidationResult = URLMapValidationResult'
+    { _umvrLoadErrors    :: !(Maybe [Text])
+    , _umvrLoadSucceeded :: !(Maybe Bool)
+    , _umvrTestPassed    :: !(Maybe Bool)
+    , _umvrTestFailures  :: !(Maybe [TestFailure])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMapValidationResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umvrLoadErrors'
+--
+-- * 'umvrLoadSucceeded'
+--
+-- * 'umvrTestPassed'
+--
+-- * 'umvrTestFailures'
+urlMapValidationResult
+    :: URLMapValidationResult
+urlMapValidationResult =
+    URLMapValidationResult'
+    { _umvrLoadErrors = Nothing
+    , _umvrLoadSucceeded = Nothing
+    , _umvrTestPassed = Nothing
+    , _umvrTestFailures = Nothing
+    }
+
+umvrLoadErrors :: Lens' URLMapValidationResult [Text]
+umvrLoadErrors
+  = lens _umvrLoadErrors
+      (\ s a -> s{_umvrLoadErrors = a})
+      . _Default
+      . _Coerce
+
+-- | Whether the given UrlMap can be successfully loaded. If false,
+-- \'loadErrors\' indicates the reasons.
+umvrLoadSucceeded :: Lens' URLMapValidationResult (Maybe Bool)
+umvrLoadSucceeded
+  = lens _umvrLoadSucceeded
+      (\ s a -> s{_umvrLoadSucceeded = a})
+
+-- | If successfully loaded, this field indicates whether the test passed. If
+-- false, \'testFailures\'s indicate the reason of failure.
+umvrTestPassed :: Lens' URLMapValidationResult (Maybe Bool)
+umvrTestPassed
+  = lens _umvrTestPassed
+      (\ s a -> s{_umvrTestPassed = a})
+
+umvrTestFailures :: Lens' URLMapValidationResult [TestFailure]
+umvrTestFailures
+  = lens _umvrTestFailures
+      (\ s a -> s{_umvrTestFailures = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON URLMapValidationResult where
+        parseJSON
+          = withObject "URLMapValidationResult"
+              (\ o ->
+                 URLMapValidationResult' <$>
+                   (o .:? "loadErrors" .!= mempty) <*>
+                     (o .:? "loadSucceeded")
+                     <*> (o .:? "testPassed")
+                     <*> (o .:? "testFailures" .!= mempty))
+
+instance ToJSON URLMapValidationResult where
+        toJSON URLMapValidationResult'{..}
+          = object
+              (catMaybes
+                 [("loadErrors" .=) <$> _umvrLoadErrors,
+                  ("loadSucceeded" .=) <$> _umvrLoadSucceeded,
+                  ("testPassed" .=) <$> _umvrTestPassed,
+                  ("testFailures" .=) <$> _umvrTestFailures])
+
+-- | A metadata key\/value entry.
+--
+-- /See:/ 'metadata' smart constructor.
+data Metadata = Metadata'
+    { _mKind        :: !Text
+    , _mFingerprint :: !(Maybe Base64)
+    , _mItems       :: !(Maybe [MetadataItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Metadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mKind'
+--
+-- * 'mFingerprint'
+--
+-- * 'mItems'
+metadata
+    :: Metadata
+metadata =
+    Metadata'
+    { _mKind = "compute#metadata"
+    , _mFingerprint = Nothing
+    , _mItems = Nothing
+    }
+
+-- | [Output Only] Type of the resource. Always compute#metadata for
+-- metadata.
+mKind :: Lens' Metadata Text
+mKind = lens _mKind (\ s a -> s{_mKind = a})
+
+-- | Specifies a fingerprint for this request, which is essentially a hash of
+-- the metadata\'s contents and used for optimistic locking. The
+-- fingerprint is initially generated by Compute Engine and changes after
+-- every request to modify or update metadata. You must always provide an
+-- up-to-date fingerprint hash in order to update or change metadata.
+mFingerprint :: Lens' Metadata (Maybe ByteString)
+mFingerprint
+  = lens _mFingerprint (\ s a -> s{_mFingerprint = a})
+      . mapping _Base64
+
+-- | Array of key\/value pairs. The total size of all keys and values must be
+-- less than 512 KB.
+mItems :: Lens' Metadata [MetadataItemsItem]
+mItems
+  = lens _mItems (\ s a -> s{_mItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Metadata where
+        parseJSON
+          = withObject "Metadata"
+              (\ o ->
+                 Metadata' <$>
+                   (o .:? "kind" .!= "compute#metadata") <*>
+                     (o .:? "fingerprint")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Metadata where
+        toJSON Metadata'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _mKind),
+                  ("fingerprint" .=) <$> _mFingerprint,
+                  ("items" .=) <$> _mItems])
+
+--
+-- /See:/ 'routeWarningsItem' smart constructor.
+data RouteWarningsItem = RouteWarningsItem'
+    { _rwiData    :: !(Maybe [RouteWarningsItemDataItem])
+    , _rwiCode    :: !(Maybe RouteWarningsItemCode)
+    , _rwiMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RouteWarningsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rwiData'
+--
+-- * 'rwiCode'
+--
+-- * 'rwiMessage'
+routeWarningsItem
+    :: RouteWarningsItem
+routeWarningsItem =
+    RouteWarningsItem'
+    { _rwiData = Nothing
+    , _rwiCode = Nothing
+    , _rwiMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+rwiData :: Lens' RouteWarningsItem [RouteWarningsItemDataItem]
+rwiData
+  = lens _rwiData (\ s a -> s{_rwiData = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+rwiCode :: Lens' RouteWarningsItem (Maybe RouteWarningsItemCode)
+rwiCode = lens _rwiCode (\ s a -> s{_rwiCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+rwiMessage :: Lens' RouteWarningsItem (Maybe Text)
+rwiMessage
+  = lens _rwiMessage (\ s a -> s{_rwiMessage = a})
+
+instance FromJSON RouteWarningsItem where
+        parseJSON
+          = withObject "RouteWarningsItem"
+              (\ o ->
+                 RouteWarningsItem' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON RouteWarningsItem where
+        toJSON RouteWarningsItem'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _rwiData, ("code" .=) <$> _rwiCode,
+                  ("message" .=) <$> _rwiMessage])
+
+--
+-- /See:/ 'machineTypesScopedListWarningDataItem' smart constructor.
+data MachineTypesScopedListWarningDataItem = MachineTypesScopedListWarningDataItem'
+    { _mtslwdiValue :: !(Maybe Text)
+    , _mtslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineTypesScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtslwdiValue'
+--
+-- * 'mtslwdiKey'
+machineTypesScopedListWarningDataItem
+    :: MachineTypesScopedListWarningDataItem
+machineTypesScopedListWarningDataItem =
+    MachineTypesScopedListWarningDataItem'
+    { _mtslwdiValue = Nothing
+    , _mtslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+mtslwdiValue :: Lens' MachineTypesScopedListWarningDataItem (Maybe Text)
+mtslwdiValue
+  = lens _mtslwdiValue (\ s a -> s{_mtslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+mtslwdiKey :: Lens' MachineTypesScopedListWarningDataItem (Maybe Text)
+mtslwdiKey
+  = lens _mtslwdiKey (\ s a -> s{_mtslwdiKey = a})
+
+instance FromJSON
+         MachineTypesScopedListWarningDataItem where
+        parseJSON
+          = withObject "MachineTypesScopedListWarningDataItem"
+              (\ o ->
+                 MachineTypesScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON MachineTypesScopedListWarningDataItem
+         where
+        toJSON MachineTypesScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _mtslwdiValue,
+                  ("key" .=) <$> _mtslwdiKey])
+
+--
+-- /See:/ 'diskTypesScopedListWarningDataItem' smart constructor.
+data DiskTypesScopedListWarningDataItem = DiskTypesScopedListWarningDataItem'
+    { _dtslwdiValue :: !(Maybe Text)
+    , _dtslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskTypesScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtslwdiValue'
+--
+-- * 'dtslwdiKey'
+diskTypesScopedListWarningDataItem
+    :: DiskTypesScopedListWarningDataItem
+diskTypesScopedListWarningDataItem =
+    DiskTypesScopedListWarningDataItem'
+    { _dtslwdiValue = Nothing
+    , _dtslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+dtslwdiValue :: Lens' DiskTypesScopedListWarningDataItem (Maybe Text)
+dtslwdiValue
+  = lens _dtslwdiValue (\ s a -> s{_dtslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+dtslwdiKey :: Lens' DiskTypesScopedListWarningDataItem (Maybe Text)
+dtslwdiKey
+  = lens _dtslwdiKey (\ s a -> s{_dtslwdiKey = a})
+
+instance FromJSON DiskTypesScopedListWarningDataItem
+         where
+        parseJSON
+          = withObject "DiskTypesScopedListWarningDataItem"
+              (\ o ->
+                 DiskTypesScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON DiskTypesScopedListWarningDataItem
+         where
+        toJSON DiskTypesScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _dtslwdiValue,
+                  ("key" .=) <$> _dtslwdiKey])
+
+-- | A TargetHttpProxy resource. This resource defines an HTTP proxy.
+--
+-- /See:/ 'targetHTTPProxy' smart constructor.
+data TargetHTTPProxy = TargetHTTPProxy'
+    { _thttppURLMap            :: !(Maybe Text)
+    , _thttppKind              :: !Text
+    , _thttppSelfLink          :: !(Maybe Text)
+    , _thttppName              :: !(Maybe Text)
+    , _thttppCreationTimestamp :: !(Maybe Text)
+    , _thttppId                :: !(Maybe (Textual Word64))
+    , _thttppDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetHTTPProxy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'thttppURLMap'
+--
+-- * 'thttppKind'
+--
+-- * 'thttppSelfLink'
+--
+-- * 'thttppName'
+--
+-- * 'thttppCreationTimestamp'
+--
+-- * 'thttppId'
+--
+-- * 'thttppDescription'
+targetHTTPProxy
+    :: TargetHTTPProxy
+targetHTTPProxy =
+    TargetHTTPProxy'
+    { _thttppURLMap = Nothing
+    , _thttppKind = "compute#targetHttpProxy"
+    , _thttppSelfLink = Nothing
+    , _thttppName = Nothing
+    , _thttppCreationTimestamp = Nothing
+    , _thttppId = Nothing
+    , _thttppDescription = Nothing
+    }
+
+-- | URL to the UrlMap resource that defines the mapping from URL to the
+-- BackendService.
+thttppURLMap :: Lens' TargetHTTPProxy (Maybe Text)
+thttppURLMap
+  = lens _thttppURLMap (\ s a -> s{_thttppURLMap = a})
+
+-- | [Output Only] Type of resource. Always compute#targetHttpProxy for
+-- target HTTP proxies.
+thttppKind :: Lens' TargetHTTPProxy Text
+thttppKind
+  = lens _thttppKind (\ s a -> s{_thttppKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+thttppSelfLink :: Lens' TargetHTTPProxy (Maybe Text)
+thttppSelfLink
+  = lens _thttppSelfLink
+      (\ s a -> s{_thttppSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+thttppName :: Lens' TargetHTTPProxy (Maybe Text)
+thttppName
+  = lens _thttppName (\ s a -> s{_thttppName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+thttppCreationTimestamp :: Lens' TargetHTTPProxy (Maybe Text)
+thttppCreationTimestamp
+  = lens _thttppCreationTimestamp
+      (\ s a -> s{_thttppCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+thttppId :: Lens' TargetHTTPProxy (Maybe Word64)
+thttppId
+  = lens _thttppId (\ s a -> s{_thttppId = a}) .
+      mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+thttppDescription :: Lens' TargetHTTPProxy (Maybe Text)
+thttppDescription
+  = lens _thttppDescription
+      (\ s a -> s{_thttppDescription = a})
+
+instance FromJSON TargetHTTPProxy where
+        parseJSON
+          = withObject "TargetHTTPProxy"
+              (\ o ->
+                 TargetHTTPProxy' <$>
+                   (o .:? "urlMap") <*>
+                     (o .:? "kind" .!= "compute#targetHttpProxy")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description"))
+
+instance ToJSON TargetHTTPProxy where
+        toJSON TargetHTTPProxy'{..}
+          = object
+              (catMaybes
+                 [("urlMap" .=) <$> _thttppURLMap,
+                  Just ("kind" .= _thttppKind),
+                  ("selfLink" .=) <$> _thttppSelfLink,
+                  ("name" .=) <$> _thttppName,
+                  ("creationTimestamp" .=) <$>
+                    _thttppCreationTimestamp,
+                  ("id" .=) <$> _thttppId,
+                  ("description" .=) <$> _thttppDescription])
+
+-- | A Machine Type resource.
+--
+-- /See:/ 'machineType' smart constructor.
+data MachineType = MachineType'
+    { _mtKind                         :: !Text
+    , _mtImageSpaceGb                 :: !(Maybe (Textual Int32))
+    , _mtZone                         :: !(Maybe Text)
+    , _mtSelfLink                     :: !(Maybe Text)
+    , _mtName                         :: !(Maybe Text)
+    , _mtCreationTimestamp            :: !(Maybe Text)
+    , _mtScratchDisks                 :: !(Maybe [MachineTypeScratchDisksItem])
+    , _mtId                           :: !(Maybe (Textual Word64))
+    , _mtGuestCPUs                    :: !(Maybe (Textual Int32))
+    , _mtMaximumPersistentDisksSizeGb :: !(Maybe (Textual Int64))
+    , _mtMaximumPersistentDisks       :: !(Maybe (Textual Int32))
+    , _mtMemoryMb                     :: !(Maybe (Textual Int32))
+    , _mtDescription                  :: !(Maybe Text)
+    , _mtDeprecated                   :: !(Maybe DeprecationStatus)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MachineType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtKind'
+--
+-- * 'mtImageSpaceGb'
+--
+-- * 'mtZone'
+--
+-- * 'mtSelfLink'
+--
+-- * 'mtName'
+--
+-- * 'mtCreationTimestamp'
+--
+-- * 'mtScratchDisks'
+--
+-- * 'mtId'
+--
+-- * 'mtGuestCPUs'
+--
+-- * 'mtMaximumPersistentDisksSizeGb'
+--
+-- * 'mtMaximumPersistentDisks'
+--
+-- * 'mtMemoryMb'
+--
+-- * 'mtDescription'
+--
+-- * 'mtDeprecated'
+machineType
+    :: MachineType
+machineType =
+    MachineType'
+    { _mtKind = "compute#machineType"
+    , _mtImageSpaceGb = Nothing
+    , _mtZone = Nothing
+    , _mtSelfLink = Nothing
+    , _mtName = Nothing
+    , _mtCreationTimestamp = Nothing
+    , _mtScratchDisks = Nothing
+    , _mtId = Nothing
+    , _mtGuestCPUs = Nothing
+    , _mtMaximumPersistentDisksSizeGb = Nothing
+    , _mtMaximumPersistentDisks = Nothing
+    , _mtMemoryMb = Nothing
+    , _mtDescription = Nothing
+    , _mtDeprecated = Nothing
+    }
+
+-- | [Output Only] The type of the resource. Always compute#machineType for
+-- machine types.
+mtKind :: Lens' MachineType Text
+mtKind = lens _mtKind (\ s a -> s{_mtKind = a})
+
+-- | [Deprecated] This property is deprecated and will never be populated
+-- with any relevant values.
+mtImageSpaceGb :: Lens' MachineType (Maybe Int32)
+mtImageSpaceGb
+  = lens _mtImageSpaceGb
+      (\ s a -> s{_mtImageSpaceGb = a})
+      . mapping _Coerce
+
+-- | [Output Only] The name of the zone where the machine type resides, such
+-- as us-central1-a.
+mtZone :: Lens' MachineType (Maybe Text)
+mtZone = lens _mtZone (\ s a -> s{_mtZone = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+mtSelfLink :: Lens' MachineType (Maybe Text)
+mtSelfLink
+  = lens _mtSelfLink (\ s a -> s{_mtSelfLink = a})
+
+-- | [Output Only] Name of the resource.
+mtName :: Lens' MachineType (Maybe Text)
+mtName = lens _mtName (\ s a -> s{_mtName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+mtCreationTimestamp :: Lens' MachineType (Maybe Text)
+mtCreationTimestamp
+  = lens _mtCreationTimestamp
+      (\ s a -> s{_mtCreationTimestamp = a})
+
+-- | [Output Only] List of extended scratch disks assigned to the instance.
+mtScratchDisks :: Lens' MachineType [MachineTypeScratchDisksItem]
+mtScratchDisks
+  = lens _mtScratchDisks
+      (\ s a -> s{_mtScratchDisks = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+mtId :: Lens' MachineType (Maybe Word64)
+mtId
+  = lens _mtId (\ s a -> s{_mtId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The number of virtual CPUs that are available to the
+-- instance.
+mtGuestCPUs :: Lens' MachineType (Maybe Int32)
+mtGuestCPUs
+  = lens _mtGuestCPUs (\ s a -> s{_mtGuestCPUs = a}) .
+      mapping _Coerce
+
+-- | [Output Only] Maximum total persistent disks size (GB) allowed.
+mtMaximumPersistentDisksSizeGb :: Lens' MachineType (Maybe Int64)
+mtMaximumPersistentDisksSizeGb
+  = lens _mtMaximumPersistentDisksSizeGb
+      (\ s a -> s{_mtMaximumPersistentDisksSizeGb = a})
+      . mapping _Coerce
+
+-- | [Output Only] Maximum persistent disks allowed.
+mtMaximumPersistentDisks :: Lens' MachineType (Maybe Int32)
+mtMaximumPersistentDisks
+  = lens _mtMaximumPersistentDisks
+      (\ s a -> s{_mtMaximumPersistentDisks = a})
+      . mapping _Coerce
+
+-- | [Output Only] The amount of physical memory available to the instance,
+-- defined in MB.
+mtMemoryMb :: Lens' MachineType (Maybe Int32)
+mtMemoryMb
+  = lens _mtMemoryMb (\ s a -> s{_mtMemoryMb = a}) .
+      mapping _Coerce
+
+-- | [Output Only] An optional textual description of the resource.
+mtDescription :: Lens' MachineType (Maybe Text)
+mtDescription
+  = lens _mtDescription
+      (\ s a -> s{_mtDescription = a})
+
+-- | [Output Only] The deprecation status associated with this machine type.
+mtDeprecated :: Lens' MachineType (Maybe DeprecationStatus)
+mtDeprecated
+  = lens _mtDeprecated (\ s a -> s{_mtDeprecated = a})
+
+instance FromJSON MachineType where
+        parseJSON
+          = withObject "MachineType"
+              (\ o ->
+                 MachineType' <$>
+                   (o .:? "kind" .!= "compute#machineType") <*>
+                     (o .:? "imageSpaceGb")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "scratchDisks" .!= mempty)
+                     <*> (o .:? "id")
+                     <*> (o .:? "guestCpus")
+                     <*> (o .:? "maximumPersistentDisksSizeGb")
+                     <*> (o .:? "maximumPersistentDisks")
+                     <*> (o .:? "memoryMb")
+                     <*> (o .:? "description")
+                     <*> (o .:? "deprecated"))
+
+instance ToJSON MachineType where
+        toJSON MachineType'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _mtKind),
+                  ("imageSpaceGb" .=) <$> _mtImageSpaceGb,
+                  ("zone" .=) <$> _mtZone,
+                  ("selfLink" .=) <$> _mtSelfLink,
+                  ("name" .=) <$> _mtName,
+                  ("creationTimestamp" .=) <$> _mtCreationTimestamp,
+                  ("scratchDisks" .=) <$> _mtScratchDisks,
+                  ("id" .=) <$> _mtId,
+                  ("guestCpus" .=) <$> _mtGuestCPUs,
+                  ("maximumPersistentDisksSizeGb" .=) <$>
+                    _mtMaximumPersistentDisksSizeGb,
+                  ("maximumPersistentDisks" .=) <$>
+                    _mtMaximumPersistentDisks,
+                  ("memoryMb" .=) <$> _mtMemoryMb,
+                  ("description" .=) <$> _mtDescription,
+                  ("deprecated" .=) <$> _mtDeprecated])
+
+-- | [Output Only] If errors are generated during processing of the
+-- operation, this field will be populated.
+--
+-- /See:/ 'operationError' smart constructor.
+newtype OperationError = OperationError'
+    { _oeErrors :: Maybe [OperationErrorErrorsItem]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oeErrors'
+operationError
+    :: OperationError
+operationError =
+    OperationError'
+    { _oeErrors = Nothing
+    }
+
+-- | [Output Only] The array of errors encountered while processing this
+-- operation.
+oeErrors :: Lens' OperationError [OperationErrorErrorsItem]
+oeErrors
+  = lens _oeErrors (\ s a -> s{_oeErrors = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON OperationError where
+        parseJSON
+          = withObject "OperationError"
+              (\ o ->
+                 OperationError' <$> (o .:? "errors" .!= mempty))
+
+instance ToJSON OperationError where
+        toJSON OperationError'{..}
+          = object (catMaybes [("errors" .=) <$> _oeErrors])
+
+-- | Informational warning which replaces the list of addresses when the list
+-- is empty.
+--
+-- /See:/ 'targetInstancesScopedListWarning' smart constructor.
+data TargetInstancesScopedListWarning = TargetInstancesScopedListWarning'
+    { _tislwData    :: !(Maybe [TargetInstancesScopedListWarningDataItem])
+    , _tislwCode    :: !(Maybe TargetInstancesScopedListWarningCode)
+    , _tislwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetInstancesScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tislwData'
+--
+-- * 'tislwCode'
+--
+-- * 'tislwMessage'
+targetInstancesScopedListWarning
+    :: TargetInstancesScopedListWarning
+targetInstancesScopedListWarning =
+    TargetInstancesScopedListWarning'
+    { _tislwData = Nothing
+    , _tislwCode = Nothing
+    , _tislwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+tislwData :: Lens' TargetInstancesScopedListWarning [TargetInstancesScopedListWarningDataItem]
+tislwData
+  = lens _tislwData (\ s a -> s{_tislwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+tislwCode :: Lens' TargetInstancesScopedListWarning (Maybe TargetInstancesScopedListWarningCode)
+tislwCode
+  = lens _tislwCode (\ s a -> s{_tislwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+tislwMessage :: Lens' TargetInstancesScopedListWarning (Maybe Text)
+tislwMessage
+  = lens _tislwMessage (\ s a -> s{_tislwMessage = a})
+
+instance FromJSON TargetInstancesScopedListWarning
+         where
+        parseJSON
+          = withObject "TargetInstancesScopedListWarning"
+              (\ o ->
+                 TargetInstancesScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON TargetInstancesScopedListWarning
+         where
+        toJSON TargetInstancesScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _tislwData,
+                  ("code" .=) <$> _tislwCode,
+                  ("message" .=) <$> _tislwMessage])
+
+--
+-- /See:/ 'subnetworkAggregatedList' smart constructor.
+data SubnetworkAggregatedList = SubnetworkAggregatedList'
+    { _salNextPageToken :: !(Maybe Text)
+    , _salKind          :: !Text
+    , _salItems         :: !(Maybe SubnetworkAggregatedListItems)
+    , _salSelfLink      :: !(Maybe Text)
+    , _salId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworkAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'salNextPageToken'
+--
+-- * 'salKind'
+--
+-- * 'salItems'
+--
+-- * 'salSelfLink'
+--
+-- * 'salId'
+subnetworkAggregatedList
+    :: SubnetworkAggregatedList
+subnetworkAggregatedList =
+    SubnetworkAggregatedList'
+    { _salNextPageToken = Nothing
+    , _salKind = "compute#subnetworkAggregatedList"
+    , _salItems = Nothing
+    , _salSelfLink = Nothing
+    , _salId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+salNextPageToken :: Lens' SubnetworkAggregatedList (Maybe Text)
+salNextPageToken
+  = lens _salNextPageToken
+      (\ s a -> s{_salNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#subnetworkAggregatedList
+-- for aggregated lists of subnetworks.
+salKind :: Lens' SubnetworkAggregatedList Text
+salKind = lens _salKind (\ s a -> s{_salKind = a})
+
+-- | [Output] A map of scoped Subnetwork lists.
+salItems :: Lens' SubnetworkAggregatedList (Maybe SubnetworkAggregatedListItems)
+salItems = lens _salItems (\ s a -> s{_salItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+salSelfLink :: Lens' SubnetworkAggregatedList (Maybe Text)
+salSelfLink
+  = lens _salSelfLink (\ s a -> s{_salSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+salId :: Lens' SubnetworkAggregatedList (Maybe Text)
+salId = lens _salId (\ s a -> s{_salId = a})
+
+instance FromJSON SubnetworkAggregatedList where
+        parseJSON
+          = withObject "SubnetworkAggregatedList"
+              (\ o ->
+                 SubnetworkAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#subnetworkAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON SubnetworkAggregatedList where
+        toJSON SubnetworkAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _salNextPageToken,
+                  Just ("kind" .= _salKind),
+                  ("items" .=) <$> _salItems,
+                  ("selfLink" .=) <$> _salSelfLink,
+                  ("id" .=) <$> _salId])
+
+--
+-- /See:/ 'disksResizeRequest' smart constructor.
+newtype DisksResizeRequest = DisksResizeRequest'
+    { _drrSizeGb :: Maybe (Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisksResizeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drrSizeGb'
+disksResizeRequest
+    :: DisksResizeRequest
+disksResizeRequest =
+    DisksResizeRequest'
+    { _drrSizeGb = Nothing
+    }
+
+-- | The new size of the persistent disk, which is specified in GB.
+drrSizeGb :: Lens' DisksResizeRequest (Maybe Int64)
+drrSizeGb
+  = lens _drrSizeGb (\ s a -> s{_drrSizeGb = a}) .
+      mapping _Coerce
+
+instance FromJSON DisksResizeRequest where
+        parseJSON
+          = withObject "DisksResizeRequest"
+              (\ o -> DisksResizeRequest' <$> (o .:? "sizeGb"))
+
+instance ToJSON DisksResizeRequest where
+        toJSON DisksResizeRequest'{..}
+          = object (catMaybes [("sizeGb" .=) <$> _drrSizeGb])
+
+--
+-- /See:/ 'autoscalersScopedListWarningDataItem' smart constructor.
+data AutoscalersScopedListWarningDataItem = AutoscalersScopedListWarningDataItem'
+    { _aValue :: !(Maybe Text)
+    , _aKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalersScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aValue'
+--
+-- * 'aKey'
+autoscalersScopedListWarningDataItem
+    :: AutoscalersScopedListWarningDataItem
+autoscalersScopedListWarningDataItem =
+    AutoscalersScopedListWarningDataItem'
+    { _aValue = Nothing
+    , _aKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+aValue :: Lens' AutoscalersScopedListWarningDataItem (Maybe Text)
+aValue = lens _aValue (\ s a -> s{_aValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+aKey :: Lens' AutoscalersScopedListWarningDataItem (Maybe Text)
+aKey = lens _aKey (\ s a -> s{_aKey = a})
+
+instance FromJSON
+         AutoscalersScopedListWarningDataItem where
+        parseJSON
+          = withObject "AutoscalersScopedListWarningDataItem"
+              (\ o ->
+                 AutoscalersScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON AutoscalersScopedListWarningDataItem
+         where
+        toJSON AutoscalersScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _aValue, ("key" .=) <$> _aKey])
+
+--
+-- /See:/ 'instanceGroupsListInstances' smart constructor.
+data InstanceGroupsListInstances = InstanceGroupsListInstances'
+    { _igliNextPageToken :: !(Maybe Text)
+    , _igliKind          :: !Text
+    , _igliItems         :: !(Maybe [InstanceWithNamedPorts])
+    , _igliSelfLink      :: !(Maybe Text)
+    , _igliId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsListInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igliNextPageToken'
+--
+-- * 'igliKind'
+--
+-- * 'igliItems'
+--
+-- * 'igliSelfLink'
+--
+-- * 'igliId'
+instanceGroupsListInstances
+    :: InstanceGroupsListInstances
+instanceGroupsListInstances =
+    InstanceGroupsListInstances'
+    { _igliNextPageToken = Nothing
+    , _igliKind = "compute#instanceGroupsListInstances"
+    , _igliItems = Nothing
+    , _igliSelfLink = Nothing
+    , _igliId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+igliNextPageToken :: Lens' InstanceGroupsListInstances (Maybe Text)
+igliNextPageToken
+  = lens _igliNextPageToken
+      (\ s a -> s{_igliNextPageToken = a})
+
+-- | [Output Only] The resource type, which is always
+-- compute#instanceGroupsListInstances for lists of instance groups.
+igliKind :: Lens' InstanceGroupsListInstances Text
+igliKind = lens _igliKind (\ s a -> s{_igliKind = a})
+
+-- | [Output Only] A list of instances and any named ports that are assigned
+-- to those instances.
+igliItems :: Lens' InstanceGroupsListInstances [InstanceWithNamedPorts]
+igliItems
+  = lens _igliItems (\ s a -> s{_igliItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The URL for this list of instance groups. The server
+-- generates this URL.
+igliSelfLink :: Lens' InstanceGroupsListInstances (Maybe Text)
+igliSelfLink
+  = lens _igliSelfLink (\ s a -> s{_igliSelfLink = a})
+
+-- | [Output Only] A unique identifier for this list of instance groups. The
+-- server generates this identifier.
+igliId :: Lens' InstanceGroupsListInstances (Maybe Text)
+igliId = lens _igliId (\ s a -> s{_igliId = a})
+
+instance FromJSON InstanceGroupsListInstances where
+        parseJSON
+          = withObject "InstanceGroupsListInstances"
+              (\ o ->
+                 InstanceGroupsListInstances' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#instanceGroupsListInstances")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceGroupsListInstances where
+        toJSON InstanceGroupsListInstances'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _igliNextPageToken,
+                  Just ("kind" .= _igliKind),
+                  ("items" .=) <$> _igliItems,
+                  ("selfLink" .=) <$> _igliSelfLink,
+                  ("id" .=) <$> _igliId])
+
+-- | Represents an Autoscaler resource. Autoscalers allow you to
+-- automatically scale virtual machine instances in managed instance groups
+-- according to an autoscaling policy that you define. For more
+-- information, read Autoscaling Groups of Instances.
+--
+-- /See:/ 'autoscaler' smart constructor.
+data Autoscaler = Autoscaler'
+    { _aaKind              :: !Text
+    , _aaZone              :: !(Maybe Text)
+    , _aaSelfLink          :: !(Maybe Text)
+    , _aaName              :: !(Maybe Text)
+    , _aaCreationTimestamp :: !(Maybe Text)
+    , _aaAutoscalingPolicy :: !(Maybe AutoscalingPolicy)
+    , _aaId                :: !(Maybe (Textual Word64))
+    , _aaDescription       :: !(Maybe Text)
+    , _aaTarget            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Autoscaler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaKind'
+--
+-- * 'aaZone'
+--
+-- * 'aaSelfLink'
+--
+-- * 'aaName'
+--
+-- * 'aaCreationTimestamp'
+--
+-- * 'aaAutoscalingPolicy'
+--
+-- * 'aaId'
+--
+-- * 'aaDescription'
+--
+-- * 'aaTarget'
+autoscaler
+    :: Autoscaler
+autoscaler =
+    Autoscaler'
+    { _aaKind = "compute#autoscaler"
+    , _aaZone = Nothing
+    , _aaSelfLink = Nothing
+    , _aaName = Nothing
+    , _aaCreationTimestamp = Nothing
+    , _aaAutoscalingPolicy = Nothing
+    , _aaId = Nothing
+    , _aaDescription = Nothing
+    , _aaTarget = Nothing
+    }
+
+-- | [Output Only] Type of the resource. Always compute#autoscaler for
+-- autoscalers.
+aaKind :: Lens' Autoscaler Text
+aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
+
+-- | [Output Only] URL of the zone where the instance group resides.
+aaZone :: Lens' Autoscaler (Maybe Text)
+aaZone = lens _aaZone (\ s a -> s{_aaZone = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+aaSelfLink :: Lens' Autoscaler (Maybe Text)
+aaSelfLink
+  = lens _aaSelfLink (\ s a -> s{_aaSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+aaName :: Lens' Autoscaler (Maybe Text)
+aaName = lens _aaName (\ s a -> s{_aaName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+aaCreationTimestamp :: Lens' Autoscaler (Maybe Text)
+aaCreationTimestamp
+  = lens _aaCreationTimestamp
+      (\ s a -> s{_aaCreationTimestamp = a})
+
+-- | The configuration parameters for the autoscaling algorithm. You can
+-- define one or more of the policies for an autoscaler: cpuUtilization,
+-- customMetricUtilizations, and loadBalancingUtilization. If none of these
+-- are specified, the default will be to autoscale based on cpuUtilization
+-- to 0.8 or 80%.
+aaAutoscalingPolicy :: Lens' Autoscaler (Maybe AutoscalingPolicy)
+aaAutoscalingPolicy
+  = lens _aaAutoscalingPolicy
+      (\ s a -> s{_aaAutoscalingPolicy = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+aaId :: Lens' Autoscaler (Maybe Word64)
+aaId
+  = lens _aaId (\ s a -> s{_aaId = a}) .
+      mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+aaDescription :: Lens' Autoscaler (Maybe Text)
+aaDescription
+  = lens _aaDescription
+      (\ s a -> s{_aaDescription = a})
+
+-- | URL of the managed instance group that this autoscaler will scale.
+aaTarget :: Lens' Autoscaler (Maybe Text)
+aaTarget = lens _aaTarget (\ s a -> s{_aaTarget = a})
+
+instance FromJSON Autoscaler where
+        parseJSON
+          = withObject "Autoscaler"
+              (\ o ->
+                 Autoscaler' <$>
+                   (o .:? "kind" .!= "compute#autoscaler") <*>
+                     (o .:? "zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "autoscalingPolicy")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description")
+                     <*> (o .:? "target"))
+
+instance ToJSON Autoscaler where
+        toJSON Autoscaler'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _aaKind), ("zone" .=) <$> _aaZone,
+                  ("selfLink" .=) <$> _aaSelfLink,
+                  ("name" .=) <$> _aaName,
+                  ("creationTimestamp" .=) <$> _aaCreationTimestamp,
+                  ("autoscalingPolicy" .=) <$> _aaAutoscalingPolicy,
+                  ("id" .=) <$> _aaId,
+                  ("description" .=) <$> _aaDescription,
+                  ("target" .=) <$> _aaTarget])
+
+-- | [Output Only] Informational warning which replaces the list of disks
+-- when the list is empty.
+--
+-- /See:/ 'disksScopedListWarning' smart constructor.
+data DisksScopedListWarning = DisksScopedListWarning'
+    { _dslwData    :: !(Maybe [DisksScopedListWarningDataItem])
+    , _dslwCode    :: !(Maybe DisksScopedListWarningCode)
+    , _dslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisksScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dslwData'
+--
+-- * 'dslwCode'
+--
+-- * 'dslwMessage'
+disksScopedListWarning
+    :: DisksScopedListWarning
+disksScopedListWarning =
+    DisksScopedListWarning'
+    { _dslwData = Nothing
+    , _dslwCode = Nothing
+    , _dslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+dslwData :: Lens' DisksScopedListWarning [DisksScopedListWarningDataItem]
+dslwData
+  = lens _dslwData (\ s a -> s{_dslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+dslwCode :: Lens' DisksScopedListWarning (Maybe DisksScopedListWarningCode)
+dslwCode = lens _dslwCode (\ s a -> s{_dslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+dslwMessage :: Lens' DisksScopedListWarning (Maybe Text)
+dslwMessage
+  = lens _dslwMessage (\ s a -> s{_dslwMessage = a})
+
+instance FromJSON DisksScopedListWarning where
+        parseJSON
+          = withObject "DisksScopedListWarning"
+              (\ o ->
+                 DisksScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON DisksScopedListWarning where
+        toJSON DisksScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _dslwData,
+                  ("code" .=) <$> _dslwCode,
+                  ("message" .=) <$> _dslwMessage])
+
+-- | A map of scoped target vpn gateway lists.
+--
+-- /See:/ 'targetVPNGatewayAggregatedListItems' smart constructor.
+newtype TargetVPNGatewayAggregatedListItems = TargetVPNGatewayAggregatedListItems'
+    { _tvgaliAddtional :: HashMap Text TargetVPNGatewaysScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGatewayAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvgaliAddtional'
+targetVPNGatewayAggregatedListItems
+    :: HashMap Text TargetVPNGatewaysScopedList -- ^ 'tvgaliAddtional'
+    -> TargetVPNGatewayAggregatedListItems
+targetVPNGatewayAggregatedListItems pTvgaliAddtional_ =
+    TargetVPNGatewayAggregatedListItems'
+    { _tvgaliAddtional = _Coerce # pTvgaliAddtional_
+    }
+
+-- | [Output Only] Name of the scope containing this set of target VPN
+-- gateways.
+tvgaliAddtional :: Lens' TargetVPNGatewayAggregatedListItems (HashMap Text TargetVPNGatewaysScopedList)
+tvgaliAddtional
+  = lens _tvgaliAddtional
+      (\ s a -> s{_tvgaliAddtional = a})
+      . _Coerce
+
+instance FromJSON TargetVPNGatewayAggregatedListItems
+         where
+        parseJSON
+          = withObject "TargetVPNGatewayAggregatedListItems"
+              (\ o ->
+                 TargetVPNGatewayAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON TargetVPNGatewayAggregatedListItems
+         where
+        toJSON = toJSON . _tvgaliAddtional
+
+-- | Informational warning which replaces the list of addresses when the list
+-- is empty.
+--
+-- /See:/ 'targetPoolsScopedListWarning' smart constructor.
+data TargetPoolsScopedListWarning = TargetPoolsScopedListWarning'
+    { _tpslwData    :: !(Maybe [TargetPoolsScopedListWarningDataItem])
+    , _tpslwCode    :: !(Maybe TargetPoolsScopedListWarningCode)
+    , _tpslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetPoolsScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpslwData'
+--
+-- * 'tpslwCode'
+--
+-- * 'tpslwMessage'
+targetPoolsScopedListWarning
+    :: TargetPoolsScopedListWarning
+targetPoolsScopedListWarning =
+    TargetPoolsScopedListWarning'
+    { _tpslwData = Nothing
+    , _tpslwCode = Nothing
+    , _tpslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+tpslwData :: Lens' TargetPoolsScopedListWarning [TargetPoolsScopedListWarningDataItem]
+tpslwData
+  = lens _tpslwData (\ s a -> s{_tpslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+tpslwCode :: Lens' TargetPoolsScopedListWarning (Maybe TargetPoolsScopedListWarningCode)
+tpslwCode
+  = lens _tpslwCode (\ s a -> s{_tpslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+tpslwMessage :: Lens' TargetPoolsScopedListWarning (Maybe Text)
+tpslwMessage
+  = lens _tpslwMessage (\ s a -> s{_tpslwMessage = a})
+
+instance FromJSON TargetPoolsScopedListWarning where
+        parseJSON
+          = withObject "TargetPoolsScopedListWarning"
+              (\ o ->
+                 TargetPoolsScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON TargetPoolsScopedListWarning where
+        toJSON TargetPoolsScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _tpslwData,
+                  ("code" .=) <$> _tpslwCode,
+                  ("message" .=) <$> _tpslwMessage])
+
+--
+-- /See:/ 'healthStatus' smart constructor.
+data HealthStatus = HealthStatus'
+    { _hsIPAddress   :: !(Maybe Text)
+    , _hsHealthState :: !(Maybe HealthStatusHealthState)
+    , _hsPort        :: !(Maybe (Textual Int32))
+    , _hsInstance    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HealthStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hsIPAddress'
+--
+-- * 'hsHealthState'
+--
+-- * 'hsPort'
+--
+-- * 'hsInstance'
+healthStatus
+    :: HealthStatus
+healthStatus =
+    HealthStatus'
+    { _hsIPAddress = Nothing
+    , _hsHealthState = Nothing
+    , _hsPort = Nothing
+    , _hsInstance = Nothing
+    }
+
+-- | The IP address represented by this resource.
+hsIPAddress :: Lens' HealthStatus (Maybe Text)
+hsIPAddress
+  = lens _hsIPAddress (\ s a -> s{_hsIPAddress = a})
+
+-- | Health state of the instance.
+hsHealthState :: Lens' HealthStatus (Maybe HealthStatusHealthState)
+hsHealthState
+  = lens _hsHealthState
+      (\ s a -> s{_hsHealthState = a})
+
+-- | The port on the instance.
+hsPort :: Lens' HealthStatus (Maybe Int32)
+hsPort
+  = lens _hsPort (\ s a -> s{_hsPort = a}) .
+      mapping _Coerce
+
+-- | URL of the instance resource.
+hsInstance :: Lens' HealthStatus (Maybe Text)
+hsInstance
+  = lens _hsInstance (\ s a -> s{_hsInstance = a})
+
+instance FromJSON HealthStatus where
+        parseJSON
+          = withObject "HealthStatus"
+              (\ o ->
+                 HealthStatus' <$>
+                   (o .:? "ipAddress") <*> (o .:? "healthState") <*>
+                     (o .:? "port")
+                     <*> (o .:? "instance"))
+
+instance ToJSON HealthStatus where
+        toJSON HealthStatus'{..}
+          = object
+              (catMaybes
+                 [("ipAddress" .=) <$> _hsIPAddress,
+                  ("healthState" .=) <$> _hsHealthState,
+                  ("port" .=) <$> _hsPort,
+                  ("instance" .=) <$> _hsInstance])
+
+-- | Region resource.
+--
+-- /See:/ 'region' smart constructor.
+data Region = Region'
+    { _rrStatus            :: !(Maybe RegionStatus)
+    , _rrZones             :: !(Maybe [Text])
+    , _rrKind              :: !Text
+    , _rrSelfLink          :: !(Maybe Text)
+    , _rrName              :: !(Maybe Text)
+    , _rrCreationTimestamp :: !(Maybe Text)
+    , _rrQuotas            :: !(Maybe [Quota])
+    , _rrId                :: !(Maybe (Textual Word64))
+    , _rrDescription       :: !(Maybe Text)
+    , _rrDeprecated        :: !(Maybe DeprecationStatus)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Region' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrStatus'
+--
+-- * 'rrZones'
+--
+-- * 'rrKind'
+--
+-- * 'rrSelfLink'
+--
+-- * 'rrName'
+--
+-- * 'rrCreationTimestamp'
+--
+-- * 'rrQuotas'
+--
+-- * 'rrId'
+--
+-- * 'rrDescription'
+--
+-- * 'rrDeprecated'
+region
+    :: Region
+region =
+    Region'
+    { _rrStatus = Nothing
+    , _rrZones = Nothing
+    , _rrKind = "compute#region"
+    , _rrSelfLink = Nothing
+    , _rrName = Nothing
+    , _rrCreationTimestamp = Nothing
+    , _rrQuotas = Nothing
+    , _rrId = Nothing
+    , _rrDescription = Nothing
+    , _rrDeprecated = Nothing
+    }
+
+-- | [Output Only] Status of the region, either UP or DOWN.
+rrStatus :: Lens' Region (Maybe RegionStatus)
+rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a})
+
+-- | [Output Only] A list of zones available in this region, in the form of
+-- resource URLs.
+rrZones :: Lens' Region [Text]
+rrZones
+  = lens _rrZones (\ s a -> s{_rrZones = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Type of the resource. Always compute#region for regions.
+rrKind :: Lens' Region Text
+rrKind = lens _rrKind (\ s a -> s{_rrKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+rrSelfLink :: Lens' Region (Maybe Text)
+rrSelfLink
+  = lens _rrSelfLink (\ s a -> s{_rrSelfLink = a})
+
+-- | [Output Only] Name of the resource.
+rrName :: Lens' Region (Maybe Text)
+rrName = lens _rrName (\ s a -> s{_rrName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+rrCreationTimestamp :: Lens' Region (Maybe Text)
+rrCreationTimestamp
+  = lens _rrCreationTimestamp
+      (\ s a -> s{_rrCreationTimestamp = a})
+
+-- | [Output Only] Quotas assigned to this region.
+rrQuotas :: Lens' Region [Quota]
+rrQuotas
+  = lens _rrQuotas (\ s a -> s{_rrQuotas = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+rrId :: Lens' Region (Maybe Word64)
+rrId
+  = lens _rrId (\ s a -> s{_rrId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] Textual description of the resource.
+rrDescription :: Lens' Region (Maybe Text)
+rrDescription
+  = lens _rrDescription
+      (\ s a -> s{_rrDescription = a})
+
+-- | [Output Only] The deprecation status associated with this region.
+rrDeprecated :: Lens' Region (Maybe DeprecationStatus)
+rrDeprecated
+  = lens _rrDeprecated (\ s a -> s{_rrDeprecated = a})
+
+instance FromJSON Region where
+        parseJSON
+          = withObject "Region"
+              (\ o ->
+                 Region' <$>
+                   (o .:? "status") <*> (o .:? "zones" .!= mempty) <*>
+                     (o .:? "kind" .!= "compute#region")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "quotas" .!= mempty)
+                     <*> (o .:? "id")
+                     <*> (o .:? "description")
+                     <*> (o .:? "deprecated"))
+
+instance ToJSON Region where
+        toJSON Region'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _rrStatus,
+                  ("zones" .=) <$> _rrZones, Just ("kind" .= _rrKind),
+                  ("selfLink" .=) <$> _rrSelfLink,
+                  ("name" .=) <$> _rrName,
+                  ("creationTimestamp" .=) <$> _rrCreationTimestamp,
+                  ("quotas" .=) <$> _rrQuotas, ("id" .=) <$> _rrId,
+                  ("description" .=) <$> _rrDescription,
+                  ("deprecated" .=) <$> _rrDeprecated])
+
+--
+-- /See:/ 'vpnTunnel' smart constructor.
+data VPNTunnel = VPNTunnel'
+    { _vtDetailedStatus       :: !(Maybe Text)
+    , _vtStatus               :: !(Maybe VPNTunnelStatus)
+    , _vtLocalTrafficSelector :: !(Maybe [Text])
+    , _vtKind                 :: !Text
+    , _vtPeerIP               :: !(Maybe Text)
+    , _vtTargetVPNGateway     :: !(Maybe Text)
+    , _vtSelfLink             :: !(Maybe Text)
+    , _vtSharedSecret         :: !(Maybe Text)
+    , _vtName                 :: !(Maybe Text)
+    , _vtCreationTimestamp    :: !(Maybe Text)
+    , _vtSharedSecretHash     :: !(Maybe Text)
+    , _vtId                   :: !(Maybe (Textual Word64))
+    , _vtIkeVersion           :: !(Maybe (Textual Int32))
+    , _vtRegion               :: !(Maybe Text)
+    , _vtDescription          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtDetailedStatus'
+--
+-- * 'vtStatus'
+--
+-- * 'vtLocalTrafficSelector'
+--
+-- * 'vtKind'
+--
+-- * 'vtPeerIP'
+--
+-- * 'vtTargetVPNGateway'
+--
+-- * 'vtSelfLink'
+--
+-- * 'vtSharedSecret'
+--
+-- * 'vtName'
+--
+-- * 'vtCreationTimestamp'
+--
+-- * 'vtSharedSecretHash'
+--
+-- * 'vtId'
+--
+-- * 'vtIkeVersion'
+--
+-- * 'vtRegion'
+--
+-- * 'vtDescription'
+vpnTunnel
+    :: VPNTunnel
+vpnTunnel =
+    VPNTunnel'
+    { _vtDetailedStatus = Nothing
+    , _vtStatus = Nothing
+    , _vtLocalTrafficSelector = Nothing
+    , _vtKind = "compute#vpnTunnel"
+    , _vtPeerIP = Nothing
+    , _vtTargetVPNGateway = Nothing
+    , _vtSelfLink = Nothing
+    , _vtSharedSecret = Nothing
+    , _vtName = Nothing
+    , _vtCreationTimestamp = Nothing
+    , _vtSharedSecretHash = Nothing
+    , _vtId = Nothing
+    , _vtIkeVersion = Nothing
+    , _vtRegion = Nothing
+    , _vtDescription = Nothing
+    }
+
+-- | [Output Only] Detailed status message for the VPN tunnel.
+vtDetailedStatus :: Lens' VPNTunnel (Maybe Text)
+vtDetailedStatus
+  = lens _vtDetailedStatus
+      (\ s a -> s{_vtDetailedStatus = a})
+
+-- | [Output Only] The status of the VPN tunnel.
+vtStatus :: Lens' VPNTunnel (Maybe VPNTunnelStatus)
+vtStatus = lens _vtStatus (\ s a -> s{_vtStatus = a})
+
+-- | Local traffic selector to use when establishing the VPN tunnel with peer
+-- VPN gateway. The value should be a CIDR formatted string, for example:
+-- 192.168.0.0\/16. The ranges should be disjoint.
+vtLocalTrafficSelector :: Lens' VPNTunnel [Text]
+vtLocalTrafficSelector
+  = lens _vtLocalTrafficSelector
+      (\ s a -> s{_vtLocalTrafficSelector = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Type of resource. Always compute#vpnTunnel for VPN
+-- tunnels.
+vtKind :: Lens' VPNTunnel Text
+vtKind = lens _vtKind (\ s a -> s{_vtKind = a})
+
+-- | IP address of the peer VPN gateway.
+vtPeerIP :: Lens' VPNTunnel (Maybe Text)
+vtPeerIP = lens _vtPeerIP (\ s a -> s{_vtPeerIP = a})
+
+-- | URL of the VPN gateway with which this VPN tunnel is associated.
+-- Provided by the client when the VPN tunnel is created.
+vtTargetVPNGateway :: Lens' VPNTunnel (Maybe Text)
+vtTargetVPNGateway
+  = lens _vtTargetVPNGateway
+      (\ s a -> s{_vtTargetVPNGateway = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+vtSelfLink :: Lens' VPNTunnel (Maybe Text)
+vtSelfLink
+  = lens _vtSelfLink (\ s a -> s{_vtSelfLink = a})
+
+-- | Shared secret used to set the secure session between the Cloud VPN
+-- gateway and the peer VPN gateway.
+vtSharedSecret :: Lens' VPNTunnel (Maybe Text)
+vtSharedSecret
+  = lens _vtSharedSecret
+      (\ s a -> s{_vtSharedSecret = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+vtName :: Lens' VPNTunnel (Maybe Text)
+vtName = lens _vtName (\ s a -> s{_vtName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+vtCreationTimestamp :: Lens' VPNTunnel (Maybe Text)
+vtCreationTimestamp
+  = lens _vtCreationTimestamp
+      (\ s a -> s{_vtCreationTimestamp = a})
+
+-- | Hash of the shared secret.
+vtSharedSecretHash :: Lens' VPNTunnel (Maybe Text)
+vtSharedSecretHash
+  = lens _vtSharedSecretHash
+      (\ s a -> s{_vtSharedSecretHash = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+vtId :: Lens' VPNTunnel (Maybe Word64)
+vtId
+  = lens _vtId (\ s a -> s{_vtId = a}) .
+      mapping _Coerce
+
+-- | IKE protocol version to use when establishing the VPN tunnel with peer
+-- VPN gateway. Acceptable IKE versions are 1 or 2. Default version is 2.
+vtIkeVersion :: Lens' VPNTunnel (Maybe Int32)
+vtIkeVersion
+  = lens _vtIkeVersion (\ s a -> s{_vtIkeVersion = a})
+      . mapping _Coerce
+
+-- | [Output Only] URL of the region where the VPN tunnel resides.
+vtRegion :: Lens' VPNTunnel (Maybe Text)
+vtRegion = lens _vtRegion (\ s a -> s{_vtRegion = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+vtDescription :: Lens' VPNTunnel (Maybe Text)
+vtDescription
+  = lens _vtDescription
+      (\ s a -> s{_vtDescription = a})
+
+instance FromJSON VPNTunnel where
+        parseJSON
+          = withObject "VPNTunnel"
+              (\ o ->
+                 VPNTunnel' <$>
+                   (o .:? "detailedStatus") <*> (o .:? "status") <*>
+                     (o .:? "localTrafficSelector" .!= mempty)
+                     <*> (o .:? "kind" .!= "compute#vpnTunnel")
+                     <*> (o .:? "peerIp")
+                     <*> (o .:? "targetVpnGateway")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "sharedSecret")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "sharedSecretHash")
+                     <*> (o .:? "id")
+                     <*> (o .:? "ikeVersion")
+                     <*> (o .:? "region")
+                     <*> (o .:? "description"))
+
+instance ToJSON VPNTunnel where
+        toJSON VPNTunnel'{..}
+          = object
+              (catMaybes
+                 [("detailedStatus" .=) <$> _vtDetailedStatus,
+                  ("status" .=) <$> _vtStatus,
+                  ("localTrafficSelector" .=) <$>
+                    _vtLocalTrafficSelector,
+                  Just ("kind" .= _vtKind),
+                  ("peerIp" .=) <$> _vtPeerIP,
+                  ("targetVpnGateway" .=) <$> _vtTargetVPNGateway,
+                  ("selfLink" .=) <$> _vtSelfLink,
+                  ("sharedSecret" .=) <$> _vtSharedSecret,
+                  ("name" .=) <$> _vtName,
+                  ("creationTimestamp" .=) <$> _vtCreationTimestamp,
+                  ("sharedSecretHash" .=) <$> _vtSharedSecretHash,
+                  ("id" .=) <$> _vtId,
+                  ("ikeVersion" .=) <$> _vtIkeVersion,
+                  ("region" .=) <$> _vtRegion,
+                  ("description" .=) <$> _vtDescription])
+
+-- | [Output Only] Informational warning which replaces the list of
+-- operations when the list is empty.
+--
+-- /See:/ 'operationsScopedListWarning' smart constructor.
+data OperationsScopedListWarning = OperationsScopedListWarning'
+    { _oslwData    :: !(Maybe [OperationsScopedListWarningDataItem])
+    , _oslwCode    :: !(Maybe OperationsScopedListWarningCode)
+    , _oslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationsScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oslwData'
+--
+-- * 'oslwCode'
+--
+-- * 'oslwMessage'
+operationsScopedListWarning
+    :: OperationsScopedListWarning
+operationsScopedListWarning =
+    OperationsScopedListWarning'
+    { _oslwData = Nothing
+    , _oslwCode = Nothing
+    , _oslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+oslwData :: Lens' OperationsScopedListWarning [OperationsScopedListWarningDataItem]
+oslwData
+  = lens _oslwData (\ s a -> s{_oslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+oslwCode :: Lens' OperationsScopedListWarning (Maybe OperationsScopedListWarningCode)
+oslwCode = lens _oslwCode (\ s a -> s{_oslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+oslwMessage :: Lens' OperationsScopedListWarning (Maybe Text)
+oslwMessage
+  = lens _oslwMessage (\ s a -> s{_oslwMessage = a})
+
+instance FromJSON OperationsScopedListWarning where
+        parseJSON
+          = withObject "OperationsScopedListWarning"
+              (\ o ->
+                 OperationsScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON OperationsScopedListWarning where
+        toJSON OperationsScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _oslwData,
+                  ("code" .=) <$> _oslwCode,
+                  ("message" .=) <$> _oslwMessage])
+
+-- | Sets the scheduling options for an Instance.
+--
+-- /See:/ 'scheduling' smart constructor.
+data Scheduling = Scheduling'
+    { _sAutomaticRestart  :: !(Maybe Bool)
+    , _sOnHostMaintenance :: !(Maybe SchedulingOnHostMaintenance)
+    , _sPreemptible       :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Scheduling' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sAutomaticRestart'
+--
+-- * 'sOnHostMaintenance'
+--
+-- * 'sPreemptible'
+scheduling
+    :: Scheduling
+scheduling =
+    Scheduling'
+    { _sAutomaticRestart = Nothing
+    , _sOnHostMaintenance = Nothing
+    , _sPreemptible = Nothing
+    }
+
+-- | Specifies whether the instance should be automatically restarted if it
+-- is terminated by Compute Engine (not terminated by a user). You can only
+-- set the automatic restart option for standard instances. Preemptible
+-- instances cannot be automatically restarted.
+sAutomaticRestart :: Lens' Scheduling (Maybe Bool)
+sAutomaticRestart
+  = lens _sAutomaticRestart
+      (\ s a -> s{_sAutomaticRestart = a})
+
+-- | Defines the maintenance behavior for this instance. For standard
+-- instances, the default behavior is MIGRATE. For preemptible instances,
+-- the default and only possible behavior is TERMINATE. For more
+-- information, see Setting Instance Scheduling Options.
+sOnHostMaintenance :: Lens' Scheduling (Maybe SchedulingOnHostMaintenance)
+sOnHostMaintenance
+  = lens _sOnHostMaintenance
+      (\ s a -> s{_sOnHostMaintenance = a})
+
+-- | Whether the instance is preemptible.
+sPreemptible :: Lens' Scheduling (Maybe Bool)
+sPreemptible
+  = lens _sPreemptible (\ s a -> s{_sPreemptible = a})
+
+instance FromJSON Scheduling where
+        parseJSON
+          = withObject "Scheduling"
+              (\ o ->
+                 Scheduling' <$>
+                   (o .:? "automaticRestart") <*>
+                     (o .:? "onHostMaintenance")
+                     <*> (o .:? "preemptible"))
+
+instance ToJSON Scheduling where
+        toJSON Scheduling'{..}
+          = object
+              (catMaybes
+                 [("automaticRestart" .=) <$> _sAutomaticRestart,
+                  ("onHostMaintenance" .=) <$> _sOnHostMaintenance,
+                  ("preemptible" .=) <$> _sPreemptible])
+
+--
+-- /See:/ 'vpnTunnelsScopedListWarningDataItem' smart constructor.
+data VPNTunnelsScopedListWarningDataItem = VPNTunnelsScopedListWarningDataItem'
+    { _vtslwdiValue :: !(Maybe Text)
+    , _vtslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnelsScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtslwdiValue'
+--
+-- * 'vtslwdiKey'
+vpnTunnelsScopedListWarningDataItem
+    :: VPNTunnelsScopedListWarningDataItem
+vpnTunnelsScopedListWarningDataItem =
+    VPNTunnelsScopedListWarningDataItem'
+    { _vtslwdiValue = Nothing
+    , _vtslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+vtslwdiValue :: Lens' VPNTunnelsScopedListWarningDataItem (Maybe Text)
+vtslwdiValue
+  = lens _vtslwdiValue (\ s a -> s{_vtslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+vtslwdiKey :: Lens' VPNTunnelsScopedListWarningDataItem (Maybe Text)
+vtslwdiKey
+  = lens _vtslwdiKey (\ s a -> s{_vtslwdiKey = a})
+
+instance FromJSON VPNTunnelsScopedListWarningDataItem
+         where
+        parseJSON
+          = withObject "VPNTunnelsScopedListWarningDataItem"
+              (\ o ->
+                 VPNTunnelsScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON VPNTunnelsScopedListWarningDataItem
+         where
+        toJSON VPNTunnelsScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _vtslwdiValue,
+                  ("key" .=) <$> _vtslwdiKey])
+
+-- | Contains a list of Subnetwork resources.
+--
+-- /See:/ 'subnetworkList' smart constructor.
+data SubnetworkList = SubnetworkList'
+    { _slNextPageToken :: !(Maybe Text)
+    , _slKind          :: !Text
+    , _slItems         :: !(Maybe [Subnetwork])
+    , _slSelfLink      :: !(Maybe Text)
+    , _slId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworkList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slNextPageToken'
+--
+-- * 'slKind'
+--
+-- * 'slItems'
+--
+-- * 'slSelfLink'
+--
+-- * 'slId'
+subnetworkList
+    :: SubnetworkList
+subnetworkList =
+    SubnetworkList'
+    { _slNextPageToken = Nothing
+    , _slKind = "compute#subnetworkList"
+    , _slItems = Nothing
+    , _slSelfLink = Nothing
+    , _slId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+slNextPageToken :: Lens' SubnetworkList (Maybe Text)
+slNextPageToken
+  = lens _slNextPageToken
+      (\ s a -> s{_slNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#subnetworkList for lists
+-- of subnetworks.
+slKind :: Lens' SubnetworkList Text
+slKind = lens _slKind (\ s a -> s{_slKind = a})
+
+-- | The Subnetwork resources.
+slItems :: Lens' SubnetworkList [Subnetwork]
+slItems
+  = lens _slItems (\ s a -> s{_slItems = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+slSelfLink :: Lens' SubnetworkList (Maybe Text)
+slSelfLink
+  = lens _slSelfLink (\ s a -> s{_slSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+slId :: Lens' SubnetworkList (Maybe Text)
+slId = lens _slId (\ s a -> s{_slId = a})
+
+instance FromJSON SubnetworkList where
+        parseJSON
+          = withObject "SubnetworkList"
+              (\ o ->
+                 SubnetworkList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#subnetworkList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON SubnetworkList where
+        toJSON SubnetworkList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _slNextPageToken,
+                  Just ("kind" .= _slKind), ("items" .=) <$> _slItems,
+                  ("selfLink" .=) <$> _slSelfLink,
+                  ("id" .=) <$> _slId])
+
+-- | Informational warning which replaces the list of forwarding rules when
+-- the list is empty.
+--
+-- /See:/ 'forwardingRulesScopedListWarning' smart constructor.
+data ForwardingRulesScopedListWarning = ForwardingRulesScopedListWarning'
+    { _frslwData    :: !(Maybe [ForwardingRulesScopedListWarningDataItem])
+    , _frslwCode    :: !(Maybe ForwardingRulesScopedListWarningCode)
+    , _frslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardingRulesScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frslwData'
+--
+-- * 'frslwCode'
+--
+-- * 'frslwMessage'
+forwardingRulesScopedListWarning
+    :: ForwardingRulesScopedListWarning
+forwardingRulesScopedListWarning =
+    ForwardingRulesScopedListWarning'
+    { _frslwData = Nothing
+    , _frslwCode = Nothing
+    , _frslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+frslwData :: Lens' ForwardingRulesScopedListWarning [ForwardingRulesScopedListWarningDataItem]
+frslwData
+  = lens _frslwData (\ s a -> s{_frslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+frslwCode :: Lens' ForwardingRulesScopedListWarning (Maybe ForwardingRulesScopedListWarningCode)
+frslwCode
+  = lens _frslwCode (\ s a -> s{_frslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+frslwMessage :: Lens' ForwardingRulesScopedListWarning (Maybe Text)
+frslwMessage
+  = lens _frslwMessage (\ s a -> s{_frslwMessage = a})
+
+instance FromJSON ForwardingRulesScopedListWarning
+         where
+        parseJSON
+          = withObject "ForwardingRulesScopedListWarning"
+              (\ o ->
+                 ForwardingRulesScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON ForwardingRulesScopedListWarning
+         where
+        toJSON ForwardingRulesScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _frslwData,
+                  ("code" .=) <$> _frslwCode,
+                  ("message" .=) <$> _frslwMessage])
+
+-- | Contains a list of HttpHealthCheck resources.
+--
+-- /See:/ 'hTTPHealthCheckList' smart constructor.
+data HTTPHealthCheckList = HTTPHealthCheckList'
+    { _httphclNextPageToken :: !(Maybe Text)
+    , _httphclKind          :: !Text
+    , _httphclItems         :: !(Maybe [HTTPHealthCheck])
+    , _httphclSelfLink      :: !(Maybe Text)
+    , _httphclId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPHealthCheckList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'httphclNextPageToken'
+--
+-- * 'httphclKind'
+--
+-- * 'httphclItems'
+--
+-- * 'httphclSelfLink'
+--
+-- * 'httphclId'
+hTTPHealthCheckList
+    :: HTTPHealthCheckList
+hTTPHealthCheckList =
+    HTTPHealthCheckList'
+    { _httphclNextPageToken = Nothing
+    , _httphclKind = "compute#httpHealthCheckList"
+    , _httphclItems = Nothing
+    , _httphclSelfLink = Nothing
+    , _httphclId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+httphclNextPageToken :: Lens' HTTPHealthCheckList (Maybe Text)
+httphclNextPageToken
+  = lens _httphclNextPageToken
+      (\ s a -> s{_httphclNextPageToken = a})
+
+-- | Type of resource.
+httphclKind :: Lens' HTTPHealthCheckList Text
+httphclKind
+  = lens _httphclKind (\ s a -> s{_httphclKind = a})
+
+-- | A list of HttpHealthCheck resources.
+httphclItems :: Lens' HTTPHealthCheckList [HTTPHealthCheck]
+httphclItems
+  = lens _httphclItems (\ s a -> s{_httphclItems = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+httphclSelfLink :: Lens' HTTPHealthCheckList (Maybe Text)
+httphclSelfLink
+  = lens _httphclSelfLink
+      (\ s a -> s{_httphclSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource. Defined by the server.
+httphclId :: Lens' HTTPHealthCheckList (Maybe Text)
+httphclId
+  = lens _httphclId (\ s a -> s{_httphclId = a})
+
+instance FromJSON HTTPHealthCheckList where
+        parseJSON
+          = withObject "HTTPHealthCheckList"
+              (\ o ->
+                 HTTPHealthCheckList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#httpHealthCheckList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON HTTPHealthCheckList where
+        toJSON HTTPHealthCheckList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _httphclNextPageToken,
+                  Just ("kind" .= _httphclKind),
+                  ("items" .=) <$> _httphclItems,
+                  ("selfLink" .=) <$> _httphclSelfLink,
+                  ("id" .=) <$> _httphclId])
+
+-- | [Output Only] The warning that replaces the list of managed instance
+-- groups when the list is empty.
+--
+-- /See:/ 'instanceGroupManagersScopedListWarning' smart constructor.
+data InstanceGroupManagersScopedListWarning = InstanceGroupManagersScopedListWarning'
+    { _igmslwData    :: !(Maybe [InstanceGroupManagersScopedListWarningDataItem])
+    , _igmslwCode    :: !(Maybe InstanceGroupManagersScopedListWarningCode)
+    , _igmslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmslwData'
+--
+-- * 'igmslwCode'
+--
+-- * 'igmslwMessage'
+instanceGroupManagersScopedListWarning
+    :: InstanceGroupManagersScopedListWarning
+instanceGroupManagersScopedListWarning =
+    InstanceGroupManagersScopedListWarning'
+    { _igmslwData = Nothing
+    , _igmslwCode = Nothing
+    , _igmslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+igmslwData :: Lens' InstanceGroupManagersScopedListWarning [InstanceGroupManagersScopedListWarningDataItem]
+igmslwData
+  = lens _igmslwData (\ s a -> s{_igmslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+igmslwCode :: Lens' InstanceGroupManagersScopedListWarning (Maybe InstanceGroupManagersScopedListWarningCode)
+igmslwCode
+  = lens _igmslwCode (\ s a -> s{_igmslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+igmslwMessage :: Lens' InstanceGroupManagersScopedListWarning (Maybe Text)
+igmslwMessage
+  = lens _igmslwMessage
+      (\ s a -> s{_igmslwMessage = a})
+
+instance FromJSON
+         InstanceGroupManagersScopedListWarning where
+        parseJSON
+          = withObject "InstanceGroupManagersScopedListWarning"
+              (\ o ->
+                 InstanceGroupManagersScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON
+         InstanceGroupManagersScopedListWarning where
+        toJSON InstanceGroupManagersScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _igmslwData,
+                  ("code" .=) <$> _igmslwCode,
+                  ("message" .=) <$> _igmslwMessage])
+
+--
+-- /See:/ 'urlMapsValidateRequest' smart constructor.
+newtype URLMapsValidateRequest = URLMapsValidateRequest'
+    { _umvrResource :: Maybe URLMap
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMapsValidateRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umvrResource'
+urlMapsValidateRequest
+    :: URLMapsValidateRequest
+urlMapsValidateRequest =
+    URLMapsValidateRequest'
+    { _umvrResource = Nothing
+    }
+
+-- | Content of the UrlMap to be validated.
+umvrResource :: Lens' URLMapsValidateRequest (Maybe URLMap)
+umvrResource
+  = lens _umvrResource (\ s a -> s{_umvrResource = a})
+
+instance FromJSON URLMapsValidateRequest where
+        parseJSON
+          = withObject "URLMapsValidateRequest"
+              (\ o ->
+                 URLMapsValidateRequest' <$> (o .:? "resource"))
+
+instance ToJSON URLMapsValidateRequest where
+        toJSON URLMapsValidateRequest'{..}
+          = object
+              (catMaybes [("resource" .=) <$> _umvrResource])
+
+--
+-- /See:/ 'instanceGroupManagersSetTargetPoolsRequest' smart constructor.
+data InstanceGroupManagersSetTargetPoolsRequest = InstanceGroupManagersSetTargetPoolsRequest'
+    { _igmstprFingerprint :: !(Maybe Base64)
+    , _igmstprTargetPools :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupManagersSetTargetPoolsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igmstprFingerprint'
+--
+-- * 'igmstprTargetPools'
+instanceGroupManagersSetTargetPoolsRequest
+    :: InstanceGroupManagersSetTargetPoolsRequest
+instanceGroupManagersSetTargetPoolsRequest =
+    InstanceGroupManagersSetTargetPoolsRequest'
+    { _igmstprFingerprint = Nothing
+    , _igmstprTargetPools = Nothing
+    }
+
+-- | The fingerprint of the target pools information. Use this optional
+-- property to prevent conflicts when multiple users change the target
+-- pools settings concurrently. Obtain the fingerprint with the
+-- instanceGroupManagers.get method. Then, include the fingerprint in your
+-- request to ensure that you do not overwrite changes that were applied
+-- from another concurrent request.
+igmstprFingerprint :: Lens' InstanceGroupManagersSetTargetPoolsRequest (Maybe ByteString)
+igmstprFingerprint
+  = lens _igmstprFingerprint
+      (\ s a -> s{_igmstprFingerprint = a})
+      . mapping _Base64
+
+-- | The list of target pool URLs that instances in this managed instance
+-- group belong to. The managed instance group applies these target pools
+-- to all of the instances in the group. Existing instances and new
+-- instances in the group all receive these target pool settings.
+igmstprTargetPools :: Lens' InstanceGroupManagersSetTargetPoolsRequest [Text]
+igmstprTargetPools
+  = lens _igmstprTargetPools
+      (\ s a -> s{_igmstprTargetPools = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         InstanceGroupManagersSetTargetPoolsRequest where
+        parseJSON
+          = withObject
+              "InstanceGroupManagersSetTargetPoolsRequest"
+              (\ o ->
+                 InstanceGroupManagersSetTargetPoolsRequest' <$>
+                   (o .:? "fingerprint") <*>
+                     (o .:? "targetPools" .!= mempty))
+
+instance ToJSON
+         InstanceGroupManagersSetTargetPoolsRequest where
+        toJSON
+          InstanceGroupManagersSetTargetPoolsRequest'{..}
+          = object
+              (catMaybes
+                 [("fingerprint" .=) <$> _igmstprFingerprint,
+                  ("targetPools" .=) <$> _igmstprTargetPools])
+
+-- | Contains a list of HttpsHealthCheck resources.
+--
+-- /See:/ 'httpsHealthCheckList' smart constructor.
+data HTTPSHealthCheckList = HTTPSHealthCheckList'
+    { _hhclNextPageToken :: !(Maybe Text)
+    , _hhclKind          :: !Text
+    , _hhclItems         :: !(Maybe [HTTPSHealthCheck])
+    , _hhclSelfLink      :: !(Maybe Text)
+    , _hhclId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPSHealthCheckList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hhclNextPageToken'
+--
+-- * 'hhclKind'
+--
+-- * 'hhclItems'
+--
+-- * 'hhclSelfLink'
+--
+-- * 'hhclId'
+httpsHealthCheckList
+    :: HTTPSHealthCheckList
+httpsHealthCheckList =
+    HTTPSHealthCheckList'
+    { _hhclNextPageToken = Nothing
+    , _hhclKind = "compute#httpsHealthCheckList"
+    , _hhclItems = Nothing
+    , _hhclSelfLink = Nothing
+    , _hhclId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+hhclNextPageToken :: Lens' HTTPSHealthCheckList (Maybe Text)
+hhclNextPageToken
+  = lens _hhclNextPageToken
+      (\ s a -> s{_hhclNextPageToken = a})
+
+-- | Type of resource.
+hhclKind :: Lens' HTTPSHealthCheckList Text
+hhclKind = lens _hhclKind (\ s a -> s{_hhclKind = a})
+
+-- | A list of HttpsHealthCheck resources.
+hhclItems :: Lens' HTTPSHealthCheckList [HTTPSHealthCheck]
+hhclItems
+  = lens _hhclItems (\ s a -> s{_hhclItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+hhclSelfLink :: Lens' HTTPSHealthCheckList (Maybe Text)
+hhclSelfLink
+  = lens _hhclSelfLink (\ s a -> s{_hhclSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource; defined by the server.
+hhclId :: Lens' HTTPSHealthCheckList (Maybe Text)
+hhclId = lens _hhclId (\ s a -> s{_hhclId = a})
+
+instance FromJSON HTTPSHealthCheckList where
+        parseJSON
+          = withObject "HTTPSHealthCheckList"
+              (\ o ->
+                 HTTPSHealthCheckList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#httpsHealthCheckList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON HTTPSHealthCheckList where
+        toJSON HTTPSHealthCheckList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _hhclNextPageToken,
+                  Just ("kind" .= _hhclKind),
+                  ("items" .=) <$> _hhclItems,
+                  ("selfLink" .=) <$> _hhclSelfLink,
+                  ("id" .=) <$> _hhclId])
+
+--
+-- /See:/ 'operationErrorErrorsItem' smart constructor.
+data OperationErrorErrorsItem = OperationErrorErrorsItem'
+    { _oeeiLocation :: !(Maybe Text)
+    , _oeeiCode     :: !(Maybe Text)
+    , _oeeiMessage  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationErrorErrorsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oeeiLocation'
+--
+-- * 'oeeiCode'
+--
+-- * 'oeeiMessage'
+operationErrorErrorsItem
+    :: OperationErrorErrorsItem
+operationErrorErrorsItem =
+    OperationErrorErrorsItem'
+    { _oeeiLocation = Nothing
+    , _oeeiCode = Nothing
+    , _oeeiMessage = Nothing
+    }
+
+-- | [Output Only] Indicates the field in the request that caused the error.
+-- This property is optional.
+oeeiLocation :: Lens' OperationErrorErrorsItem (Maybe Text)
+oeeiLocation
+  = lens _oeeiLocation (\ s a -> s{_oeeiLocation = a})
+
+-- | [Output Only] The error type identifier for this error.
+oeeiCode :: Lens' OperationErrorErrorsItem (Maybe Text)
+oeeiCode = lens _oeeiCode (\ s a -> s{_oeeiCode = a})
+
+-- | [Output Only] An optional, human-readable error message.
+oeeiMessage :: Lens' OperationErrorErrorsItem (Maybe Text)
+oeeiMessage
+  = lens _oeeiMessage (\ s a -> s{_oeeiMessage = a})
+
+instance FromJSON OperationErrorErrorsItem where
+        parseJSON
+          = withObject "OperationErrorErrorsItem"
+              (\ o ->
+                 OperationErrorErrorsItem' <$>
+                   (o .:? "location") <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON OperationErrorErrorsItem where
+        toJSON OperationErrorErrorsItem'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _oeeiLocation,
+                  ("code" .=) <$> _oeeiCode,
+                  ("message" .=) <$> _oeeiMessage])
+
+-- | A license resource.
+--
+-- /See:/ 'license' smart constructor.
+data License = License'
+    { _lChargesUseFee :: !(Maybe Bool)
+    , _lKind          :: !Text
+    , _lSelfLink      :: !(Maybe Text)
+    , _lName          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'License' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lChargesUseFee'
+--
+-- * 'lKind'
+--
+-- * 'lSelfLink'
+--
+-- * 'lName'
+license
+    :: License
+license =
+    License'
+    { _lChargesUseFee = Nothing
+    , _lKind = "compute#license"
+    , _lSelfLink = Nothing
+    , _lName = Nothing
+    }
+
+-- | [Output Only] If true, the customer will be charged license fee for
+-- running software that contains this license on an instance.
+lChargesUseFee :: Lens' License (Maybe Bool)
+lChargesUseFee
+  = lens _lChargesUseFee
+      (\ s a -> s{_lChargesUseFee = a})
+
+-- | [Output Only] Type of resource. Always compute#license for licenses.
+lKind :: Lens' License Text
+lKind = lens _lKind (\ s a -> s{_lKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+lSelfLink :: Lens' License (Maybe Text)
+lSelfLink
+  = lens _lSelfLink (\ s a -> s{_lSelfLink = a})
+
+-- | [Output Only] Name of the resource. The name is 1-63 characters long and
+-- complies with RFC1035.
+lName :: Lens' License (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a})
+
+instance FromJSON License where
+        parseJSON
+          = withObject "License"
+              (\ o ->
+                 License' <$>
+                   (o .:? "chargesUseFee") <*>
+                     (o .:? "kind" .!= "compute#license")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name"))
+
+instance ToJSON License where
+        toJSON License'{..}
+          = object
+              (catMaybes
+                 [("chargesUseFee" .=) <$> _lChargesUseFee,
+                  Just ("kind" .= _lKind),
+                  ("selfLink" .=) <$> _lSelfLink,
+                  ("name" .=) <$> _lName])
+
+-- | A path-matching rule for a URL. If matched, will use the specified
+-- BackendService to handle the traffic arriving at this URL.
+--
+-- /See:/ 'pathRule' smart constructor.
+data PathRule = PathRule'
+    { _prService :: !(Maybe Text)
+    , _prPaths   :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PathRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prService'
+--
+-- * 'prPaths'
+pathRule
+    :: PathRule
+pathRule =
+    PathRule'
+    { _prService = Nothing
+    , _prPaths = Nothing
+    }
+
+-- | The URL of the BackendService resource if this rule is matched.
+prService :: Lens' PathRule (Maybe Text)
+prService
+  = lens _prService (\ s a -> s{_prService = a})
+
+-- | The list of path patterns to match. Each must start with \/ and the only
+-- place a * is allowed is at the end following a \/. The string fed to the
+-- path matcher does not include any text after the first ? or #, and those
+-- chars are not allowed here.
+prPaths :: Lens' PathRule [Text]
+prPaths
+  = lens _prPaths (\ s a -> s{_prPaths = a}) . _Default
+      . _Coerce
+
+instance FromJSON PathRule where
+        parseJSON
+          = withObject "PathRule"
+              (\ o ->
+                 PathRule' <$>
+                   (o .:? "service") <*> (o .:? "paths" .!= mempty))
+
+instance ToJSON PathRule where
+        toJSON PathRule'{..}
+          = object
+              (catMaybes
+                 [("service" .=) <$> _prService,
+                  ("paths" .=) <$> _prPaths])
+
+-- | Contains a list of instances.
+--
+-- /See:/ 'instanceList' smart constructor.
+data InstanceList = InstanceList'
+    { _insNextPageToken :: !(Maybe Text)
+    , _insKind          :: !Text
+    , _insItems         :: !(Maybe [Instance])
+    , _insSelfLink      :: !(Maybe Text)
+    , _insId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'insNextPageToken'
+--
+-- * 'insKind'
+--
+-- * 'insItems'
+--
+-- * 'insSelfLink'
+--
+-- * 'insId'
+instanceList
+    :: InstanceList
+instanceList =
+    InstanceList'
+    { _insNextPageToken = Nothing
+    , _insKind = "compute#instanceList"
+    , _insItems = Nothing
+    , _insSelfLink = Nothing
+    , _insId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+insNextPageToken :: Lens' InstanceList (Maybe Text)
+insNextPageToken
+  = lens _insNextPageToken
+      (\ s a -> s{_insNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#instanceList for lists of
+-- Instance resources.
+insKind :: Lens' InstanceList Text
+insKind = lens _insKind (\ s a -> s{_insKind = a})
+
+-- | [Output Only] A list of instances.
+insItems :: Lens' InstanceList [Instance]
+insItems
+  = lens _insItems (\ s a -> s{_insItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+insSelfLink :: Lens' InstanceList (Maybe Text)
+insSelfLink
+  = lens _insSelfLink (\ s a -> s{_insSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+insId :: Lens' InstanceList (Maybe Text)
+insId = lens _insId (\ s a -> s{_insId = a})
+
+instance FromJSON InstanceList where
+        parseJSON
+          = withObject "InstanceList"
+              (\ o ->
+                 InstanceList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#instanceList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON InstanceList where
+        toJSON InstanceList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _insNextPageToken,
+                  Just ("kind" .= _insKind),
+                  ("items" .=) <$> _insItems,
+                  ("selfLink" .=) <$> _insSelfLink,
+                  ("id" .=) <$> _insId])
+
+-- | [Output] A map of scoped Subnetwork lists.
+--
+-- /See:/ 'subnetworkAggregatedListItems' smart constructor.
+newtype SubnetworkAggregatedListItems = SubnetworkAggregatedListItems'
+    { _saliAddtional :: HashMap Text SubnetworksScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworkAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saliAddtional'
+subnetworkAggregatedListItems
+    :: HashMap Text SubnetworksScopedList -- ^ 'saliAddtional'
+    -> SubnetworkAggregatedListItems
+subnetworkAggregatedListItems pSaliAddtional_ =
+    SubnetworkAggregatedListItems'
+    { _saliAddtional = _Coerce # pSaliAddtional_
+    }
+
+-- | Name of the scope containing this set of Subnetworks.
+saliAddtional :: Lens' SubnetworkAggregatedListItems (HashMap Text SubnetworksScopedList)
+saliAddtional
+  = lens _saliAddtional
+      (\ s a -> s{_saliAddtional = a})
+      . _Coerce
+
+instance FromJSON SubnetworkAggregatedListItems where
+        parseJSON
+          = withObject "SubnetworkAggregatedListItems"
+              (\ o ->
+                 SubnetworkAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON SubnetworkAggregatedListItems where
+        toJSON = toJSON . _saliAddtional
+
+--
+-- /See:/ 'managedInstanceLastAttempt' smart constructor.
+newtype ManagedInstanceLastAttempt = ManagedInstanceLastAttempt'
+    { _milaErrors :: Maybe ManagedInstanceLastAttemptErrors
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedInstanceLastAttempt' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'milaErrors'
+managedInstanceLastAttempt
+    :: ManagedInstanceLastAttempt
+managedInstanceLastAttempt =
+    ManagedInstanceLastAttempt'
+    { _milaErrors = Nothing
+    }
+
+-- | [Output Only] Encountered errors during the last attempt to create or
+-- delete the instance.
+milaErrors :: Lens' ManagedInstanceLastAttempt (Maybe ManagedInstanceLastAttemptErrors)
+milaErrors
+  = lens _milaErrors (\ s a -> s{_milaErrors = a})
+
+instance FromJSON ManagedInstanceLastAttempt where
+        parseJSON
+          = withObject "ManagedInstanceLastAttempt"
+              (\ o ->
+                 ManagedInstanceLastAttempt' <$> (o .:? "errors"))
+
+instance ToJSON ManagedInstanceLastAttempt where
+        toJSON ManagedInstanceLastAttempt'{..}
+          = object (catMaybes [("errors" .=) <$> _milaErrors])
+
+-- | Contains a list of BackendService resources.
+--
+-- /See:/ 'backendServiceList' smart constructor.
+data BackendServiceList = BackendServiceList'
+    { _bslNextPageToken :: !(Maybe Text)
+    , _bslKind          :: !Text
+    , _bslItems         :: !(Maybe [BackendService])
+    , _bslSelfLink      :: !(Maybe Text)
+    , _bslId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BackendServiceList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bslNextPageToken'
+--
+-- * 'bslKind'
+--
+-- * 'bslItems'
+--
+-- * 'bslSelfLink'
+--
+-- * 'bslId'
+backendServiceList
+    :: BackendServiceList
+backendServiceList =
+    BackendServiceList'
+    { _bslNextPageToken = Nothing
+    , _bslKind = "compute#backendServiceList"
+    , _bslItems = Nothing
+    , _bslSelfLink = Nothing
+    , _bslId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+bslNextPageToken :: Lens' BackendServiceList (Maybe Text)
+bslNextPageToken
+  = lens _bslNextPageToken
+      (\ s a -> s{_bslNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#backendServiceList for
+-- lists of backend services.
+bslKind :: Lens' BackendServiceList Text
+bslKind = lens _bslKind (\ s a -> s{_bslKind = a})
+
+-- | A list of BackendService resources.
+bslItems :: Lens' BackendServiceList [BackendService]
+bslItems
+  = lens _bslItems (\ s a -> s{_bslItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+bslSelfLink :: Lens' BackendServiceList (Maybe Text)
+bslSelfLink
+  = lens _bslSelfLink (\ s a -> s{_bslSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+bslId :: Lens' BackendServiceList (Maybe Text)
+bslId = lens _bslId (\ s a -> s{_bslId = a})
+
+instance FromJSON BackendServiceList where
+        parseJSON
+          = withObject "BackendServiceList"
+              (\ o ->
+                 BackendServiceList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#backendServiceList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON BackendServiceList where
+        toJSON BackendServiceList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _bslNextPageToken,
+                  Just ("kind" .= _bslKind),
+                  ("items" .=) <$> _bslItems,
+                  ("selfLink" .=) <$> _bslSelfLink,
+                  ("id" .=) <$> _bslId])
+
+-- | [Output Only] An informational warning that replaces the list of
+-- instance groups when the list is empty.
+--
+-- /See:/ 'instanceGroupsScopedListWarning' smart constructor.
+data InstanceGroupsScopedListWarning = InstanceGroupsScopedListWarning'
+    { _igslwData    :: !(Maybe [InstanceGroupsScopedListWarningDataItem])
+    , _igslwCode    :: !(Maybe InstanceGroupsScopedListWarningCode)
+    , _igslwMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsScopedListWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igslwData'
+--
+-- * 'igslwCode'
+--
+-- * 'igslwMessage'
+instanceGroupsScopedListWarning
+    :: InstanceGroupsScopedListWarning
+instanceGroupsScopedListWarning =
+    InstanceGroupsScopedListWarning'
+    { _igslwData = Nothing
+    , _igslwCode = Nothing
+    , _igslwMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+igslwData :: Lens' InstanceGroupsScopedListWarning [InstanceGroupsScopedListWarningDataItem]
+igslwData
+  = lens _igslwData (\ s a -> s{_igslwData = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+igslwCode :: Lens' InstanceGroupsScopedListWarning (Maybe InstanceGroupsScopedListWarningCode)
+igslwCode
+  = lens _igslwCode (\ s a -> s{_igslwCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+igslwMessage :: Lens' InstanceGroupsScopedListWarning (Maybe Text)
+igslwMessage
+  = lens _igslwMessage (\ s a -> s{_igslwMessage = a})
+
+instance FromJSON InstanceGroupsScopedListWarning
+         where
+        parseJSON
+          = withObject "InstanceGroupsScopedListWarning"
+              (\ o ->
+                 InstanceGroupsScopedListWarning' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON InstanceGroupsScopedListWarning where
+        toJSON InstanceGroupsScopedListWarning'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _igslwData,
+                  ("code" .=) <$> _igslwCode,
+                  ("message" .=) <$> _igslwMessage])
+
+-- | CPU utilization policy.
+--
+-- /See:/ 'autoscalingPolicyCPUUtilization' smart constructor.
+newtype AutoscalingPolicyCPUUtilization = AutoscalingPolicyCPUUtilization'
+    { _apcuUtilizationTarget :: Maybe (Textual Double)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutoscalingPolicyCPUUtilization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'apcuUtilizationTarget'
+autoscalingPolicyCPUUtilization
+    :: AutoscalingPolicyCPUUtilization
+autoscalingPolicyCPUUtilization =
+    AutoscalingPolicyCPUUtilization'
+    { _apcuUtilizationTarget = Nothing
+    }
+
+-- | The target CPU utilization that the autoscaler should maintain. Must be
+-- a float value in the range (0, 1]. If not specified, the default is 0.8.
+-- If the CPU level is below the target utilization, the autoscaler scales
+-- down the number of instances until it reaches the minimum number of
+-- instances you specified or until the average CPU of your instances
+-- reaches the target utilization. If the average CPU is above the target
+-- utilization, the autoscaler scales up until it reaches the maximum
+-- number of instances you specified or until the average utilization
+-- reaches the target utilization.
+apcuUtilizationTarget :: Lens' AutoscalingPolicyCPUUtilization (Maybe Double)
+apcuUtilizationTarget
+  = lens _apcuUtilizationTarget
+      (\ s a -> s{_apcuUtilizationTarget = a})
+      . mapping _Coerce
+
+instance FromJSON AutoscalingPolicyCPUUtilization
+         where
+        parseJSON
+          = withObject "AutoscalingPolicyCPUUtilization"
+              (\ o ->
+                 AutoscalingPolicyCPUUtilization' <$>
+                   (o .:? "utilizationTarget"))
+
+instance ToJSON AutoscalingPolicyCPUUtilization where
+        toJSON AutoscalingPolicyCPUUtilization'{..}
+          = object
+              (catMaybes
+                 [("utilizationTarget" .=) <$>
+                    _apcuUtilizationTarget])
+
+--
+-- /See:/ 'instanceGroupsScopedListWarningDataItem' smart constructor.
+data InstanceGroupsScopedListWarningDataItem = InstanceGroupsScopedListWarningDataItem'
+    { _igslwdiValue :: !(Maybe Text)
+    , _igslwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igslwdiValue'
+--
+-- * 'igslwdiKey'
+instanceGroupsScopedListWarningDataItem
+    :: InstanceGroupsScopedListWarningDataItem
+instanceGroupsScopedListWarningDataItem =
+    InstanceGroupsScopedListWarningDataItem'
+    { _igslwdiValue = Nothing
+    , _igslwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+igslwdiValue :: Lens' InstanceGroupsScopedListWarningDataItem (Maybe Text)
+igslwdiValue
+  = lens _igslwdiValue (\ s a -> s{_igslwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+igslwdiKey :: Lens' InstanceGroupsScopedListWarningDataItem (Maybe Text)
+igslwdiKey
+  = lens _igslwdiKey (\ s a -> s{_igslwdiKey = a})
+
+instance FromJSON
+         InstanceGroupsScopedListWarningDataItem where
+        parseJSON
+          = withObject
+              "InstanceGroupsScopedListWarningDataItem"
+              (\ o ->
+                 InstanceGroupsScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON
+         InstanceGroupsScopedListWarningDataItem where
+        toJSON InstanceGroupsScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _igslwdiValue,
+                  ("key" .=) <$> _igslwdiKey])
+
+--
+-- /See:/ 'resourceGroupReference' smart constructor.
+newtype ResourceGroupReference = ResourceGroupReference'
+    { _rgrGroup :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceGroupReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rgrGroup'
+resourceGroupReference
+    :: ResourceGroupReference
+resourceGroupReference =
+    ResourceGroupReference'
+    { _rgrGroup = Nothing
+    }
+
+-- | A URI referencing one of the resource views listed in the backend
+-- service.
+rgrGroup :: Lens' ResourceGroupReference (Maybe Text)
+rgrGroup = lens _rgrGroup (\ s a -> s{_rgrGroup = a})
+
+instance FromJSON ResourceGroupReference where
+        parseJSON
+          = withObject "ResourceGroupReference"
+              (\ o -> ResourceGroupReference' <$> (o .:? "group"))
+
+instance ToJSON ResourceGroupReference where
+        toJSON ResourceGroupReference'{..}
+          = object (catMaybes [("group" .=) <$> _rgrGroup])
+
+-- | Represents a Firewall resource.
+--
+-- /See:/ 'firewall' smart constructor.
+data Firewall = Firewall'
+    { _fSourceTags        :: !(Maybe [Text])
+    , _fKind              :: !Text
+    , _fTargetTags        :: !(Maybe [Text])
+    , _fNetwork           :: !(Maybe Text)
+    , _fSourceRanges      :: !(Maybe [Text])
+    , _fSelfLink          :: !(Maybe Text)
+    , _fName              :: !(Maybe Text)
+    , _fCreationTimestamp :: !(Maybe Text)
+    , _fId                :: !(Maybe (Textual Word64))
+    , _fAllowed           :: !(Maybe [FirewallAllowedItem])
+    , _fDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Firewall' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fSourceTags'
+--
+-- * 'fKind'
+--
+-- * 'fTargetTags'
+--
+-- * 'fNetwork'
+--
+-- * 'fSourceRanges'
+--
+-- * 'fSelfLink'
+--
+-- * 'fName'
+--
+-- * 'fCreationTimestamp'
+--
+-- * 'fId'
+--
+-- * 'fAllowed'
+--
+-- * 'fDescription'
+firewall
+    :: Firewall
+firewall =
+    Firewall'
+    { _fSourceTags = Nothing
+    , _fKind = "compute#firewall"
+    , _fTargetTags = Nothing
+    , _fNetwork = Nothing
+    , _fSourceRanges = Nothing
+    , _fSelfLink = Nothing
+    , _fName = Nothing
+    , _fCreationTimestamp = Nothing
+    , _fId = Nothing
+    , _fAllowed = Nothing
+    , _fDescription = Nothing
+    }
+
+-- | A list of instance tags which this rule applies to. One or both of
+-- sourceRanges and sourceTags may be set. If both properties are set, an
+-- inbound connection is allowed if the range matches the sourceRanges OR
+-- the tag of the source matches the sourceTags property. The connection
+-- does not need to match both properties. Source tags cannot be used to
+-- allow access to an instance\'s external IP address. Because tags are
+-- associated with an instance, not an IP address, source tags can only be
+-- used to control traffic traveling from an instance inside the same
+-- network as the firewall.
+fSourceTags :: Lens' Firewall [Text]
+fSourceTags
+  = lens _fSourceTags (\ s a -> s{_fSourceTags = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Ony] Type of the resource. Always compute#firewall for firewall
+-- rules.
+fKind :: Lens' Firewall Text
+fKind = lens _fKind (\ s a -> s{_fKind = a})
+
+-- | A list of instance tags indicating sets of instances located in the
+-- network that may make network connections as specified in allowed[]. If
+-- no targetTags are specified, the firewall rule applies to all instances
+-- on the specified network.
+fTargetTags :: Lens' Firewall [Text]
+fTargetTags
+  = lens _fTargetTags (\ s a -> s{_fTargetTags = a}) .
+      _Default
+      . _Coerce
+
+-- | URL of the network resource for this firewall rule. If not specified
+-- when creating a firewall rule, the default network is used:
+-- global\/networks\/default If you choose to specify this property, you
+-- can specify the network as a full or partial URL. For example, the
+-- following are all valid URLs: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/myproject\/global\/networks\/my-network
+-- - projects\/myproject\/global\/networks\/my-network -
+-- global\/networks\/default
+fNetwork :: Lens' Firewall (Maybe Text)
+fNetwork = lens _fNetwork (\ s a -> s{_fNetwork = a})
+
+-- | The IP address blocks that this rule applies to, expressed in CIDR
+-- format. One or both of sourceRanges and sourceTags may be set. If both
+-- properties are set, an inbound connection is allowed if the range
+-- matches the sourceRanges OR the tag of the source matches the sourceTags
+-- property. The connection does not need to match both properties.
+fSourceRanges :: Lens' Firewall [Text]
+fSourceRanges
+  = lens _fSourceRanges
+      (\ s a -> s{_fSourceRanges = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for the resource.
+fSelfLink :: Lens' Firewall (Maybe Text)
+fSelfLink
+  = lens _fSelfLink (\ s a -> s{_fSelfLink = a})
+
+-- | Name of the resource; provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+fName :: Lens' Firewall (Maybe Text)
+fName = lens _fName (\ s a -> s{_fName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+fCreationTimestamp :: Lens' Firewall (Maybe Text)
+fCreationTimestamp
+  = lens _fCreationTimestamp
+      (\ s a -> s{_fCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+fId :: Lens' Firewall (Maybe Word64)
+fId
+  = lens _fId (\ s a -> s{_fId = a}) . mapping _Coerce
+
+-- | The list of rules specified by this firewall. Each rule specifies a
+-- protocol and port-range tuple that describes a permitted connection.
+fAllowed :: Lens' Firewall [FirewallAllowedItem]
+fAllowed
+  = lens _fAllowed (\ s a -> s{_fAllowed = a}) .
+      _Default
+      . _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+fDescription :: Lens' Firewall (Maybe Text)
+fDescription
+  = lens _fDescription (\ s a -> s{_fDescription = a})
+
+instance FromJSON Firewall where
+        parseJSON
+          = withObject "Firewall"
+              (\ o ->
+                 Firewall' <$>
+                   (o .:? "sourceTags" .!= mempty) <*>
+                     (o .:? "kind" .!= "compute#firewall")
+                     <*> (o .:? "targetTags" .!= mempty)
+                     <*> (o .:? "network")
+                     <*> (o .:? "sourceRanges" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "allowed" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON Firewall where
+        toJSON Firewall'{..}
+          = object
+              (catMaybes
+                 [("sourceTags" .=) <$> _fSourceTags,
+                  Just ("kind" .= _fKind),
+                  ("targetTags" .=) <$> _fTargetTags,
+                  ("network" .=) <$> _fNetwork,
+                  ("sourceRanges" .=) <$> _fSourceRanges,
+                  ("selfLink" .=) <$> _fSelfLink,
+                  ("name" .=) <$> _fName,
+                  ("creationTimestamp" .=) <$> _fCreationTimestamp,
+                  ("id" .=) <$> _fId, ("allowed" .=) <$> _fAllowed,
+                  ("description" .=) <$> _fDescription])
+
+-- | UrlMaps A host-matching rule for a URL. If matched, will use the named
+-- PathMatcher to select the BackendService.
+--
+-- /See:/ 'hostRule' smart constructor.
+data HostRule = HostRule'
+    { _hrHosts       :: !(Maybe [Text])
+    , _hrDescription :: !(Maybe Text)
+    , _hrPathMatcher :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hrHosts'
+--
+-- * 'hrDescription'
+--
+-- * 'hrPathMatcher'
+hostRule
+    :: HostRule
+hostRule =
+    HostRule'
+    { _hrHosts = Nothing
+    , _hrDescription = Nothing
+    , _hrPathMatcher = Nothing
+    }
+
+-- | The list of host patterns to match. They must be valid hostnames, except
+-- * will match any string of ([a-z0-9-.]*). In that case, * must be the
+-- first character and must be followed in the pattern by either - or ..
+hrHosts :: Lens' HostRule [Text]
+hrHosts
+  = lens _hrHosts (\ s a -> s{_hrHosts = a}) . _Default
+      . _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+hrDescription :: Lens' HostRule (Maybe Text)
+hrDescription
+  = lens _hrDescription
+      (\ s a -> s{_hrDescription = a})
+
+-- | The name of the PathMatcher to use to match the path portion of the URL
+-- if the hostRule matches the URL\'s host portion.
+hrPathMatcher :: Lens' HostRule (Maybe Text)
+hrPathMatcher
+  = lens _hrPathMatcher
+      (\ s a -> s{_hrPathMatcher = a})
+
+instance FromJSON HostRule where
+        parseJSON
+          = withObject "HostRule"
+              (\ o ->
+                 HostRule' <$>
+                   (o .:? "hosts" .!= mempty) <*> (o .:? "description")
+                     <*> (o .:? "pathMatcher"))
+
+instance ToJSON HostRule where
+        toJSON HostRule'{..}
+          = object
+              (catMaybes
+                 [("hosts" .=) <$> _hrHosts,
+                  ("description" .=) <$> _hrDescription,
+                  ("pathMatcher" .=) <$> _hrPathMatcher])
+
+-- | A quotas entry.
+--
+-- /See:/ 'quota' smart constructor.
+data Quota = Quota'
+    { _qMetric :: !(Maybe QuotaMetric)
+    , _qLimit  :: !(Maybe (Textual Double))
+    , _qUsage  :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Quota' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qMetric'
+--
+-- * 'qLimit'
+--
+-- * 'qUsage'
+quota
+    :: Quota
+quota =
+    Quota'
+    { _qMetric = Nothing
+    , _qLimit = Nothing
+    , _qUsage = Nothing
+    }
+
+-- | [Output Only] Name of the quota metric.
+qMetric :: Lens' Quota (Maybe QuotaMetric)
+qMetric = lens _qMetric (\ s a -> s{_qMetric = a})
+
+-- | [Output Only] Quota limit for this metric.
+qLimit :: Lens' Quota (Maybe Double)
+qLimit
+  = lens _qLimit (\ s a -> s{_qLimit = a}) .
+      mapping _Coerce
+
+-- | [Output Only] Current usage of this metric.
+qUsage :: Lens' Quota (Maybe Double)
+qUsage
+  = lens _qUsage (\ s a -> s{_qUsage = a}) .
+      mapping _Coerce
+
+instance FromJSON Quota where
+        parseJSON
+          = withObject "Quota"
+              (\ o ->
+                 Quota' <$>
+                   (o .:? "metric") <*> (o .:? "limit") <*>
+                     (o .:? "usage"))
+
+instance ToJSON Quota where
+        toJSON Quota'{..}
+          = object
+              (catMaybes
+                 [("metric" .=) <$> _qMetric,
+                  ("limit" .=) <$> _qLimit, ("usage" .=) <$> _qUsage])
+
+--
+-- /See:/ 'instanceGroup' smart constructor.
+data InstanceGroup = InstanceGroup'
+    { _iiSize              :: !(Maybe (Textual Int32))
+    , _iiKind              :: !Text
+    , _iiFingerprint       :: !(Maybe Base64)
+    , _iiNetwork           :: !(Maybe Text)
+    , _iiZone              :: !(Maybe Text)
+    , _iiSelfLink          :: !(Maybe Text)
+    , _iiName              :: !(Maybe Text)
+    , _iiCreationTimestamp :: !(Maybe Text)
+    , _iiSubnetwork        :: !(Maybe Text)
+    , _iiId                :: !(Maybe (Textual Word64))
+    , _iiDescription       :: !(Maybe Text)
+    , _iiNamedPorts        :: !(Maybe [NamedPort])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iiSize'
+--
+-- * 'iiKind'
+--
+-- * 'iiFingerprint'
+--
+-- * 'iiNetwork'
+--
+-- * 'iiZone'
+--
+-- * 'iiSelfLink'
+--
+-- * 'iiName'
+--
+-- * 'iiCreationTimestamp'
+--
+-- * 'iiSubnetwork'
+--
+-- * 'iiId'
+--
+-- * 'iiDescription'
+--
+-- * 'iiNamedPorts'
+instanceGroup
+    :: InstanceGroup
+instanceGroup =
+    InstanceGroup'
+    { _iiSize = Nothing
+    , _iiKind = "compute#instanceGroup"
+    , _iiFingerprint = Nothing
+    , _iiNetwork = Nothing
+    , _iiZone = Nothing
+    , _iiSelfLink = Nothing
+    , _iiName = Nothing
+    , _iiCreationTimestamp = Nothing
+    , _iiSubnetwork = Nothing
+    , _iiId = Nothing
+    , _iiDescription = Nothing
+    , _iiNamedPorts = Nothing
+    }
+
+-- | [Output Only] The total number of instances in the instance group.
+iiSize :: Lens' InstanceGroup (Maybe Int32)
+iiSize
+  = lens _iiSize (\ s a -> s{_iiSize = a}) .
+      mapping _Coerce
+
+-- | [Output Only] The resource type, which is always compute#instanceGroup
+-- for instance groups.
+iiKind :: Lens' InstanceGroup Text
+iiKind = lens _iiKind (\ s a -> s{_iiKind = a})
+
+-- | [Output Only] The fingerprint of the named ports. The system uses this
+-- fingerprint to detect conflicts when multiple users change the named
+-- ports concurrently.
+iiFingerprint :: Lens' InstanceGroup (Maybe ByteString)
+iiFingerprint
+  = lens _iiFingerprint
+      (\ s a -> s{_iiFingerprint = a})
+      . mapping _Base64
+
+-- | The URL of the network to which all instances in the instance group
+-- belong.
+iiNetwork :: Lens' InstanceGroup (Maybe Text)
+iiNetwork
+  = lens _iiNetwork (\ s a -> s{_iiNetwork = a})
+
+-- | [Output Only] The URL of the zone where the instance group is located.
+iiZone :: Lens' InstanceGroup (Maybe Text)
+iiZone = lens _iiZone (\ s a -> s{_iiZone = a})
+
+-- | [Output Only] The URL for this instance group. The server generates this
+-- URL.
+iiSelfLink :: Lens' InstanceGroup (Maybe Text)
+iiSelfLink
+  = lens _iiSelfLink (\ s a -> s{_iiSelfLink = a})
+
+-- | The name of the instance group. The name must be 1-63 characters long,
+-- and comply with RFC1035.
+iiName :: Lens' InstanceGroup (Maybe Text)
+iiName = lens _iiName (\ s a -> s{_iiName = a})
+
+-- | [Output Only] The creation timestamp for this instance group in RFC3339
+-- text format.
+iiCreationTimestamp :: Lens' InstanceGroup (Maybe Text)
+iiCreationTimestamp
+  = lens _iiCreationTimestamp
+      (\ s a -> s{_iiCreationTimestamp = a})
+
+-- | The URL of the subnetwork to which all instances in the instance group
+-- belong.
+iiSubnetwork :: Lens' InstanceGroup (Maybe Text)
+iiSubnetwork
+  = lens _iiSubnetwork (\ s a -> s{_iiSubnetwork = a})
+
+-- | [Output Only] A unique identifier for this resource type. The server
+-- generates this identifier.
+iiId :: Lens' InstanceGroup (Maybe Word64)
+iiId
+  = lens _iiId (\ s a -> s{_iiId = a}) .
+      mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+iiDescription :: Lens' InstanceGroup (Maybe Text)
+iiDescription
+  = lens _iiDescription
+      (\ s a -> s{_iiDescription = a})
+
+-- | Assigns a name to a port number. For example: {name: \"http\", port: 80}
+-- This allows the system to reference ports by the assigned name instead
+-- of a port number. Named ports can also contain multiple ports. For
+-- example: [{name: \"http\", port: 80},{name: \"http\", port: 8080}] Named
+-- ports apply to all instances in this instance group.
+iiNamedPorts :: Lens' InstanceGroup [NamedPort]
+iiNamedPorts
+  = lens _iiNamedPorts (\ s a -> s{_iiNamedPorts = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstanceGroup where
+        parseJSON
+          = withObject "InstanceGroup"
+              (\ o ->
+                 InstanceGroup' <$>
+                   (o .:? "size") <*>
+                     (o .:? "kind" .!= "compute#instanceGroup")
+                     <*> (o .:? "fingerprint")
+                     <*> (o .:? "network")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "subnetwork")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description")
+                     <*> (o .:? "namedPorts" .!= mempty))
+
+instance ToJSON InstanceGroup where
+        toJSON InstanceGroup'{..}
+          = object
+              (catMaybes
+                 [("size" .=) <$> _iiSize, Just ("kind" .= _iiKind),
+                  ("fingerprint" .=) <$> _iiFingerprint,
+                  ("network" .=) <$> _iiNetwork,
+                  ("zone" .=) <$> _iiZone,
+                  ("selfLink" .=) <$> _iiSelfLink,
+                  ("name" .=) <$> _iiName,
+                  ("creationTimestamp" .=) <$> _iiCreationTimestamp,
+                  ("subnetwork" .=) <$> _iiSubnetwork,
+                  ("id" .=) <$> _iiId,
+                  ("description" .=) <$> _iiDescription,
+                  ("namedPorts" .=) <$> _iiNamedPorts])
+
+-- | Contains a list of Snapshot resources.
+--
+-- /See:/ 'snapshotList' smart constructor.
+data SnapshotList = SnapshotList'
+    { _snaNextPageToken :: !(Maybe Text)
+    , _snaKind          :: !Text
+    , _snaItems         :: !(Maybe [Snapshot])
+    , _snaSelfLink      :: !(Maybe Text)
+    , _snaId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SnapshotList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'snaNextPageToken'
+--
+-- * 'snaKind'
+--
+-- * 'snaItems'
+--
+-- * 'snaSelfLink'
+--
+-- * 'snaId'
+snapshotList
+    :: SnapshotList
+snapshotList =
+    SnapshotList'
+    { _snaNextPageToken = Nothing
+    , _snaKind = "compute#snapshotList"
+    , _snaItems = Nothing
+    , _snaSelfLink = Nothing
+    , _snaId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+snaNextPageToken :: Lens' SnapshotList (Maybe Text)
+snaNextPageToken
+  = lens _snaNextPageToken
+      (\ s a -> s{_snaNextPageToken = a})
+
+-- | Type of resource.
+snaKind :: Lens' SnapshotList Text
+snaKind = lens _snaKind (\ s a -> s{_snaKind = a})
+
+-- | [Output Only] A list of Snapshot resources.
+snaItems :: Lens' SnapshotList [Snapshot]
+snaItems
+  = lens _snaItems (\ s a -> s{_snaItems = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Server-defined URL for this resource.
+snaSelfLink :: Lens' SnapshotList (Maybe Text)
+snaSelfLink
+  = lens _snaSelfLink (\ s a -> s{_snaSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+snaId :: Lens' SnapshotList (Maybe Text)
+snaId = lens _snaId (\ s a -> s{_snaId = a})
+
+instance FromJSON SnapshotList where
+        parseJSON
+          = withObject "SnapshotList"
+              (\ o ->
+                 SnapshotList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#snapshotList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON SnapshotList where
+        toJSON SnapshotList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _snaNextPageToken,
+                  Just ("kind" .= _snaKind),
+                  ("items" .=) <$> _snaItems,
+                  ("selfLink" .=) <$> _snaSelfLink,
+                  ("id" .=) <$> _snaId])
+
+--
+-- /See:/ 'testFailure' smart constructor.
+data TestFailure = TestFailure'
+    { _tfPath            :: !(Maybe Text)
+    , _tfExpectedService :: !(Maybe Text)
+    , _tfHost            :: !(Maybe Text)
+    , _tfActualService   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TestFailure' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tfPath'
+--
+-- * 'tfExpectedService'
+--
+-- * 'tfHost'
+--
+-- * 'tfActualService'
+testFailure
+    :: TestFailure
+testFailure =
+    TestFailure'
+    { _tfPath = Nothing
+    , _tfExpectedService = Nothing
+    , _tfHost = Nothing
+    , _tfActualService = Nothing
+    }
+
+tfPath :: Lens' TestFailure (Maybe Text)
+tfPath = lens _tfPath (\ s a -> s{_tfPath = a})
+
+tfExpectedService :: Lens' TestFailure (Maybe Text)
+tfExpectedService
+  = lens _tfExpectedService
+      (\ s a -> s{_tfExpectedService = a})
+
+tfHost :: Lens' TestFailure (Maybe Text)
+tfHost = lens _tfHost (\ s a -> s{_tfHost = a})
+
+tfActualService :: Lens' TestFailure (Maybe Text)
+tfActualService
+  = lens _tfActualService
+      (\ s a -> s{_tfActualService = a})
+
+instance FromJSON TestFailure where
+        parseJSON
+          = withObject "TestFailure"
+              (\ o ->
+                 TestFailure' <$>
+                   (o .:? "path") <*> (o .:? "expectedService") <*>
+                     (o .:? "host")
+                     <*> (o .:? "actualService"))
+
+instance ToJSON TestFailure where
+        toJSON TestFailure'{..}
+          = object
+              (catMaybes
+                 [("path" .=) <$> _tfPath,
+                  ("expectedService" .=) <$> _tfExpectedService,
+                  ("host" .=) <$> _tfHost,
+                  ("actualService" .=) <$> _tfActualService])
+
+-- | An instance\'s serial console output.
+--
+-- /See:/ 'serialPortOutput' smart constructor.
+data SerialPortOutput = SerialPortOutput'
+    { _spoContents :: !(Maybe Text)
+    , _spoKind     :: !Text
+    , _spoSelfLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SerialPortOutput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spoContents'
+--
+-- * 'spoKind'
+--
+-- * 'spoSelfLink'
+serialPortOutput
+    :: SerialPortOutput
+serialPortOutput =
+    SerialPortOutput'
+    { _spoContents = Nothing
+    , _spoKind = "compute#serialPortOutput"
+    , _spoSelfLink = Nothing
+    }
+
+-- | [Output Only] The contents of the console output.
+spoContents :: Lens' SerialPortOutput (Maybe Text)
+spoContents
+  = lens _spoContents (\ s a -> s{_spoContents = a})
+
+-- | [Output Only] Type of the resource. Always compute#serialPortOutput for
+-- serial port output.
+spoKind :: Lens' SerialPortOutput Text
+spoKind = lens _spoKind (\ s a -> s{_spoKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+spoSelfLink :: Lens' SerialPortOutput (Maybe Text)
+spoSelfLink
+  = lens _spoSelfLink (\ s a -> s{_spoSelfLink = a})
+
+instance FromJSON SerialPortOutput where
+        parseJSON
+          = withObject "SerialPortOutput"
+              (\ o ->
+                 SerialPortOutput' <$>
+                   (o .:? "contents") <*>
+                     (o .:? "kind" .!= "compute#serialPortOutput")
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON SerialPortOutput where
+        toJSON SerialPortOutput'{..}
+          = object
+              (catMaybes
+                 [("contents" .=) <$> _spoContents,
+                  Just ("kind" .= _spoKind),
+                  ("selfLink" .=) <$> _spoSelfLink])
+
+--
+-- /See:/ 'targetVPNGatewayAggregatedList' smart constructor.
+data TargetVPNGatewayAggregatedList = TargetVPNGatewayAggregatedList'
+    { _tvgalNextPageToken :: !(Maybe Text)
+    , _tvgalKind          :: !Text
+    , _tvgalItems         :: !(Maybe TargetVPNGatewayAggregatedListItems)
+    , _tvgalSelfLink      :: !(Maybe Text)
+    , _tvgalId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGatewayAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvgalNextPageToken'
+--
+-- * 'tvgalKind'
+--
+-- * 'tvgalItems'
+--
+-- * 'tvgalSelfLink'
+--
+-- * 'tvgalId'
+targetVPNGatewayAggregatedList
+    :: TargetVPNGatewayAggregatedList
+targetVPNGatewayAggregatedList =
+    TargetVPNGatewayAggregatedList'
+    { _tvgalNextPageToken = Nothing
+    , _tvgalKind = "compute#targetVpnGatewayAggregatedList"
+    , _tvgalItems = Nothing
+    , _tvgalSelfLink = Nothing
+    , _tvgalId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+tvgalNextPageToken :: Lens' TargetVPNGatewayAggregatedList (Maybe Text)
+tvgalNextPageToken
+  = lens _tvgalNextPageToken
+      (\ s a -> s{_tvgalNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#targetVpnGateway for
+-- target VPN gateways.
+tvgalKind :: Lens' TargetVPNGatewayAggregatedList Text
+tvgalKind
+  = lens _tvgalKind (\ s a -> s{_tvgalKind = a})
+
+-- | A map of scoped target vpn gateway lists.
+tvgalItems :: Lens' TargetVPNGatewayAggregatedList (Maybe TargetVPNGatewayAggregatedListItems)
+tvgalItems
+  = lens _tvgalItems (\ s a -> s{_tvgalItems = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+tvgalSelfLink :: Lens' TargetVPNGatewayAggregatedList (Maybe Text)
+tvgalSelfLink
+  = lens _tvgalSelfLink
+      (\ s a -> s{_tvgalSelfLink = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+tvgalId :: Lens' TargetVPNGatewayAggregatedList (Maybe Text)
+tvgalId = lens _tvgalId (\ s a -> s{_tvgalId = a})
+
+instance FromJSON TargetVPNGatewayAggregatedList
+         where
+        parseJSON
+          = withObject "TargetVPNGatewayAggregatedList"
+              (\ o ->
+                 TargetVPNGatewayAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "compute#targetVpnGatewayAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON TargetVPNGatewayAggregatedList where
+        toJSON TargetVPNGatewayAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tvgalNextPageToken,
+                  Just ("kind" .= _tvgalKind),
+                  ("items" .=) <$> _tvgalItems,
+                  ("selfLink" .=) <$> _tvgalSelfLink,
+                  ("id" .=) <$> _tvgalId])
+
+--
+-- /See:/ 'metadataItemsItem' smart constructor.
+data MetadataItemsItem = MetadataItemsItem'
+    { _miiValue :: !(Maybe Text)
+    , _miiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetadataItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'miiValue'
+--
+-- * 'miiKey'
+metadataItemsItem
+    :: MetadataItemsItem
+metadataItemsItem =
+    MetadataItemsItem'
+    { _miiValue = Nothing
+    , _miiKey = Nothing
+    }
+
+-- | Value for the metadata entry. These are free-form strings, and only have
+-- meaning as interpreted by the image running in the instance. The only
+-- restriction placed on values is that their size must be less than or
+-- equal to 32768 bytes.
+miiValue :: Lens' MetadataItemsItem (Maybe Text)
+miiValue = lens _miiValue (\ s a -> s{_miiValue = a})
+
+-- | Key for the metadata entry. Keys must conform to the following regexp:
+-- [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected
+-- as part of a URL in the metadata server. Additionally, to avoid
+-- ambiguity, keys must not conflict with any other metadata keys for the
+-- project.
+miiKey :: Lens' MetadataItemsItem (Maybe Text)
+miiKey = lens _miiKey (\ s a -> s{_miiKey = a})
+
+instance FromJSON MetadataItemsItem where
+        parseJSON
+          = withObject "MetadataItemsItem"
+              (\ o ->
+                 MetadataItemsItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON MetadataItemsItem where
+        toJSON MetadataItemsItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _miiValue, ("key" .=) <$> _miiKey])
+
+-- | A TargetHttpsProxy resource. This resource defines an HTTPS proxy.
+--
+-- /See:/ 'targetHTTPSProxy' smart constructor.
+data TargetHTTPSProxy = TargetHTTPSProxy'
+    { _thpURLMap            :: !(Maybe Text)
+    , _thpSSLCertificates   :: !(Maybe [Text])
+    , _thpKind              :: !Text
+    , _thpSelfLink          :: !(Maybe Text)
+    , _thpName              :: !(Maybe Text)
+    , _thpCreationTimestamp :: !(Maybe Text)
+    , _thpId                :: !(Maybe (Textual Word64))
+    , _thpDescription       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetHTTPSProxy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'thpURLMap'
+--
+-- * 'thpSSLCertificates'
+--
+-- * 'thpKind'
+--
+-- * 'thpSelfLink'
+--
+-- * 'thpName'
+--
+-- * 'thpCreationTimestamp'
+--
+-- * 'thpId'
+--
+-- * 'thpDescription'
+targetHTTPSProxy
+    :: TargetHTTPSProxy
+targetHTTPSProxy =
+    TargetHTTPSProxy'
+    { _thpURLMap = Nothing
+    , _thpSSLCertificates = Nothing
+    , _thpKind = "compute#targetHttpsProxy"
+    , _thpSelfLink = Nothing
+    , _thpName = Nothing
+    , _thpCreationTimestamp = Nothing
+    , _thpId = Nothing
+    , _thpDescription = Nothing
+    }
+
+-- | A fully-qualified or valid partial URL to the UrlMap resource that
+-- defines the mapping from URL to the BackendService. For example, the
+-- following are all valid URLs for specifying a URL map: -
+-- https:\/\/www.googleapis.compute\/v1\/projects\/project\/global\/urlMaps\/url-map
+-- - projects\/project\/global\/urlMaps\/url-map - global\/urlMaps\/url-map
+thpURLMap :: Lens' TargetHTTPSProxy (Maybe Text)
+thpURLMap
+  = lens _thpURLMap (\ s a -> s{_thpURLMap = a})
+
+-- | URLs to SslCertificate resources that are used to authenticate
+-- connections between users and the load balancer. Currently, exactly one
+-- SSL certificate must be specified.
+thpSSLCertificates :: Lens' TargetHTTPSProxy [Text]
+thpSSLCertificates
+  = lens _thpSSLCertificates
+      (\ s a -> s{_thpSSLCertificates = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Type of resource. Always compute#targetHttpsProxy for
+-- target HTTPS proxies.
+thpKind :: Lens' TargetHTTPSProxy Text
+thpKind = lens _thpKind (\ s a -> s{_thpKind = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+thpSelfLink :: Lens' TargetHTTPSProxy (Maybe Text)
+thpSelfLink
+  = lens _thpSelfLink (\ s a -> s{_thpSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+thpName :: Lens' TargetHTTPSProxy (Maybe Text)
+thpName = lens _thpName (\ s a -> s{_thpName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+thpCreationTimestamp :: Lens' TargetHTTPSProxy (Maybe Text)
+thpCreationTimestamp
+  = lens _thpCreationTimestamp
+      (\ s a -> s{_thpCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+thpId :: Lens' TargetHTTPSProxy (Maybe Word64)
+thpId
+  = lens _thpId (\ s a -> s{_thpId = a}) .
+      mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+thpDescription :: Lens' TargetHTTPSProxy (Maybe Text)
+thpDescription
+  = lens _thpDescription
+      (\ s a -> s{_thpDescription = a})
+
+instance FromJSON TargetHTTPSProxy where
+        parseJSON
+          = withObject "TargetHTTPSProxy"
+              (\ o ->
+                 TargetHTTPSProxy' <$>
+                   (o .:? "urlMap") <*>
+                     (o .:? "sslCertificates" .!= mempty)
+                     <*> (o .:? "kind" .!= "compute#targetHttpsProxy")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description"))
+
+instance ToJSON TargetHTTPSProxy where
+        toJSON TargetHTTPSProxy'{..}
+          = object
+              (catMaybes
+                 [("urlMap" .=) <$> _thpURLMap,
+                  ("sslCertificates" .=) <$> _thpSSLCertificates,
+                  Just ("kind" .= _thpKind),
+                  ("selfLink" .=) <$> _thpSelfLink,
+                  ("name" .=) <$> _thpName,
+                  ("creationTimestamp" .=) <$> _thpCreationTimestamp,
+                  ("id" .=) <$> _thpId,
+                  ("description" .=) <$> _thpDescription])
+
+--
+-- /See:/ 'targetVPNGatewaysScopedList' smart constructor.
+data TargetVPNGatewaysScopedList = TargetVPNGatewaysScopedList'
+    { _tvgslTargetVPNGateways :: !(Maybe [TargetVPNGateway])
+    , _tvgslWarning           :: !(Maybe TargetVPNGatewaysScopedListWarning)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TargetVPNGatewaysScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvgslTargetVPNGateways'
+--
+-- * 'tvgslWarning'
+targetVPNGatewaysScopedList
+    :: TargetVPNGatewaysScopedList
+targetVPNGatewaysScopedList =
+    TargetVPNGatewaysScopedList'
+    { _tvgslTargetVPNGateways = Nothing
+    , _tvgslWarning = Nothing
+    }
+
+-- | [Output Only] List of target vpn gateways contained in this scope.
+tvgslTargetVPNGateways :: Lens' TargetVPNGatewaysScopedList [TargetVPNGateway]
+tvgslTargetVPNGateways
+  = lens _tvgslTargetVPNGateways
+      (\ s a -> s{_tvgslTargetVPNGateways = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Informational warning which replaces the list of addresses
+-- when the list is empty.
+tvgslWarning :: Lens' TargetVPNGatewaysScopedList (Maybe TargetVPNGatewaysScopedListWarning)
+tvgslWarning
+  = lens _tvgslWarning (\ s a -> s{_tvgslWarning = a})
+
+instance FromJSON TargetVPNGatewaysScopedList where
+        parseJSON
+          = withObject "TargetVPNGatewaysScopedList"
+              (\ o ->
+                 TargetVPNGatewaysScopedList' <$>
+                   (o .:? "targetVpnGateways" .!= mempty) <*>
+                     (o .:? "warning"))
+
+instance ToJSON TargetVPNGatewaysScopedList where
+        toJSON TargetVPNGatewaysScopedList'{..}
+          = object
+              (catMaybes
+                 [("targetVpnGateways" .=) <$>
+                    _tvgslTargetVPNGateways,
+                  ("warning" .=) <$> _tvgslWarning])
+
+-- | An access configuration attached to an instance\'s network interface.
+--
+-- /See:/ 'accessConfig' smart constructor.
+data AccessConfig = AccessConfig'
+    { _acKind  :: !Text
+    , _acName  :: !(Maybe Text)
+    , _acNATIP :: !(Maybe Text)
+    , _acType  :: !AccessConfigType
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AccessConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acKind'
+--
+-- * 'acName'
+--
+-- * 'acNATIP'
+--
+-- * 'acType'
+accessConfig
+    :: AccessConfig
+accessConfig =
+    AccessConfig'
+    { _acKind = "compute#accessConfig"
+    , _acName = Nothing
+    , _acNATIP = Nothing
+    , _acType = OneToOneNAT
+    }
+
+-- | [Output Only] Type of the resource. Always compute#accessConfig for
+-- access configs.
+acKind :: Lens' AccessConfig Text
+acKind = lens _acKind (\ s a -> s{_acKind = a})
+
+-- | Name of this access configuration.
+acName :: Lens' AccessConfig (Maybe Text)
+acName = lens _acName (\ s a -> s{_acName = a})
+
+-- | An external IP address associated with this instance. Specify an unused
+-- static external IP address available to the project or leave this field
+-- undefined to use an IP from a shared ephemeral IP address pool. If you
+-- specify a static external IP address, it must live in the same region as
+-- the zone of the instance.
+acNATIP :: Lens' AccessConfig (Maybe Text)
+acNATIP = lens _acNATIP (\ s a -> s{_acNATIP = a})
+
+-- | The type of configuration. The default and only option is
+-- ONE_TO_ONE_NAT.
+acType :: Lens' AccessConfig AccessConfigType
+acType = lens _acType (\ s a -> s{_acType = a})
+
+instance FromJSON AccessConfig where
+        parseJSON
+          = withObject "AccessConfig"
+              (\ o ->
+                 AccessConfig' <$>
+                   (o .:? "kind" .!= "compute#accessConfig") <*>
+                     (o .:? "name")
+                     <*> (o .:? "natIP")
+                     <*> (o .:? "type" .!= OneToOneNAT))
+
+instance ToJSON AccessConfig where
+        toJSON AccessConfig'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _acKind), ("name" .=) <$> _acName,
+                  ("natIP" .=) <$> _acNATIP, Just ("type" .= _acType)])
+
+--
+-- /See:/ 'managedInstanceLastAttemptErrorsErrorsItem' smart constructor.
+data ManagedInstanceLastAttemptErrorsErrorsItem = ManagedInstanceLastAttemptErrorsErrorsItem'
+    { _milaeeiLocation :: !(Maybe Text)
+    , _milaeeiCode     :: !(Maybe Text)
+    , _milaeeiMessage  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedInstanceLastAttemptErrorsErrorsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'milaeeiLocation'
+--
+-- * 'milaeeiCode'
+--
+-- * 'milaeeiMessage'
+managedInstanceLastAttemptErrorsErrorsItem
+    :: ManagedInstanceLastAttemptErrorsErrorsItem
+managedInstanceLastAttemptErrorsErrorsItem =
+    ManagedInstanceLastAttemptErrorsErrorsItem'
+    { _milaeeiLocation = Nothing
+    , _milaeeiCode = Nothing
+    , _milaeeiMessage = Nothing
+    }
+
+-- | [Output Only] Indicates the field in the request that caused the error.
+-- This property is optional.
+milaeeiLocation :: Lens' ManagedInstanceLastAttemptErrorsErrorsItem (Maybe Text)
+milaeeiLocation
+  = lens _milaeeiLocation
+      (\ s a -> s{_milaeeiLocation = a})
+
+-- | [Output Only] The error type identifier for this error.
+milaeeiCode :: Lens' ManagedInstanceLastAttemptErrorsErrorsItem (Maybe Text)
+milaeeiCode
+  = lens _milaeeiCode (\ s a -> s{_milaeeiCode = a})
+
+-- | [Output Only] An optional, human-readable error message.
+milaeeiMessage :: Lens' ManagedInstanceLastAttemptErrorsErrorsItem (Maybe Text)
+milaeeiMessage
+  = lens _milaeeiMessage
+      (\ s a -> s{_milaeeiMessage = a})
+
+instance FromJSON
+         ManagedInstanceLastAttemptErrorsErrorsItem where
+        parseJSON
+          = withObject
+              "ManagedInstanceLastAttemptErrorsErrorsItem"
+              (\ o ->
+                 ManagedInstanceLastAttemptErrorsErrorsItem' <$>
+                   (o .:? "location") <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON
+         ManagedInstanceLastAttemptErrorsErrorsItem where
+        toJSON
+          ManagedInstanceLastAttemptErrorsErrorsItem'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _milaeeiLocation,
+                  ("code" .=) <$> _milaeeiCode,
+                  ("message" .=) <$> _milaeeiMessage])
+
+--
+-- /See:/ 'instancesScopedListWarningDataItem' smart constructor.
+data InstancesScopedListWarningDataItem = InstancesScopedListWarningDataItem'
+    { _islwdiValue :: !(Maybe Text)
+    , _islwdiKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstancesScopedListWarningDataItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'islwdiValue'
+--
+-- * 'islwdiKey'
+instancesScopedListWarningDataItem
+    :: InstancesScopedListWarningDataItem
+instancesScopedListWarningDataItem =
+    InstancesScopedListWarningDataItem'
+    { _islwdiValue = Nothing
+    , _islwdiKey = Nothing
+    }
+
+-- | [Output Only] A warning data value corresponding to the key.
+islwdiValue :: Lens' InstancesScopedListWarningDataItem (Maybe Text)
+islwdiValue
+  = lens _islwdiValue (\ s a -> s{_islwdiValue = a})
+
+-- | [Output Only] A key that provides more detail on the warning being
+-- returned. For example, for warnings where there are no results in a list
+-- request for a particular zone, this key might be scope and the key value
+-- might be the zone name. Other examples might be a key indicating a
+-- deprecated resource and a suggested replacement, or a warning about
+-- invalid network settings (for example, if an instance attempts to
+-- perform IP forwarding but is not enabled for IP forwarding).
+islwdiKey :: Lens' InstancesScopedListWarningDataItem (Maybe Text)
+islwdiKey
+  = lens _islwdiKey (\ s a -> s{_islwdiKey = a})
+
+instance FromJSON InstancesScopedListWarningDataItem
+         where
+        parseJSON
+          = withObject "InstancesScopedListWarningDataItem"
+              (\ o ->
+                 InstancesScopedListWarningDataItem' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON InstancesScopedListWarningDataItem
+         where
+        toJSON InstancesScopedListWarningDataItem'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _islwdiValue,
+                  ("key" .=) <$> _islwdiKey])
+
+-- | A BackendService resource. This resource defines a group of backend
+-- virtual machines and their serving capacity.
+--
+-- /See:/ 'backendService' smart constructor.
+data BackendService = BackendService'
+    { _bsBackends          :: !(Maybe [Backend])
+    , _bsKind              :: !Text
+    , _bsFingerprint       :: !(Maybe Base64)
+    , _bsProtocol          :: !(Maybe BackendServiceProtocol)
+    , _bsSelfLink          :: !(Maybe Text)
+    , _bsName              :: !(Maybe Text)
+    , _bsCreationTimestamp :: !(Maybe Text)
+    , _bsId                :: !(Maybe (Textual Word64))
+    , _bsRegion            :: !(Maybe Text)
+    , _bsTimeoutSec        :: !(Maybe (Textual Int32))
+    , _bsDescription       :: !(Maybe Text)
+    , _bsPortName          :: !(Maybe Text)
+    , _bsHealthChecks      :: !(Maybe [Text])
+    , _bsPort              :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BackendService' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsBackends'
+--
+-- * 'bsKind'
+--
+-- * 'bsFingerprint'
+--
+-- * 'bsProtocol'
+--
+-- * 'bsSelfLink'
+--
+-- * 'bsName'
+--
+-- * 'bsCreationTimestamp'
+--
+-- * 'bsId'
+--
+-- * 'bsRegion'
+--
+-- * 'bsTimeoutSec'
+--
+-- * 'bsDescription'
+--
+-- * 'bsPortName'
+--
+-- * 'bsHealthChecks'
+--
+-- * 'bsPort'
+backendService
+    :: BackendService
+backendService =
+    BackendService'
+    { _bsBackends = Nothing
+    , _bsKind = "compute#backendService"
+    , _bsFingerprint = Nothing
+    , _bsProtocol = Nothing
+    , _bsSelfLink = Nothing
+    , _bsName = Nothing
+    , _bsCreationTimestamp = Nothing
+    , _bsId = Nothing
+    , _bsRegion = Nothing
+    , _bsTimeoutSec = Nothing
+    , _bsDescription = Nothing
+    , _bsPortName = Nothing
+    , _bsHealthChecks = Nothing
+    , _bsPort = Nothing
+    }
+
+-- | The list of backends that serve this BackendService.
+bsBackends :: Lens' BackendService [Backend]
+bsBackends
+  = lens _bsBackends (\ s a -> s{_bsBackends = a}) .
+      _Default
+      . _Coerce
+
+-- | [Output Only] Type of resource. Always compute#backendService for
+-- backend services.
+bsKind :: Lens' BackendService Text
+bsKind = lens _bsKind (\ s a -> s{_bsKind = a})
+
+-- | Fingerprint of this resource. A hash of the contents stored in this
+-- object. This field is used in optimistic locking. This field will be
+-- ignored when inserting a BackendService. An up-to-date fingerprint must
+-- be provided in order to update the BackendService.
+bsFingerprint :: Lens' BackendService (Maybe ByteString)
+bsFingerprint
+  = lens _bsFingerprint
+      (\ s a -> s{_bsFingerprint = a})
+      . mapping _Base64
+
+-- | The protocol this BackendService uses to communicate with backends.
+-- Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
+bsProtocol :: Lens' BackendService (Maybe BackendServiceProtocol)
+bsProtocol
+  = lens _bsProtocol (\ s a -> s{_bsProtocol = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+bsSelfLink :: Lens' BackendService (Maybe Text)
+bsSelfLink
+  = lens _bsSelfLink (\ s a -> s{_bsSelfLink = a})
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+bsName :: Lens' BackendService (Maybe Text)
+bsName = lens _bsName (\ s a -> s{_bsName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+bsCreationTimestamp :: Lens' BackendService (Maybe Text)
+bsCreationTimestamp
+  = lens _bsCreationTimestamp
+      (\ s a -> s{_bsCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+bsId :: Lens' BackendService (Maybe Word64)
+bsId
+  = lens _bsId (\ s a -> s{_bsId = a}) .
+      mapping _Coerce
+
+-- | [Output Only] URL of the region where the regional backend service
+-- resides. This field is not applicable to global backend services.
+bsRegion :: Lens' BackendService (Maybe Text)
+bsRegion = lens _bsRegion (\ s a -> s{_bsRegion = a})
+
+-- | How many seconds to wait for the backend before considering it a failed
+-- request. Default is 30 seconds.
+bsTimeoutSec :: Lens' BackendService (Maybe Int32)
+bsTimeoutSec
+  = lens _bsTimeoutSec (\ s a -> s{_bsTimeoutSec = a})
+      . mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+bsDescription :: Lens' BackendService (Maybe Text)
+bsDescription
+  = lens _bsDescription
+      (\ s a -> s{_bsDescription = a})
+
+-- | Name of backend port. The same name should appear in the instance groups
+-- referenced by this service. Required.
+bsPortName :: Lens' BackendService (Maybe Text)
+bsPortName
+  = lens _bsPortName (\ s a -> s{_bsPortName = a})
+
+-- | The list of URLs to the HttpHealthCheck or HttpsHealthCheck resource for
+-- health checking this BackendService. Currently at most one health check
+-- can be specified, and a health check is required.
+bsHealthChecks :: Lens' BackendService [Text]
+bsHealthChecks
+  = lens _bsHealthChecks
+      (\ s a -> s{_bsHealthChecks = a})
+      . _Default
+      . _Coerce
+
+-- | Deprecated in favor of portName. The TCP port to connect on the backend.
+-- The default value is 80.
+bsPort :: Lens' BackendService (Maybe Int32)
+bsPort
+  = lens _bsPort (\ s a -> s{_bsPort = a}) .
+      mapping _Coerce
+
+instance FromJSON BackendService where
+        parseJSON
+          = withObject "BackendService"
+              (\ o ->
+                 BackendService' <$>
+                   (o .:? "backends" .!= mempty) <*>
+                     (o .:? "kind" .!= "compute#backendService")
+                     <*> (o .:? "fingerprint")
+                     <*> (o .:? "protocol")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "region")
+                     <*> (o .:? "timeoutSec")
+                     <*> (o .:? "description")
+                     <*> (o .:? "portName")
+                     <*> (o .:? "healthChecks" .!= mempty)
+                     <*> (o .:? "port"))
+
+instance ToJSON BackendService where
+        toJSON BackendService'{..}
+          = object
+              (catMaybes
+                 [("backends" .=) <$> _bsBackends,
+                  Just ("kind" .= _bsKind),
+                  ("fingerprint" .=) <$> _bsFingerprint,
+                  ("protocol" .=) <$> _bsProtocol,
+                  ("selfLink" .=) <$> _bsSelfLink,
+                  ("name" .=) <$> _bsName,
+                  ("creationTimestamp" .=) <$> _bsCreationTimestamp,
+                  ("id" .=) <$> _bsId, ("region" .=) <$> _bsRegion,
+                  ("timeoutSec" .=) <$> _bsTimeoutSec,
+                  ("description" .=) <$> _bsDescription,
+                  ("portName" .=) <$> _bsPortName,
+                  ("healthChecks" .=) <$> _bsHealthChecks,
+                  ("port" .=) <$> _bsPort])
+
+--
+-- /See:/ 'instanceMoveRequest' smart constructor.
+data InstanceMoveRequest = InstanceMoveRequest'
+    { _imrTargetInstance  :: !(Maybe Text)
+    , _imrDestinationZone :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceMoveRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'imrTargetInstance'
+--
+-- * 'imrDestinationZone'
+instanceMoveRequest
+    :: InstanceMoveRequest
+instanceMoveRequest =
+    InstanceMoveRequest'
+    { _imrTargetInstance = Nothing
+    , _imrDestinationZone = Nothing
+    }
+
+-- | The URL of the target instance to move. This can be a full or partial
+-- URL. For example, the following are all valid URLs to an instance: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone\/instances\/instance
+-- - projects\/project\/zones\/zone\/instances\/instance -
+-- zones\/zone\/instances\/instance
+imrTargetInstance :: Lens' InstanceMoveRequest (Maybe Text)
+imrTargetInstance
+  = lens _imrTargetInstance
+      (\ s a -> s{_imrTargetInstance = a})
+
+-- | The URL of the destination zone to move the instance. This can be a full
+-- or partial URL. For example, the following are all valid URLs to a zone:
+-- -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/zones\/zone
+-- - projects\/project\/zones\/zone - zones\/zone
+imrDestinationZone :: Lens' InstanceMoveRequest (Maybe Text)
+imrDestinationZone
+  = lens _imrDestinationZone
+      (\ s a -> s{_imrDestinationZone = a})
+
+instance FromJSON InstanceMoveRequest where
+        parseJSON
+          = withObject "InstanceMoveRequest"
+              (\ o ->
+                 InstanceMoveRequest' <$>
+                   (o .:? "targetInstance") <*>
+                     (o .:? "destinationZone"))
+
+instance ToJSON InstanceMoveRequest where
+        toJSON InstanceMoveRequest'{..}
+          = object
+              (catMaybes
+                 [("targetInstance" .=) <$> _imrTargetInstance,
+                  ("destinationZone" .=) <$> _imrDestinationZone])
+
+--
+-- /See:/ 'instanceGroupsScopedList' smart constructor.
+data InstanceGroupsScopedList = InstanceGroupsScopedList'
+    { _igslWarning        :: !(Maybe InstanceGroupsScopedListWarning)
+    , _igslInstanceGroups :: !(Maybe [InstanceGroup])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupsScopedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igslWarning'
+--
+-- * 'igslInstanceGroups'
+instanceGroupsScopedList
+    :: InstanceGroupsScopedList
+instanceGroupsScopedList =
+    InstanceGroupsScopedList'
+    { _igslWarning = Nothing
+    , _igslInstanceGroups = Nothing
+    }
+
+-- | [Output Only] An informational warning that replaces the list of
+-- instance groups when the list is empty.
+igslWarning :: Lens' InstanceGroupsScopedList (Maybe InstanceGroupsScopedListWarning)
+igslWarning
+  = lens _igslWarning (\ s a -> s{_igslWarning = a})
+
+-- | [Output Only] The list of instance groups that are contained in this
+-- scope.
+igslInstanceGroups :: Lens' InstanceGroupsScopedList [InstanceGroup]
+igslInstanceGroups
+  = lens _igslInstanceGroups
+      (\ s a -> s{_igslInstanceGroups = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InstanceGroupsScopedList where
+        parseJSON
+          = withObject "InstanceGroupsScopedList"
+              (\ o ->
+                 InstanceGroupsScopedList' <$>
+                   (o .:? "warning") <*>
+                     (o .:? "instanceGroups" .!= mempty))
+
+instance ToJSON InstanceGroupsScopedList where
+        toJSON InstanceGroupsScopedList'{..}
+          = object
+              (catMaybes
+                 [("warning" .=) <$> _igslWarning,
+                  ("instanceGroups" .=) <$> _igslInstanceGroups])
+
+-- | An HttpsHealthCheck resource. This resource defines a template for how
+-- individual instances should be checked for health, via HTTPS.
+--
+-- /See:/ 'httpsHealthCheck' smart constructor.
+data HTTPSHealthCheck = HTTPSHealthCheck'
+    { _hhcHealthyThreshold   :: !(Maybe (Textual Int32))
+    , _hhcKind               :: !Text
+    , _hhcRequestPath        :: !(Maybe Text)
+    , _hhcSelfLink           :: !(Maybe Text)
+    , _hhcCheckIntervalSec   :: !(Maybe (Textual Int32))
+    , _hhcName               :: !(Maybe Text)
+    , _hhcCreationTimestamp  :: !(Maybe Text)
+    , _hhcId                 :: !(Maybe (Textual Word64))
+    , _hhcHost               :: !(Maybe Text)
+    , _hhcTimeoutSec         :: !(Maybe (Textual Int32))
+    , _hhcDescription        :: !(Maybe Text)
+    , _hhcUnhealthyThreshold :: !(Maybe (Textual Int32))
+    , _hhcPort               :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPSHealthCheck' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hhcHealthyThreshold'
+--
+-- * 'hhcKind'
+--
+-- * 'hhcRequestPath'
+--
+-- * 'hhcSelfLink'
+--
+-- * 'hhcCheckIntervalSec'
+--
+-- * 'hhcName'
+--
+-- * 'hhcCreationTimestamp'
+--
+-- * 'hhcId'
+--
+-- * 'hhcHost'
+--
+-- * 'hhcTimeoutSec'
+--
+-- * 'hhcDescription'
+--
+-- * 'hhcUnhealthyThreshold'
+--
+-- * 'hhcPort'
+httpsHealthCheck
+    :: HTTPSHealthCheck
+httpsHealthCheck =
+    HTTPSHealthCheck'
+    { _hhcHealthyThreshold = Nothing
+    , _hhcKind = "compute#httpsHealthCheck"
+    , _hhcRequestPath = Nothing
+    , _hhcSelfLink = Nothing
+    , _hhcCheckIntervalSec = Nothing
+    , _hhcName = Nothing
+    , _hhcCreationTimestamp = Nothing
+    , _hhcId = Nothing
+    , _hhcHost = Nothing
+    , _hhcTimeoutSec = Nothing
+    , _hhcDescription = Nothing
+    , _hhcUnhealthyThreshold = Nothing
+    , _hhcPort = Nothing
+    }
+
+-- | A so-far unhealthy instance will be marked healthy after this many
+-- consecutive successes. The default value is 2.
+hhcHealthyThreshold :: Lens' HTTPSHealthCheck (Maybe Int32)
+hhcHealthyThreshold
+  = lens _hhcHealthyThreshold
+      (\ s a -> s{_hhcHealthyThreshold = a})
+      . mapping _Coerce
+
+-- | Type of the resource.
+hhcKind :: Lens' HTTPSHealthCheck Text
+hhcKind = lens _hhcKind (\ s a -> s{_hhcKind = a})
+
+-- | The request path of the HTTPS health check request. The default value is
+-- \"\/\".
+hhcRequestPath :: Lens' HTTPSHealthCheck (Maybe Text)
+hhcRequestPath
+  = lens _hhcRequestPath
+      (\ s a -> s{_hhcRequestPath = a})
+
+-- | [Output Only] Server-defined URL for the resource.
+hhcSelfLink :: Lens' HTTPSHealthCheck (Maybe Text)
+hhcSelfLink
+  = lens _hhcSelfLink (\ s a -> s{_hhcSelfLink = a})
+
+-- | How often (in seconds) to send a health check. The default value is 5
+-- seconds.
+hhcCheckIntervalSec :: Lens' HTTPSHealthCheck (Maybe Int32)
+hhcCheckIntervalSec
+  = lens _hhcCheckIntervalSec
+      (\ s a -> s{_hhcCheckIntervalSec = a})
+      . mapping _Coerce
+
+-- | Name of the resource. Provided by the client when the resource is
+-- created. The name must be 1-63 characters long, and comply with RFC1035.
+-- Specifically, the name must be 1-63 characters long and match the
+-- regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first
+-- character must be a lowercase letter, and all following characters must
+-- be a dash, lowercase letter, or digit, except the last character, which
+-- cannot be a dash.
+hhcName :: Lens' HTTPSHealthCheck (Maybe Text)
+hhcName = lens _hhcName (\ s a -> s{_hhcName = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+hhcCreationTimestamp :: Lens' HTTPSHealthCheck (Maybe Text)
+hhcCreationTimestamp
+  = lens _hhcCreationTimestamp
+      (\ s a -> s{_hhcCreationTimestamp = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+hhcId :: Lens' HTTPSHealthCheck (Maybe Word64)
+hhcId
+  = lens _hhcId (\ s a -> s{_hhcId = a}) .
+      mapping _Coerce
+
+-- | The value of the host header in the HTTPS health check request. If left
+-- empty (default value), the public IP on behalf of which this health
+-- check is performed will be used.
+hhcHost :: Lens' HTTPSHealthCheck (Maybe Text)
+hhcHost = lens _hhcHost (\ s a -> s{_hhcHost = a})
+
+-- | How long (in seconds) to wait before claiming failure. The default value
+-- is 5 seconds. It is invalid for timeoutSec to have a greater value than
+-- checkIntervalSec.
+hhcTimeoutSec :: Lens' HTTPSHealthCheck (Maybe Int32)
+hhcTimeoutSec
+  = lens _hhcTimeoutSec
+      (\ s a -> s{_hhcTimeoutSec = a})
+      . mapping _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+hhcDescription :: Lens' HTTPSHealthCheck (Maybe Text)
+hhcDescription
+  = lens _hhcDescription
+      (\ s a -> s{_hhcDescription = a})
+
+-- | A so-far healthy instance will be marked unhealthy after this many
+-- consecutive failures. The default value is 2.
+hhcUnhealthyThreshold :: Lens' HTTPSHealthCheck (Maybe Int32)
+hhcUnhealthyThreshold
+  = lens _hhcUnhealthyThreshold
+      (\ s a -> s{_hhcUnhealthyThreshold = a})
+      . mapping _Coerce
+
+-- | The TCP port number for the HTTPS health check request. The default
+-- value is 443.
+hhcPort :: Lens' HTTPSHealthCheck (Maybe Int32)
+hhcPort
+  = lens _hhcPort (\ s a -> s{_hhcPort = a}) .
+      mapping _Coerce
+
+instance FromJSON HTTPSHealthCheck where
+        parseJSON
+          = withObject "HTTPSHealthCheck"
+              (\ o ->
+                 HTTPSHealthCheck' <$>
+                   (o .:? "healthyThreshold") <*>
+                     (o .:? "kind" .!= "compute#httpsHealthCheck")
+                     <*> (o .:? "requestPath")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "checkIntervalSec")
+                     <*> (o .:? "name")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "id")
+                     <*> (o .:? "host")
+                     <*> (o .:? "timeoutSec")
+                     <*> (o .:? "description")
+                     <*> (o .:? "unhealthyThreshold")
+                     <*> (o .:? "port"))
+
+instance ToJSON HTTPSHealthCheck where
+        toJSON HTTPSHealthCheck'{..}
+          = object
+              (catMaybes
+                 [("healthyThreshold" .=) <$> _hhcHealthyThreshold,
+                  Just ("kind" .= _hhcKind),
+                  ("requestPath" .=) <$> _hhcRequestPath,
+                  ("selfLink" .=) <$> _hhcSelfLink,
+                  ("checkIntervalSec" .=) <$> _hhcCheckIntervalSec,
+                  ("name" .=) <$> _hhcName,
+                  ("creationTimestamp" .=) <$> _hhcCreationTimestamp,
+                  ("id" .=) <$> _hhcId, ("host" .=) <$> _hhcHost,
+                  ("timeoutSec" .=) <$> _hhcTimeoutSec,
+                  ("description" .=) <$> _hhcDescription,
+                  ("unhealthyThreshold" .=) <$> _hhcUnhealthyThreshold,
+                  ("port" .=) <$> _hhcPort])
+
+-- | [Output Only] A map of scoped vpn tunnel lists.
+--
+-- /See:/ 'vpnTunnelAggregatedListItems' smart constructor.
+newtype VPNTunnelAggregatedListItems = VPNTunnelAggregatedListItems'
+    { _vtaliAddtional :: HashMap Text VPNTunnelsScopedList
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNTunnelAggregatedListItems' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtaliAddtional'
+vpnTunnelAggregatedListItems
+    :: HashMap Text VPNTunnelsScopedList -- ^ 'vtaliAddtional'
+    -> VPNTunnelAggregatedListItems
+vpnTunnelAggregatedListItems pVtaliAddtional_ =
+    VPNTunnelAggregatedListItems'
+    { _vtaliAddtional = _Coerce # pVtaliAddtional_
+    }
+
+-- | Name of the scope containing this set of vpn tunnels.
+vtaliAddtional :: Lens' VPNTunnelAggregatedListItems (HashMap Text VPNTunnelsScopedList)
+vtaliAddtional
+  = lens _vtaliAddtional
+      (\ s a -> s{_vtaliAddtional = a})
+      . _Coerce
+
+instance FromJSON VPNTunnelAggregatedListItems where
+        parseJSON
+          = withObject "VPNTunnelAggregatedListItems"
+              (\ o ->
+                 VPNTunnelAggregatedListItems' <$>
+                   (parseJSONObject o))
+
+instance ToJSON VPNTunnelAggregatedListItems where
+        toJSON = toJSON . _vtaliAddtional
+
+-- | A set of instance tags.
+--
+-- /See:/ 'tags' smart constructor.
+data Tags = Tags'
+    { _tFingerprint :: !(Maybe Base64)
+    , _tItems       :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tags' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tFingerprint'
+--
+-- * 'tItems'
+tags
+    :: Tags
+tags =
+    Tags'
+    { _tFingerprint = Nothing
+    , _tItems = Nothing
+    }
+
+-- | Specifies a fingerprint for this request, which is essentially a hash of
+-- the metadata\'s contents and used for optimistic locking. The
+-- fingerprint is initially generated by Compute Engine and changes after
+-- every request to modify or update metadata. You must always provide an
+-- up-to-date fingerprint hash in order to update or change metadata. To
+-- see the latest fingerprint, make get() request to the instance.
+tFingerprint :: Lens' Tags (Maybe ByteString)
+tFingerprint
+  = lens _tFingerprint (\ s a -> s{_tFingerprint = a})
+      . mapping _Base64
+
+-- | An array of tags. Each tag must be 1-63 characters long, and comply with
+-- RFC1035.
+tItems :: Lens' Tags [Text]
+tItems
+  = lens _tItems (\ s a -> s{_tItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Tags where
+        parseJSON
+          = withObject "Tags"
+              (\ o ->
+                 Tags' <$>
+                   (o .:? "fingerprint") <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Tags where
+        toJSON Tags'{..}
+          = object
+              (catMaybes
+                 [("fingerprint" .=) <$> _tFingerprint,
+                  ("items" .=) <$> _tItems])
+
+--
+-- /See:/ 'addressAggregatedList' smart constructor.
+data AddressAggregatedList = AddressAggregatedList'
+    { _addNextPageToken :: !(Maybe Text)
+    , _addKind          :: !Text
+    , _addItems         :: !(Maybe AddressAggregatedListItems)
+    , _addSelfLink      :: !(Maybe Text)
+    , _addId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddressAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addNextPageToken'
+--
+-- * 'addKind'
+--
+-- * 'addItems'
+--
+-- * 'addSelfLink'
+--
+-- * 'addId'
+addressAggregatedList
+    :: AddressAggregatedList
+addressAggregatedList =
+    AddressAggregatedList'
+    { _addNextPageToken = Nothing
+    , _addKind = "compute#addressAggregatedList"
+    , _addItems = Nothing
+    , _addSelfLink = Nothing
+    , _addId = Nothing
+    }
+
+-- | [Output Only] This token allows you to get the next page of results for
+-- list requests. If the number of results is larger than maxResults, use
+-- the nextPageToken as a value for the query parameter pageToken in the
+-- next list request. Subsequent list requests will have their own
+-- nextPageToken to continue paging through the results.
+addNextPageToken :: Lens' AddressAggregatedList (Maybe Text)
+addNextPageToken
+  = lens _addNextPageToken
+      (\ s a -> s{_addNextPageToken = a})
+
+-- | [Output Only] Type of resource. Always compute#addressAggregatedList for
+-- aggregated lists of addresses.
+addKind :: Lens' AddressAggregatedList Text
+addKind = lens _addKind (\ s a -> s{_addKind = a})
+
+-- | [Output Only] A map of scoped address lists.
+addItems :: Lens' AddressAggregatedList (Maybe AddressAggregatedListItems)
+addItems = lens _addItems (\ s a -> s{_addItems = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+addSelfLink :: Lens' AddressAggregatedList (Maybe Text)
+addSelfLink
+  = lens _addSelfLink (\ s a -> s{_addSelfLink = a})
+
+-- | [Output Only] Unique identifier for the resource; defined by the server.
+addId :: Lens' AddressAggregatedList (Maybe Text)
+addId = lens _addId (\ s a -> s{_addId = a})
+
+instance FromJSON AddressAggregatedList where
+        parseJSON
+          = withObject "AddressAggregatedList"
+              (\ o ->
+                 AddressAggregatedList' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "compute#addressAggregatedList")
+                     <*> (o .:? "items")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id"))
+
+instance ToJSON AddressAggregatedList where
+        toJSON AddressAggregatedList'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _addNextPageToken,
+                  Just ("kind" .= _addKind),
+                  ("items" .=) <$> _addItems,
+                  ("selfLink" .=) <$> _addSelfLink,
+                  ("id" .=) <$> _addId])
+
+--
+-- /See:/ 'operationWarningsItem' smart constructor.
+data OperationWarningsItem = OperationWarningsItem'
+    { _owiData    :: !(Maybe [OperationWarningsItemDataItem])
+    , _owiCode    :: !(Maybe OperationWarningsItemCode)
+    , _owiMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationWarningsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'owiData'
+--
+-- * 'owiCode'
+--
+-- * 'owiMessage'
+operationWarningsItem
+    :: OperationWarningsItem
+operationWarningsItem =
+    OperationWarningsItem'
+    { _owiData = Nothing
+    , _owiCode = Nothing
+    , _owiMessage = Nothing
+    }
+
+-- | [Output Only] Metadata about this warning in key: value format. For
+-- example: \"data\": [ { \"key\": \"scope\", \"value\":
+-- \"zones\/us-east1-d\" }
+owiData :: Lens' OperationWarningsItem [OperationWarningsItemDataItem]
+owiData
+  = lens _owiData (\ s a -> s{_owiData = a}) . _Default
+      . _Coerce
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+owiCode :: Lens' OperationWarningsItem (Maybe OperationWarningsItemCode)
+owiCode = lens _owiCode (\ s a -> s{_owiCode = a})
+
+-- | [Output Only] A human-readable description of the warning code.
+owiMessage :: Lens' OperationWarningsItem (Maybe Text)
+owiMessage
+  = lens _owiMessage (\ s a -> s{_owiMessage = a})
+
+instance FromJSON OperationWarningsItem where
+        parseJSON
+          = withObject "OperationWarningsItem"
+              (\ o ->
+                 OperationWarningsItem' <$>
+                   (o .:? "data" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON OperationWarningsItem where
+        toJSON OperationWarningsItem'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _owiData, ("code" .=) <$> _owiCode,
+                  ("message" .=) <$> _owiMessage])
+
+-- | Message for the expected URL mappings.
+--
+-- /See:/ 'urlMapTest' smart constructor.
+data URLMapTest = URLMapTest'
+    { _umtPath        :: !(Maybe Text)
+    , _umtService     :: !(Maybe Text)
+    , _umtHost        :: !(Maybe Text)
+    , _umtDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMapTest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umtPath'
+--
+-- * 'umtService'
+--
+-- * 'umtHost'
+--
+-- * 'umtDescription'
+urlMapTest
+    :: URLMapTest
+urlMapTest =
+    URLMapTest'
+    { _umtPath = Nothing
+    , _umtService = Nothing
+    , _umtHost = Nothing
+    , _umtDescription = Nothing
+    }
+
+-- | Path portion of the URL.
+umtPath :: Lens' URLMapTest (Maybe Text)
+umtPath = lens _umtPath (\ s a -> s{_umtPath = a})
+
+-- | Expected BackendService resource the given URL should be mapped to.
+umtService :: Lens' URLMapTest (Maybe Text)
+umtService
+  = lens _umtService (\ s a -> s{_umtService = a})
+
+-- | Host portion of the URL.
+umtHost :: Lens' URLMapTest (Maybe Text)
+umtHost = lens _umtHost (\ s a -> s{_umtHost = a})
+
+-- | Description of this test case.
+umtDescription :: Lens' URLMapTest (Maybe Text)
+umtDescription
+  = lens _umtDescription
+      (\ s a -> s{_umtDescription = a})
+
+instance FromJSON URLMapTest where
+        parseJSON
+          = withObject "URLMapTest"
+              (\ o ->
+                 URLMapTest' <$>
+                   (o .:? "path") <*> (o .:? "service") <*>
+                     (o .:? "host")
+                     <*> (o .:? "description"))
+
+instance ToJSON URLMapTest where
+        toJSON URLMapTest'{..}
+          = object
+              (catMaybes
+                 [("path" .=) <$> _umtPath,
+                  ("service" .=) <$> _umtService,
+                  ("host" .=) <$> _umtHost,
+                  ("description" .=) <$> _umtDescription])
+
+-- | An Instance resource.
+--
+-- /See:/ 'instance'' smart constructor.
+data Instance = Instance'
+    { _insnStatus            :: !(Maybe InstanceStatus)
+    , _insnServiceAccounts   :: !(Maybe [ServiceAccount])
+    , _insnNetworkInterfaces :: !(Maybe [NetworkInterface])
+    , _insnKind              :: !Text
+    , _insnZone              :: !(Maybe Text)
+    , _insnCPUPlatform       :: !(Maybe Text)
+    , _insnSelfLink          :: !(Maybe Text)
+    , _insnName              :: !(Maybe Text)
+    , _insnStatusMessage     :: !(Maybe Text)
+    , _insnCreationTimestamp :: !(Maybe Text)
+    , _insnMachineType       :: !(Maybe Text)
+    , _insnMetadata          :: !(Maybe Metadata)
+    , _insnId                :: !(Maybe (Textual Word64))
+    , _insnScheduling        :: !(Maybe Scheduling)
+    , _insnDisks             :: !(Maybe [AttachedDisk])
+    , _insnCanIPForward      :: !(Maybe Bool)
+    , _insnDescription       :: !(Maybe Text)
+    , _insnTags              :: !(Maybe Tags)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Instance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'insnStatus'
+--
+-- * 'insnServiceAccounts'
+--
+-- * 'insnNetworkInterfaces'
+--
+-- * 'insnKind'
+--
+-- * 'insnZone'
+--
+-- * 'insnCPUPlatform'
+--
+-- * 'insnSelfLink'
+--
+-- * 'insnName'
+--
+-- * 'insnStatusMessage'
+--
+-- * 'insnCreationTimestamp'
+--
+-- * 'insnMachineType'
+--
+-- * 'insnMetadata'
+--
+-- * 'insnId'
+--
+-- * 'insnScheduling'
+--
+-- * 'insnDisks'
+--
+-- * 'insnCanIPForward'
+--
+-- * 'insnDescription'
+--
+-- * 'insnTags'
+instance'
+    :: Instance
+instance' =
+    Instance'
+    { _insnStatus = Nothing
+    , _insnServiceAccounts = Nothing
+    , _insnNetworkInterfaces = Nothing
+    , _insnKind = "compute#instance"
+    , _insnZone = Nothing
+    , _insnCPUPlatform = Nothing
+    , _insnSelfLink = Nothing
+    , _insnName = Nothing
+    , _insnStatusMessage = Nothing
+    , _insnCreationTimestamp = Nothing
+    , _insnMachineType = Nothing
+    , _insnMetadata = Nothing
+    , _insnId = Nothing
+    , _insnScheduling = Nothing
+    , _insnDisks = Nothing
+    , _insnCanIPForward = Nothing
+    , _insnDescription = Nothing
+    , _insnTags = Nothing
+    }
+
+-- | [Output Only] The status of the instance. One of the following values:
+-- PROVISIONING, STAGING, RUNNING, STOPPING, and TERMINATED.
+insnStatus :: Lens' Instance (Maybe InstanceStatus)
+insnStatus
+  = lens _insnStatus (\ s a -> s{_insnStatus = a})
+
+-- | A list of service accounts, with their specified scopes, authorized for
+-- this instance. Service accounts generate access tokens that can be
+-- accessed through the metadata server and used to authenticate
+-- applications on the instance. See Authenticating from Google Compute
+-- Engine for more information.
+insnServiceAccounts :: Lens' Instance [ServiceAccount]
+insnServiceAccounts
+  = lens _insnServiceAccounts
+      (\ s a -> s{_insnServiceAccounts = a})
+      . _Default
+      . _Coerce
+
+-- | An array of configurations for this interface. This specifies how this
+-- interface is configured to interact with other network services, such as
+-- connecting to the internet.
+insnNetworkInterfaces :: Lens' Instance [NetworkInterface]
+insnNetworkInterfaces
+  = lens _insnNetworkInterfaces
+      (\ s a -> s{_insnNetworkInterfaces = a})
+      . _Default
+      . _Coerce
+
+-- | [Output Only] Type of the resource. Always compute#instance for
+-- instances.
+insnKind :: Lens' Instance Text
+insnKind = lens _insnKind (\ s a -> s{_insnKind = a})
+
+-- | [Output Only] URL of the zone where the instance resides.
+insnZone :: Lens' Instance (Maybe Text)
+insnZone = lens _insnZone (\ s a -> s{_insnZone = a})
+
+-- | [Output Only] The CPU platform used by this instance.
+insnCPUPlatform :: Lens' Instance (Maybe Text)
+insnCPUPlatform
+  = lens _insnCPUPlatform
+      (\ s a -> s{_insnCPUPlatform = a})
+
+-- | [Output Only] Server-defined URL for this resource.
+insnSelfLink :: Lens' Instance (Maybe Text)
+insnSelfLink
+  = lens _insnSelfLink (\ s a -> s{_insnSelfLink = a})
+
+-- | The name of the resource, provided by the client when initially creating
+-- the resource. The resource name must be 1-63 characters long, and comply
+-- with RFC1035. Specifically, the name must be 1-63 characters long and
+-- match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the
+-- first character must be a lowercase letter, and all following characters
+-- must be a dash, lowercase letter, or digit, except the last character,
+-- which cannot be a dash.
+insnName :: Lens' Instance (Maybe Text)
+insnName = lens _insnName (\ s a -> s{_insnName = a})
+
+-- | [Output Only] An optional, human-readable explanation of the status.
+insnStatusMessage :: Lens' Instance (Maybe Text)
+insnStatusMessage
+  = lens _insnStatusMessage
+      (\ s a -> s{_insnStatusMessage = a})
+
+-- | [Output Only] Creation timestamp in RFC3339 text format.
+insnCreationTimestamp :: Lens' Instance (Maybe Text)
+insnCreationTimestamp
+  = lens _insnCreationTimestamp
+      (\ s a -> s{_insnCreationTimestamp = a})
+
+-- | Full or partial URL of the machine type resource to use for this
+-- instance, in the format: zones\/zone\/machineTypes\/machine-type. This
+-- is provided by the client when the instance is created. For example, the
+-- following is a valid partial url to a predefined machine type:
+-- zones\/us-central1-f\/machineTypes\/n1-standard-1 To create a custom
+-- machine type, provide a URL to a machine type in the following format,
+-- where CPUS is 1 or an even number up to 32 (2, 4, 6, ... 24, etc), and
+-- MEMORY is the total memory for this instance. Memory must be a multiple
+-- of 256 MB and must be supplied in MB (e.g. 5 GB of memory is 5120 MB):
+-- zones\/zone\/machineTypes\/custom-CPUS-MEMORY For example:
+-- zones\/us-central1-f\/machineTypes\/custom-4-5120 For a full list of
+-- restrictions, read the Specifications for custom machine types.
+insnMachineType :: Lens' Instance (Maybe Text)
+insnMachineType
+  = lens _insnMachineType
+      (\ s a -> s{_insnMachineType = a})
+
+-- | The metadata key\/value pairs assigned to this instance. This includes
+-- custom metadata and predefined keys.
+insnMetadata :: Lens' Instance (Maybe Metadata)
+insnMetadata
+  = lens _insnMetadata (\ s a -> s{_insnMetadata = a})
+
+-- | [Output Only] The unique identifier for the resource. This identifier is
+-- defined by the server.
+insnId :: Lens' Instance (Maybe Word64)
+insnId
+  = lens _insnId (\ s a -> s{_insnId = a}) .
+      mapping _Coerce
+
+-- | Scheduling options for this instance.
+insnScheduling :: Lens' Instance (Maybe Scheduling)
+insnScheduling
+  = lens _insnScheduling
+      (\ s a -> s{_insnScheduling = a})
+
+-- | Array of disks associated with this instance. Persistent disks must be
+-- created before you can assign them.
+insnDisks :: Lens' Instance [AttachedDisk]
+insnDisks
+  = lens _insnDisks (\ s a -> s{_insnDisks = a}) .
+      _Default
+      . _Coerce
+
+-- | Allows this instance to send and receive packets with non-matching
+-- destination or source IPs. This is required if you plan to use this
+-- instance to forward routes. For more information, see Enabling IP
+-- Forwarding.
+insnCanIPForward :: Lens' Instance (Maybe Bool)
+insnCanIPForward
+  = lens _insnCanIPForward
+      (\ s a -> s{_insnCanIPForward = a})
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+insnDescription :: Lens' Instance (Maybe Text)
+insnDescription
+  = lens _insnDescription
+      (\ s a -> s{_insnDescription = a})
+
+-- | A list of tags to apply to this instance. Tags are used to identify
+-- valid sources or targets for network firewalls and are specified by the
+-- client during instance creation. The tags can be later modified by the
+-- setTags method. Each tag within the list must comply with RFC1035.
+insnTags :: Lens' Instance (Maybe Tags)
+insnTags = lens _insnTags (\ s a -> s{_insnTags = a})
+
+instance FromJSON Instance where
+        parseJSON
+          = withObject "Instance"
+              (\ o ->
+                 Instance' <$>
+                   (o .:? "status") <*>
+                     (o .:? "serviceAccounts" .!= mempty)
+                     <*> (o .:? "networkInterfaces" .!= mempty)
+                     <*> (o .:? "kind" .!= "compute#instance")
+                     <*> (o .:? "zone")
+                     <*> (o .:? "cpuPlatform")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "statusMessage")
+                     <*> (o .:? "creationTimestamp")
+                     <*> (o .:? "machineType")
+                     <*> (o .:? "metadata")
+                     <*> (o .:? "id")
+                     <*> (o .:? "scheduling")
+                     <*> (o .:? "disks" .!= mempty)
+                     <*> (o .:? "canIpForward")
+                     <*> (o .:? "description")
+                     <*> (o .:? "tags"))
+
+instance ToJSON Instance where
+        toJSON Instance'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _insnStatus,
+                  ("serviceAccounts" .=) <$> _insnServiceAccounts,
+                  ("networkInterfaces" .=) <$> _insnNetworkInterfaces,
+                  Just ("kind" .= _insnKind),
+                  ("zone" .=) <$> _insnZone,
+                  ("cpuPlatform" .=) <$> _insnCPUPlatform,
+                  ("selfLink" .=) <$> _insnSelfLink,
+                  ("name" .=) <$> _insnName,
+                  ("statusMessage" .=) <$> _insnStatusMessage,
+                  ("creationTimestamp" .=) <$> _insnCreationTimestamp,
+                  ("machineType" .=) <$> _insnMachineType,
+                  ("metadata" .=) <$> _insnMetadata,
+                  ("id" .=) <$> _insnId,
+                  ("scheduling" .=) <$> _insnScheduling,
+                  ("disks" .=) <$> _insnDisks,
+                  ("canIpForward" .=) <$> _insnCanIPForward,
+                  ("description" .=) <$> _insnDescription,
+                  ("tags" .=) <$> _insnTags])
+
+-- | A matcher for the path portion of the URL. The BackendService from the
+-- longest-matched rule will serve the URL. If no rule was matched, the
+-- default service will be used.
+--
+-- /See:/ 'pathMatcher' smart constructor.
+data PathMatcher = PathMatcher'
+    { _pmDefaultService :: !(Maybe Text)
+    , _pmName           :: !(Maybe Text)
+    , _pmPathRules      :: !(Maybe [PathRule])
+    , _pmDescription    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PathMatcher' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pmDefaultService'
+--
+-- * 'pmName'
+--
+-- * 'pmPathRules'
+--
+-- * 'pmDescription'
+pathMatcher
+    :: PathMatcher
+pathMatcher =
+    PathMatcher'
+    { _pmDefaultService = Nothing
+    , _pmName = Nothing
+    , _pmPathRules = Nothing
+    , _pmDescription = Nothing
+    }
+
+-- | The full or partial URL to the BackendService resource. This will be
+-- used if none of the pathRules defined by this PathMatcher is matched by
+-- the URL\'s path portion. For example, the following are all valid URLs
+-- to a BackendService resource: -
+-- https:\/\/www.googleapis.com\/compute\/v1\/projects\/project\/global\/backendServices\/backendService
+-- -
+-- compute\/v1\/projects\/project\/global\/backendServices\/backendService
+-- - global\/backendServices\/backendService
+pmDefaultService :: Lens' PathMatcher (Maybe Text)
+pmDefaultService
+  = lens _pmDefaultService
+      (\ s a -> s{_pmDefaultService = a})
+
+-- | The name to which this PathMatcher is referred by the HostRule.
+pmName :: Lens' PathMatcher (Maybe Text)
+pmName = lens _pmName (\ s a -> s{_pmName = a})
+
+-- | The list of path rules.
+pmPathRules :: Lens' PathMatcher [PathRule]
+pmPathRules
+  = lens _pmPathRules (\ s a -> s{_pmPathRules = a}) .
+      _Default
+      . _Coerce
+
+-- | An optional description of this resource. Provide this property when you
+-- create the resource.
+pmDescription :: Lens' PathMatcher (Maybe Text)
+pmDescription
+  = lens _pmDescription
+      (\ s a -> s{_pmDescription = a})
+
+instance FromJSON PathMatcher where
+        parseJSON
+          = withObject "PathMatcher"
+              (\ o ->
+                 PathMatcher' <$>
+                   (o .:? "defaultService") <*> (o .:? "name") <*>
+                     (o .:? "pathRules" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON PathMatcher where
+        toJSON PathMatcher'{..}
           = object
               (catMaybes
                  [("defaultService" .=) <$> _pmDefaultService,
diff --git a/gen/Network/Google/Compute/Types/Sum.hs b/gen/Network/Google/Compute/Types/Sum.hs
--- a/gen/Network/Google/Compute/Types/Sum.hs
+++ b/gen/Network/Google/Compute/Types/Sum.hs
@@ -8,2355 +8,2550 @@
 
 -- |
 -- Module      : Network.Google.Compute.Types.Sum
--- Copyright   : (c) 2015 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.Compute.Types.Sum where
-
-import           Network.Google.Prelude
-
--- | Defines the maintenance behavior for this instance. For standard
--- instances, the default behavior is MIGRATE. For preemptible instances,
--- the default and only possible behavior is TERMINATE. For more
--- information, see Setting maintenance behavior.
-data SchedulingOnHostMaintenance
-    = Migrate
-      -- ^ @MIGRATE@
-    | Terminate
-      -- ^ @TERMINATE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable SchedulingOnHostMaintenance
-
-instance FromText SchedulingOnHostMaintenance where
-    fromText = \case
-        "MIGRATE" -> Just Migrate
-        "TERMINATE" -> Just Terminate
-        _ -> Nothing
-
-instance ToText SchedulingOnHostMaintenance where
-    toText = \case
-        Migrate -> "MIGRATE"
-        Terminate -> "TERMINATE"
-
-instance FromJSON SchedulingOnHostMaintenance where
-    parseJSON = parseJSONText "SchedulingOnHostMaintenance"
-
-instance ToJSON SchedulingOnHostMaintenance where
-    toJSON = toJSONText
-
--- | Defines type in which utilization_target is expressed.
-data AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType
-    = DeltaPerMinute
-      -- ^ @DELTA_PER_MINUTE@
-    | DeltaPerSecond
-      -- ^ @DELTA_PER_SECOND@
-    | Gauge
-      -- ^ @GAUGE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType
-
-instance FromText AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
-    fromText = \case
-        "DELTA_PER_MINUTE" -> Just DeltaPerMinute
-        "DELTA_PER_SECOND" -> Just DeltaPerSecond
-        "GAUGE" -> Just Gauge
-        _ -> Nothing
-
-instance ToText AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
-    toText = \case
-        DeltaPerMinute -> "DELTA_PER_MINUTE"
-        DeltaPerSecond -> "DELTA_PER_SECOND"
-        Gauge -> "GAUGE"
-
-instance FromJSON AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
-    parseJSON = parseJSONText "AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType"
-
-instance ToJSON AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data OperationWarningsItemCode
-    = DeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | DiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | InjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | NextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | NextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | NextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | NextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | NextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | NotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | NoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | RequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | ResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | SingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | Unreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable OperationWarningsItemCode
-
-instance FromText OperationWarningsItemCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just DeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just DiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just InjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just NextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just NextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just NextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just NextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just NextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just NotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just NoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just RequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just ResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just SingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just Unreachable
-        _ -> Nothing
-
-instance ToText OperationWarningsItemCode where
-    toText = \case
-        DeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        DiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        InjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        NextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        NextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        NextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        NextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        NextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        NotCriticalError -> "NOT_CRITICAL_ERROR"
-        NoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        RequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        ResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        SingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        Unreachable -> "UNREACHABLE"
-
-instance FromJSON OperationWarningsItemCode where
-    parseJSON = parseJSONText "OperationWarningsItemCode"
-
-instance ToJSON OperationWarningsItemCode where
-    toJSON = toJSONText
-
-data BackendServiceProtocol
-    = HTTP
-      -- ^ @HTTP@
-    | HTTPS
-      -- ^ @HTTPS@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable BackendServiceProtocol
-
-instance FromText BackendServiceProtocol where
-    fromText = \case
-        "HTTP" -> Just HTTP
-        "HTTPS" -> Just HTTPS
-        _ -> Nothing
-
-instance ToText BackendServiceProtocol where
-    toText = \case
-        HTTP -> "HTTP"
-        HTTPS -> "HTTPS"
-
-instance FromJSON BackendServiceProtocol where
-    parseJSON = parseJSONText "BackendServiceProtocol"
-
-instance ToJSON BackendServiceProtocol where
-    toJSON = toJSONText
-
--- | Specifies the type of the disk, either SCRATCH or PERSISTENT. If not
--- specified, the default is PERSISTENT.
-data AttachedDiskType
-    = Persistent
-      -- ^ @PERSISTENT@
-    | Scratch
-      -- ^ @SCRATCH@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AttachedDiskType
-
-instance FromText AttachedDiskType where
-    fromText = \case
-        "PERSISTENT" -> Just Persistent
-        "SCRATCH" -> Just Scratch
-        _ -> Nothing
-
-instance ToText AttachedDiskType where
-    toText = \case
-        Persistent -> "PERSISTENT"
-        Scratch -> "SCRATCH"
-
-instance FromJSON AttachedDiskType where
-    parseJSON = parseJSONText "AttachedDiskType"
-
-instance ToJSON AttachedDiskType where
-    toJSON = toJSONText
-
--- | The type of the image used to create this disk. The default and only
--- value is RAW
-data ImageSourceType
-    = Raw
-      -- ^ @RAW@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ImageSourceType
-
-instance FromText ImageSourceType where
-    fromText = \case
-        "RAW" -> Just Raw
-        _ -> Nothing
-
-instance ToText ImageSourceType where
-    toText = \case
-        Raw -> "RAW"
-
-instance FromJSON ImageSourceType where
-    parseJSON = parseJSONText "ImageSourceType"
-
-instance ToJSON ImageSourceType where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data ForwardingRulesScopedListWarningCode
-    = FRSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | FRSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | FRSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | FRSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | FRSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | FRSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | FRSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | FRSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | FRSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | FRSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | FRSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | FRSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | FRSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | FRSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ForwardingRulesScopedListWarningCode
-
-instance FromText ForwardingRulesScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just FRSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just FRSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just FRSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just FRSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just FRSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just FRSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just FRSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just FRSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just FRSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just FRSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just FRSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just FRSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just FRSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just FRSLWCUnreachable
-        _ -> Nothing
-
-instance ToText ForwardingRulesScopedListWarningCode where
-    toText = \case
-        FRSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        FRSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        FRSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        FRSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        FRSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        FRSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        FRSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        FRSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        FRSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        FRSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        FRSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        FRSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        FRSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        FRSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON ForwardingRulesScopedListWarningCode where
-    parseJSON = parseJSONText "ForwardingRulesScopedListWarningCode"
-
-instance ToJSON ForwardingRulesScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data OperationsScopedListWarningCode
-    = OSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | OSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | OSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | OSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | OSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | OSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | OSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | OSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | OSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | OSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | OSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | OSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | OSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | OSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable OperationsScopedListWarningCode
-
-instance FromText OperationsScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just OSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just OSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just OSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just OSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just OSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just OSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just OSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just OSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just OSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just OSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just OSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just OSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just OSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just OSLWCUnreachable
-        _ -> Nothing
-
-instance ToText OperationsScopedListWarningCode where
-    toText = \case
-        OSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        OSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        OSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        OSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        OSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        OSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        OSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        OSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        OSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        OSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        OSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        OSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        OSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        OSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON OperationsScopedListWarningCode where
-    parseJSON = parseJSONText "OperationsScopedListWarningCode"
-
-instance ToJSON OperationsScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data DisksScopedListWarningCode
-    = DSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | DSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | DSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | DSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | DSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | DSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | DSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | DSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | DSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | DSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | DSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | DSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | DSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | DSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable DisksScopedListWarningCode
-
-instance FromText DisksScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just DSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just DSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just DSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just DSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just DSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just DSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just DSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just DSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just DSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just DSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just DSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just DSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just DSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just DSLWCUnreachable
-        _ -> Nothing
-
-instance ToText DisksScopedListWarningCode where
-    toText = \case
-        DSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        DSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        DSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        DSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        DSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        DSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        DSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        DSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        DSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        DSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        DSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        DSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        DSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        DSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON DisksScopedListWarningCode where
-    parseJSON = parseJSONText "DisksScopedListWarningCode"
-
-instance ToJSON DisksScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data InstanceGroupManagersScopedListWarningCode
-    = IGMSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | IGMSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | IGMSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | IGMSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | IGMSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | IGMSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | IGMSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | IGMSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | IGMSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | IGMSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | IGMSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | IGMSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | IGMSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | IGMSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable InstanceGroupManagersScopedListWarningCode
-
-instance FromText InstanceGroupManagersScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just IGMSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just IGMSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just IGMSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just IGMSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just IGMSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just IGMSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just IGMSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just IGMSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just IGMSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just IGMSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just IGMSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just IGMSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just IGMSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just IGMSLWCUnreachable
-        _ -> Nothing
-
-instance ToText InstanceGroupManagersScopedListWarningCode where
-    toText = \case
-        IGMSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        IGMSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        IGMSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        IGMSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        IGMSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        IGMSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        IGMSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        IGMSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        IGMSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        IGMSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        IGMSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        IGMSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        IGMSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        IGMSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON InstanceGroupManagersScopedListWarningCode where
-    parseJSON = parseJSONText "InstanceGroupManagersScopedListWarningCode"
-
-instance ToJSON InstanceGroupManagersScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data TargetPoolsScopedListWarningCode
-    = TPSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | TPSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | TPSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | TPSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | TPSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | TPSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | TPSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | TPSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | TPSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | TPSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | TPSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | TPSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | TPSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | TPSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable TargetPoolsScopedListWarningCode
-
-instance FromText TargetPoolsScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just TPSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just TPSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just TPSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just TPSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just TPSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just TPSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just TPSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just TPSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just TPSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just TPSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just TPSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just TPSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just TPSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just TPSLWCUnreachable
-        _ -> Nothing
-
-instance ToText TargetPoolsScopedListWarningCode where
-    toText = \case
-        TPSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        TPSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        TPSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        TPSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        TPSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        TPSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        TPSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        TPSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        TPSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        TPSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        TPSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        TPSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        TPSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        TPSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON TargetPoolsScopedListWarningCode where
-    parseJSON = parseJSONText "TargetPoolsScopedListWarningCode"
-
-instance ToJSON TargetPoolsScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the VPN gateway.
-data TargetVPNGatewayStatus
-    = Creating
-      -- ^ @CREATING@
-    | Deleting
-      -- ^ @DELETING@
-    | Failed
-      -- ^ @FAILED@
-    | Ready
-      -- ^ @READY@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable TargetVPNGatewayStatus
-
-instance FromText TargetVPNGatewayStatus where
-    fromText = \case
-        "CREATING" -> Just Creating
-        "DELETING" -> Just Deleting
-        "FAILED" -> Just Failed
-        "READY" -> Just Ready
-        _ -> Nothing
-
-instance ToText TargetVPNGatewayStatus where
-    toText = \case
-        Creating -> "CREATING"
-        Deleting -> "DELETING"
-        Failed -> "FAILED"
-        Ready -> "READY"
-
-instance FromJSON TargetVPNGatewayStatus where
-    parseJSON = parseJSONText "TargetVPNGatewayStatus"
-
-instance ToJSON TargetVPNGatewayStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the snapshot.
-data SnapshotStatus
-    = SSCreating
-      -- ^ @CREATING@
-    | SSDeleting
-      -- ^ @DELETING@
-    | SSFailed
-      -- ^ @FAILED@
-    | SSReady
-      -- ^ @READY@
-    | SSUploading
-      -- ^ @UPLOADING@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable SnapshotStatus
-
-instance FromText SnapshotStatus where
-    fromText = \case
-        "CREATING" -> Just SSCreating
-        "DELETING" -> Just SSDeleting
-        "FAILED" -> Just SSFailed
-        "READY" -> Just SSReady
-        "UPLOADING" -> Just SSUploading
-        _ -> Nothing
-
-instance ToText SnapshotStatus where
-    toText = \case
-        SSCreating -> "CREATING"
-        SSDeleting -> "DELETING"
-        SSFailed -> "FAILED"
-        SSReady -> "READY"
-        SSUploading -> "UPLOADING"
-
-instance FromJSON SnapshotStatus where
-    parseJSON = parseJSONText "SnapshotStatus"
-
-instance ToJSON SnapshotStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data TargetInstancesScopedListWarningCode
-    = TISLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | TISLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | TISLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | TISLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | TISLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | TISLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | TISLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | TISLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | TISLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | TISLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | TISLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | TISLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | TISLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | TISLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable TargetInstancesScopedListWarningCode
-
-instance FromText TargetInstancesScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just TISLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just TISLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just TISLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just TISLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just TISLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just TISLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just TISLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just TISLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just TISLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just TISLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just TISLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just TISLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just TISLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just TISLWCUnreachable
-        _ -> Nothing
-
-instance ToText TargetInstancesScopedListWarningCode where
-    toText = \case
-        TISLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        TISLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        TISLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        TISLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        TISLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        TISLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        TISLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        TISLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        TISLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        TISLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        TISLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        TISLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        TISLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        TISLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON TargetInstancesScopedListWarningCode where
-    parseJSON = parseJSONText "TargetInstancesScopedListWarningCode"
-
-instance ToJSON TargetInstancesScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data RouteWarningsItemCode
-    = RWICDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | RWICDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | RWICInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | RWICNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | RWICNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | RWICNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | RWICNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | RWICNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | RWICNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | RWICNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | RWICRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | RWICResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | RWICSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | RWICUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable RouteWarningsItemCode
-
-instance FromText RouteWarningsItemCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just RWICDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just RWICDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just RWICInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just RWICNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just RWICNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just RWICNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just RWICNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just RWICNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just RWICNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just RWICNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just RWICRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just RWICResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just RWICSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just RWICUnreachable
-        _ -> Nothing
-
-instance ToText RouteWarningsItemCode where
-    toText = \case
-        RWICDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        RWICDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        RWICInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        RWICNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        RWICNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        RWICNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        RWICNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        RWICNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        RWICNotCriticalError -> "NOT_CRITICAL_ERROR"
-        RWICNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        RWICRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        RWICResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        RWICSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        RWICUnreachable -> "UNREACHABLE"
-
-instance FromJSON RouteWarningsItemCode where
-    parseJSON = parseJSONText "RouteWarningsItemCode"
-
-instance ToJSON RouteWarningsItemCode where
-    toJSON = toJSONText
-
--- | [Output Only] An indicator whether storageBytes is in a stable state or
--- it is being adjusted as a result of shared storage reallocation.
-data SnapshotStorageBytesStatus
-    = Updating
-      -- ^ @UPDATING@
-    | UpToDate
-      -- ^ @UP_TO_DATE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable SnapshotStorageBytesStatus
-
-instance FromText SnapshotStorageBytesStatus where
-    fromText = \case
-        "UPDATING" -> Just Updating
-        "UP_TO_DATE" -> Just UpToDate
-        _ -> Nothing
-
-instance ToText SnapshotStorageBytesStatus where
-    toText = \case
-        Updating -> "UPDATING"
-        UpToDate -> "UP_TO_DATE"
-
-instance FromJSON SnapshotStorageBytesStatus where
-    parseJSON = parseJSONText "SnapshotStorageBytesStatus"
-
-instance ToJSON SnapshotStorageBytesStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data AddressesScopedListWarningCode
-    = ASLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | ASLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | ASLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | ASLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | ASLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | ASLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | ASLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | ASLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | ASLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | ASLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | ASLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | ASLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | ASLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | ASLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AddressesScopedListWarningCode
-
-instance FromText AddressesScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just ASLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just ASLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just ASLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just ASLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just ASLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just ASLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just ASLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just ASLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just ASLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just ASLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just ASLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just ASLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just ASLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just ASLWCUnreachable
-        _ -> Nothing
-
-instance ToText AddressesScopedListWarningCode where
-    toText = \case
-        ASLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        ASLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        ASLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        ASLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        ASLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        ASLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        ASLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        ASLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        ASLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        ASLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        ASLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        ASLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        ASLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        ASLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON AddressesScopedListWarningCode where
-    parseJSON = parseJSONText "AddressesScopedListWarningCode"
-
-instance ToJSON AddressesScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the image. An image can be used to create
--- other resources, such as instances, only after the image has been
--- successfully created and the status is set to READY. Possible values are
--- FAILED, PENDING, or READY.
-data ImageStatus
-    = ISFailed
-      -- ^ @FAILED@
-    | ISPending
-      -- ^ @PENDING@
-    | ISReady
-      -- ^ @READY@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ImageStatus
-
-instance FromText ImageStatus where
-    fromText = \case
-        "FAILED" -> Just ISFailed
-        "PENDING" -> Just ISPending
-        "READY" -> Just ISReady
-        _ -> Nothing
-
-instance ToText ImageStatus where
-    toText = \case
-        ISFailed -> "FAILED"
-        ISPending -> "PENDING"
-        ISReady -> "READY"
-
-instance FromJSON ImageStatus where
-    parseJSON = parseJSONText "ImageStatus"
-
-instance ToJSON ImageStatus where
-    toJSON = toJSONText
-
--- | Health state of the instance.
-data HealthStatusHealthState
-    = Healthy
-      -- ^ @HEALTHY@
-    | Unhealthy
-      -- ^ @UNHEALTHY@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable HealthStatusHealthState
-
-instance FromText HealthStatusHealthState where
-    fromText = \case
-        "HEALTHY" -> Just Healthy
-        "UNHEALTHY" -> Just Unhealthy
-        _ -> Nothing
-
-instance ToText HealthStatusHealthState where
-    toText = \case
-        Healthy -> "HEALTHY"
-        Unhealthy -> "UNHEALTHY"
-
-instance FromJSON HealthStatusHealthState where
-    parseJSON = parseJSONText "HealthStatusHealthState"
-
-instance ToJSON HealthStatusHealthState where
-    toJSON = toJSONText
-
--- | The deprecation state of this resource. This can be DEPRECATED,
--- OBSOLETE, or DELETED. Operations which create a new resource using a
--- DEPRECATED resource will return successfully, but with a warning
--- indicating the deprecated resource and recommending its replacement.
--- Operations which use OBSOLETE or DELETED resources will be rejected and
--- result in an error.
-data DeprecationStatusState
-    = Deleted
-      -- ^ @DELETED@
-    | Deprecated
-      -- ^ @DEPRECATED@
-    | Obsolete
-      -- ^ @OBSOLETE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable DeprecationStatusState
-
-instance FromText DeprecationStatusState where
-    fromText = \case
-        "DELETED" -> Just Deleted
-        "DEPRECATED" -> Just Deprecated
-        "OBSOLETE" -> Just Obsolete
-        _ -> Nothing
-
-instance ToText DeprecationStatusState where
-    toText = \case
-        Deleted -> "DELETED"
-        Deprecated -> "DEPRECATED"
-        Obsolete -> "OBSOLETE"
-
-instance FromJSON DeprecationStatusState where
-    parseJSON = parseJSONText "DeprecationStatusState"
-
-instance ToJSON DeprecationStatusState where
-    toJSON = toJSONText
-
--- | [Output Only] The current action that the managed instance group has
--- scheduled for the instance. Possible values: - NONE The instance is
--- running, and the managed instance group does not have any scheduled
--- actions for this instance. - CREATING The managed instance group is
--- creating this instance. - RECREATING The managed instance group is
--- recreating this instance. - DELETING The managed instance group is
--- permanently deleting this instance. - ABANDONING The managed instance
--- group is abandoning this instance. The instance will be removed from the
--- instance group and from any target pools that are associated with this
--- group. - RESTARTING The managed instance group is restarting the
--- instance. - REFRESHING The managed instance group is applying
--- configuration changes to the instance without stopping it. For example,
--- the group can update the target pool list for an instance without
--- stopping that instance.
-data ManagedInstanceCurrentAction
-    = MICAAbandoning
-      -- ^ @ABANDONING@
-    | MICACreating
-      -- ^ @CREATING@
-    | MICADeleting
-      -- ^ @DELETING@
-    | MICANone
-      -- ^ @NONE@
-    | MICARecreating
-      -- ^ @RECREATING@
-    | MICARefreshing
-      -- ^ @REFRESHING@
-    | MICARestarting
-      -- ^ @RESTARTING@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ManagedInstanceCurrentAction
-
-instance FromText ManagedInstanceCurrentAction where
-    fromText = \case
-        "ABANDONING" -> Just MICAAbandoning
-        "CREATING" -> Just MICACreating
-        "DELETING" -> Just MICADeleting
-        "NONE" -> Just MICANone
-        "RECREATING" -> Just MICARecreating
-        "REFRESHING" -> Just MICARefreshing
-        "RESTARTING" -> Just MICARestarting
-        _ -> Nothing
-
-instance ToText ManagedInstanceCurrentAction where
-    toText = \case
-        MICAAbandoning -> "ABANDONING"
-        MICACreating -> "CREATING"
-        MICADeleting -> "DELETING"
-        MICANone -> "NONE"
-        MICARecreating -> "RECREATING"
-        MICARefreshing -> "REFRESHING"
-        MICARestarting -> "RESTARTING"
-
-instance FromJSON ManagedInstanceCurrentAction where
-    parseJSON = parseJSONText "ManagedInstanceCurrentAction"
-
-instance ToJSON ManagedInstanceCurrentAction where
-    toJSON = toJSONText
-
--- | NAT option controlling how IPs are NAT\'ed to the instance. Currently
--- only NO_NAT (default value) is supported.
-data TargetInstanceNATPolicy
-    = NoNAT
-      -- ^ @NO_NAT@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable TargetInstanceNATPolicy
-
-instance FromText TargetInstanceNATPolicy where
-    fromText = \case
-        "NO_NAT" -> Just NoNAT
-        _ -> Nothing
-
-instance ToText TargetInstanceNATPolicy where
-    toText = \case
-        NoNAT -> "NO_NAT"
-
-instance FromJSON TargetInstanceNATPolicy where
-    parseJSON = parseJSONText "TargetInstanceNATPolicy"
-
-instance ToJSON TargetInstanceNATPolicy where
-    toJSON = toJSONText
-
--- | The type of configuration. The default and only option is
--- ONE_TO_ONE_NAT.
-data AccessConfigType
-    = OneToOneNAT
-      -- ^ @ONE_TO_ONE_NAT@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AccessConfigType
-
-instance FromText AccessConfigType where
-    fromText = \case
-        "ONE_TO_ONE_NAT" -> Just OneToOneNAT
-        _ -> Nothing
-
-instance ToText AccessConfigType where
-    toText = \case
-        OneToOneNAT -> "ONE_TO_ONE_NAT"
-
-instance FromJSON AccessConfigType where
-    parseJSON = parseJSONText "AccessConfigType"
-
-instance ToJSON AccessConfigType where
-    toJSON = toJSONText
-
--- | [Output Only] Status of the operation. Can be one of the following:
--- PENDING, RUNNING, or DONE.
-data OperationStatus
-    = Done
-      -- ^ @DONE@
-    | Pending
-      -- ^ @PENDING@
-    | Running
-      -- ^ @RUNNING@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable OperationStatus
-
-instance FromText OperationStatus where
-    fromText = \case
-        "DONE" -> Just Done
-        "PENDING" -> Just Pending
-        "RUNNING" -> Just Running
-        _ -> Nothing
-
-instance ToText OperationStatus where
-    toText = \case
-        Done -> "DONE"
-        Pending -> "PENDING"
-        Running -> "RUNNING"
-
-instance FromJSON OperationStatus where
-    parseJSON = parseJSONText "OperationStatus"
-
-instance ToJSON OperationStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data TargetVPNGatewaysScopedListWarningCode
-    = TVGSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | TVGSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | TVGSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | TVGSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | TVGSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | TVGSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | TVGSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | TVGSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | TVGSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | TVGSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | TVGSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | TVGSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | TVGSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | TVGSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable TargetVPNGatewaysScopedListWarningCode
-
-instance FromText TargetVPNGatewaysScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just TVGSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just TVGSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just TVGSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just TVGSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just TVGSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just TVGSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just TVGSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just TVGSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just TVGSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just TVGSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just TVGSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just TVGSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just TVGSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just TVGSLWCUnreachable
-        _ -> Nothing
-
-instance ToText TargetVPNGatewaysScopedListWarningCode where
-    toText = \case
-        TVGSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        TVGSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        TVGSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        TVGSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        TVGSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        TVGSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        TVGSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        TVGSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        TVGSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        TVGSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        TVGSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        TVGSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        TVGSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        TVGSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON TargetVPNGatewaysScopedListWarningCode where
-    parseJSON = parseJSONText "TargetVPNGatewaysScopedListWarningCode"
-
-instance ToJSON TargetVPNGatewaysScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The status of disk creation. Applicable statuses includes:
--- CREATING, FAILED, READY, RESTORING.
-data DiskStatus
-    = DSCreating
-      -- ^ @CREATING@
-    | DSFailed
-      -- ^ @FAILED@
-    | DSReady
-      -- ^ @READY@
-    | DSRestoring
-      -- ^ @RESTORING@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable DiskStatus
-
-instance FromText DiskStatus where
-    fromText = \case
-        "CREATING" -> Just DSCreating
-        "FAILED" -> Just DSFailed
-        "READY" -> Just DSReady
-        "RESTORING" -> Just DSRestoring
-        _ -> Nothing
-
-instance ToText DiskStatus where
-    toText = \case
-        DSCreating -> "CREATING"
-        DSFailed -> "FAILED"
-        DSReady -> "READY"
-        DSRestoring -> "RESTORING"
-
-instance FromJSON DiskStatus where
-    parseJSON = parseJSONText "DiskStatus"
-
-instance ToJSON DiskStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the instance. This field is empty when the
--- instance does not exist.
-data ManagedInstanceInstanceStatus
-    = MIISProvisioning
-      -- ^ @PROVISIONING@
-    | MIISRunning
-      -- ^ @RUNNING@
-    | MIISStaging
-      -- ^ @STAGING@
-    | MIISStopped
-      -- ^ @STOPPED@
-    | MIISStopping
-      -- ^ @STOPPING@
-    | MIISSuspended
-      -- ^ @SUSPENDED@
-    | MIISSuspending
-      -- ^ @SUSPENDING@
-    | MIISTerminated
-      -- ^ @TERMINATED@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ManagedInstanceInstanceStatus
-
-instance FromText ManagedInstanceInstanceStatus where
-    fromText = \case
-        "PROVISIONING" -> Just MIISProvisioning
-        "RUNNING" -> Just MIISRunning
-        "STAGING" -> Just MIISStaging
-        "STOPPED" -> Just MIISStopped
-        "STOPPING" -> Just MIISStopping
-        "SUSPENDED" -> Just MIISSuspended
-        "SUSPENDING" -> Just MIISSuspending
-        "TERMINATED" -> Just MIISTerminated
-        _ -> Nothing
-
-instance ToText ManagedInstanceInstanceStatus where
-    toText = \case
-        MIISProvisioning -> "PROVISIONING"
-        MIISRunning -> "RUNNING"
-        MIISStaging -> "STAGING"
-        MIISStopped -> "STOPPED"
-        MIISStopping -> "STOPPING"
-        MIISSuspended -> "SUSPENDED"
-        MIISSuspending -> "SUSPENDING"
-        MIISTerminated -> "TERMINATED"
-
-instance FromJSON ManagedInstanceInstanceStatus where
-    parseJSON = parseJSONText "ManagedInstanceInstanceStatus"
-
-instance ToJSON ManagedInstanceInstanceStatus where
-    toJSON = toJSONText
-
--- | The mode in which to attach this disk, either READ_WRITE or READ_ONLY.
--- If not specified, the default is to attach the disk in READ_WRITE mode.
-data AttachedDiskMode
-    = ReadOnly
-      -- ^ @READ_ONLY@
-    | ReadWrite
-      -- ^ @READ_WRITE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AttachedDiskMode
-
-instance FromText AttachedDiskMode where
-    fromText = \case
-        "READ_ONLY" -> Just ReadOnly
-        "READ_WRITE" -> Just ReadWrite
-        _ -> Nothing
-
-instance ToText AttachedDiskMode where
-    toText = \case
-        ReadOnly -> "READ_ONLY"
-        ReadWrite -> "READ_WRITE"
-
-instance FromJSON AttachedDiskMode where
-    parseJSON = parseJSONText "AttachedDiskMode"
-
-instance ToJSON AttachedDiskMode where
-    toJSON = toJSONText
-
--- | [Output Only] Status of the region, either UP or DOWN.
-data RegionStatus
-    = Down
-      -- ^ @DOWN@
-    | UP
-      -- ^ @UP@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable RegionStatus
-
-instance FromText RegionStatus where
-    fromText = \case
-        "DOWN" -> Just Down
-        "UP" -> Just UP
-        _ -> Nothing
-
-instance ToText RegionStatus where
-    toText = \case
-        Down -> "DOWN"
-        UP -> "UP"
-
-instance FromJSON RegionStatus where
-    parseJSON = parseJSONText "RegionStatus"
-
-instance ToJSON RegionStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the VPN tunnel.
-data VPNTunnelStatus
-    = VTSAuthorizationError
-      -- ^ @AUTHORIZATION_ERROR@
-    | VTSDeprovisioning
-      -- ^ @DEPROVISIONING@
-    | VTSEstablished
-      -- ^ @ESTABLISHED@
-    | VTSFailed
-      -- ^ @FAILED@
-    | VTSFirstHandshake
-      -- ^ @FIRST_HANDSHAKE@
-    | VTSNegotiationFailure
-      -- ^ @NEGOTIATION_FAILURE@
-    | VTSNetworkError
-      -- ^ @NETWORK_ERROR@
-    | VTSNoIncomingPackets
-      -- ^ @NO_INCOMING_PACKETS@
-    | VTSProvisioning
-      -- ^ @PROVISIONING@
-    | VTSRejected
-      -- ^ @REJECTED@
-    | VTSWaitingForFullConfig
-      -- ^ @WAITING_FOR_FULL_CONFIG@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable VPNTunnelStatus
-
-instance FromText VPNTunnelStatus where
-    fromText = \case
-        "AUTHORIZATION_ERROR" -> Just VTSAuthorizationError
-        "DEPROVISIONING" -> Just VTSDeprovisioning
-        "ESTABLISHED" -> Just VTSEstablished
-        "FAILED" -> Just VTSFailed
-        "FIRST_HANDSHAKE" -> Just VTSFirstHandshake
-        "NEGOTIATION_FAILURE" -> Just VTSNegotiationFailure
-        "NETWORK_ERROR" -> Just VTSNetworkError
-        "NO_INCOMING_PACKETS" -> Just VTSNoIncomingPackets
-        "PROVISIONING" -> Just VTSProvisioning
-        "REJECTED" -> Just VTSRejected
-        "WAITING_FOR_FULL_CONFIG" -> Just VTSWaitingForFullConfig
-        _ -> Nothing
-
-instance ToText VPNTunnelStatus where
-    toText = \case
-        VTSAuthorizationError -> "AUTHORIZATION_ERROR"
-        VTSDeprovisioning -> "DEPROVISIONING"
-        VTSEstablished -> "ESTABLISHED"
-        VTSFailed -> "FAILED"
-        VTSFirstHandshake -> "FIRST_HANDSHAKE"
-        VTSNegotiationFailure -> "NEGOTIATION_FAILURE"
-        VTSNetworkError -> "NETWORK_ERROR"
-        VTSNoIncomingPackets -> "NO_INCOMING_PACKETS"
-        VTSProvisioning -> "PROVISIONING"
-        VTSRejected -> "REJECTED"
-        VTSWaitingForFullConfig -> "WAITING_FOR_FULL_CONFIG"
-
-instance FromJSON VPNTunnelStatus where
-    parseJSON = parseJSONText "VPNTunnelStatus"
-
-instance ToJSON VPNTunnelStatus where
-    toJSON = toJSONText
-
--- | Specifies the balancing mode for this backend. The default is
--- UTILIZATION but available values are UTILIZATION and RATE.
-data BackendBalancingMode
-    = Rate
-      -- ^ @RATE@
-    | Utilization
-      -- ^ @UTILIZATION@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable BackendBalancingMode
-
-instance FromText BackendBalancingMode where
-    fromText = \case
-        "RATE" -> Just Rate
-        "UTILIZATION" -> Just Utilization
-        _ -> Nothing
-
-instance ToText BackendBalancingMode where
-    toText = \case
-        Rate -> "RATE"
-        Utilization -> "UTILIZATION"
-
-instance FromJSON BackendBalancingMode where
-    parseJSON = parseJSONText "BackendBalancingMode"
-
-instance ToJSON BackendBalancingMode where
-    toJSON = toJSONText
-
--- | The IP protocol to which this rule applies. Valid options are TCP, UDP,
--- ESP, AH or SCTP.
-data ForwardingRuleIPProtocol
-    = AH
-      -- ^ @AH@
-    | Esp
-      -- ^ @ESP@
-    | Sctp
-      -- ^ @SCTP@
-    | TCP
-      -- ^ @TCP@
-    | Udp
-      -- ^ @UDP@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ForwardingRuleIPProtocol
-
-instance FromText ForwardingRuleIPProtocol where
-    fromText = \case
-        "AH" -> Just AH
-        "ESP" -> Just Esp
-        "SCTP" -> Just Sctp
-        "TCP" -> Just TCP
-        "UDP" -> Just Udp
-        _ -> Nothing
-
-instance ToText ForwardingRuleIPProtocol where
-    toText = \case
-        AH -> "AH"
-        Esp -> "ESP"
-        Sctp -> "SCTP"
-        TCP -> "TCP"
-        Udp -> "UDP"
-
-instance FromJSON ForwardingRuleIPProtocol where
-    parseJSON = parseJSONText "ForwardingRuleIPProtocol"
-
-instance ToJSON ForwardingRuleIPProtocol where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the address, which can be either IN_USE or
--- RESERVED. An address that is RESERVED is currently reserved and
--- available to use. An IN_USE address is currently being used by another
--- resource and is not available.
-data AddressStatus
-    = InUse
-      -- ^ @IN_USE@
-    | Reserved
-      -- ^ @RESERVED@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AddressStatus
-
-instance FromText AddressStatus where
-    fromText = \case
-        "IN_USE" -> Just InUse
-        "RESERVED" -> Just Reserved
-        _ -> Nothing
-
-instance ToText AddressStatus where
-    toText = \case
-        InUse -> "IN_USE"
-        Reserved -> "RESERVED"
-
-instance FromJSON AddressStatus where
-    parseJSON = parseJSONText "AddressStatus"
-
-instance ToJSON AddressStatus where
-    toJSON = toJSONText
-
--- | A filter for the state of the instances in the instance group. Valid
--- options are ALL or RUNNING. If you do not specify this parameter the
--- list includes all instances regardless of their state.
-data InstanceGroupsListInstancesRequestInstanceState
-    = IGLIRISAll
-      -- ^ @ALL@
-    | IGLIRISRunning
-      -- ^ @RUNNING@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable InstanceGroupsListInstancesRequestInstanceState
-
-instance FromText InstanceGroupsListInstancesRequestInstanceState where
-    fromText = \case
-        "ALL" -> Just IGLIRISAll
-        "RUNNING" -> Just IGLIRISRunning
-        _ -> Nothing
-
-instance ToText InstanceGroupsListInstancesRequestInstanceState where
-    toText = \case
-        IGLIRISAll -> "ALL"
-        IGLIRISRunning -> "RUNNING"
-
-instance FromJSON InstanceGroupsListInstancesRequestInstanceState where
-    parseJSON = parseJSONText "InstanceGroupsListInstancesRequestInstanceState"
-
-instance ToJSON InstanceGroupsListInstancesRequestInstanceState where
-    toJSON = toJSONText
-
--- | Specifies the disk interface to use for attaching this disk, either SCSI
--- or NVME. The default is SCSI. For performance characteristics of SCSI
--- over NVMe, see Local SSD performance.
-data AttachedDiskInterface
-    = Nvme
-      -- ^ @NVME@
-    | Scsi
-      -- ^ @SCSI@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AttachedDiskInterface
-
-instance FromText AttachedDiskInterface where
-    fromText = \case
-        "NVME" -> Just Nvme
-        "SCSI" -> Just Scsi
-        _ -> Nothing
-
-instance ToText AttachedDiskInterface where
-    toText = \case
-        Nvme -> "NVME"
-        Scsi -> "SCSI"
-
-instance FromJSON AttachedDiskInterface where
-    parseJSON = parseJSONText "AttachedDiskInterface"
-
-instance ToJSON AttachedDiskInterface where
-    toJSON = toJSONText
-
--- | [Output Only] Status of the zone, either UP or DOWN.
-data ZoneStatus
-    = ZSDown
-      -- ^ @DOWN@
-    | ZSUP
-      -- ^ @UP@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ZoneStatus
-
-instance FromText ZoneStatus where
-    fromText = \case
-        "DOWN" -> Just ZSDown
-        "UP" -> Just ZSUP
-        _ -> Nothing
-
-instance ToText ZoneStatus where
-    toText = \case
-        ZSDown -> "DOWN"
-        ZSUP -> "UP"
-
-instance FromJSON ZoneStatus where
-    parseJSON = parseJSONText "ZoneStatus"
-
-instance ToJSON ZoneStatus where
-    toJSON = toJSONText
-
--- | [Output Only] Name of the quota metric.
-data QuotaMetric
-    = BackendServices
-      -- ^ @BACKEND_SERVICES@
-    | CPUs
-      -- ^ @CPUS@
-    | DisksTotalGb
-      -- ^ @DISKS_TOTAL_GB@
-    | Firewalls
-      -- ^ @FIREWALLS@
-    | ForwardingRules
-      -- ^ @FORWARDING_RULES@
-    | HealthChecks
-      -- ^ @HEALTH_CHECKS@
-    | Images
-      -- ^ @IMAGES@
-    | Instances
-      -- ^ @INSTANCES@
-    | InstanceGroups
-      -- ^ @INSTANCE_GROUPS@
-    | InstanceGroupManagers
-      -- ^ @INSTANCE_GROUP_MANAGERS@
-    | InstanceTemplates
-      -- ^ @INSTANCE_TEMPLATES@
-    | InUseAddresses
-      -- ^ @IN_USE_ADDRESSES@
-    | LocalSsdTotalGb
-      -- ^ @LOCAL_SSD_TOTAL_GB@
-    | Networks
-      -- ^ @NETWORKS@
-    | Routes
-      -- ^ @ROUTES@
-    | Snapshots
-      -- ^ @SNAPSHOTS@
-    | SsdTotalGb
-      -- ^ @SSD_TOTAL_GB@
-    | StaticAddresses
-      -- ^ @STATIC_ADDRESSES@
-    | TargetHTTPProxies
-      -- ^ @TARGET_HTTP_PROXIES@
-    | TargetInstances
-      -- ^ @TARGET_INSTANCES@
-    | TargetPools
-      -- ^ @TARGET_POOLS@
-    | TargetVPNGateways
-      -- ^ @TARGET_VPN_GATEWAYS@
-    | URLMaps
-      -- ^ @URL_MAPS@
-    | VPNTunnels
-      -- ^ @VPN_TUNNELS@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable QuotaMetric
-
-instance FromText QuotaMetric where
-    fromText = \case
-        "BACKEND_SERVICES" -> Just BackendServices
-        "CPUS" -> Just CPUs
-        "DISKS_TOTAL_GB" -> Just DisksTotalGb
-        "FIREWALLS" -> Just Firewalls
-        "FORWARDING_RULES" -> Just ForwardingRules
-        "HEALTH_CHECKS" -> Just HealthChecks
-        "IMAGES" -> Just Images
-        "INSTANCES" -> Just Instances
-        "INSTANCE_GROUPS" -> Just InstanceGroups
-        "INSTANCE_GROUP_MANAGERS" -> Just InstanceGroupManagers
-        "INSTANCE_TEMPLATES" -> Just InstanceTemplates
-        "IN_USE_ADDRESSES" -> Just InUseAddresses
-        "LOCAL_SSD_TOTAL_GB" -> Just LocalSsdTotalGb
-        "NETWORKS" -> Just Networks
-        "ROUTES" -> Just Routes
-        "SNAPSHOTS" -> Just Snapshots
-        "SSD_TOTAL_GB" -> Just SsdTotalGb
-        "STATIC_ADDRESSES" -> Just StaticAddresses
-        "TARGET_HTTP_PROXIES" -> Just TargetHTTPProxies
-        "TARGET_INSTANCES" -> Just TargetInstances
-        "TARGET_POOLS" -> Just TargetPools
-        "TARGET_VPN_GATEWAYS" -> Just TargetVPNGateways
-        "URL_MAPS" -> Just URLMaps
-        "VPN_TUNNELS" -> Just VPNTunnels
-        _ -> Nothing
-
-instance ToText QuotaMetric where
-    toText = \case
-        BackendServices -> "BACKEND_SERVICES"
-        CPUs -> "CPUS"
-        DisksTotalGb -> "DISKS_TOTAL_GB"
-        Firewalls -> "FIREWALLS"
-        ForwardingRules -> "FORWARDING_RULES"
-        HealthChecks -> "HEALTH_CHECKS"
-        Images -> "IMAGES"
-        Instances -> "INSTANCES"
-        InstanceGroups -> "INSTANCE_GROUPS"
-        InstanceGroupManagers -> "INSTANCE_GROUP_MANAGERS"
-        InstanceTemplates -> "INSTANCE_TEMPLATES"
-        InUseAddresses -> "IN_USE_ADDRESSES"
-        LocalSsdTotalGb -> "LOCAL_SSD_TOTAL_GB"
-        Networks -> "NETWORKS"
-        Routes -> "ROUTES"
-        Snapshots -> "SNAPSHOTS"
-        SsdTotalGb -> "SSD_TOTAL_GB"
-        StaticAddresses -> "STATIC_ADDRESSES"
-        TargetHTTPProxies -> "TARGET_HTTP_PROXIES"
-        TargetInstances -> "TARGET_INSTANCES"
-        TargetPools -> "TARGET_POOLS"
-        TargetVPNGateways -> "TARGET_VPN_GATEWAYS"
-        URLMaps -> "URL_MAPS"
-        VPNTunnels -> "VPN_TUNNELS"
-
-instance FromJSON QuotaMetric where
-    parseJSON = parseJSONText "QuotaMetric"
-
-instance ToJSON QuotaMetric where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the instance. One of the following values:
--- PROVISIONING, STAGING, RUNNING, STOPPING, and TERMINATED.
-data InstanceStatus
-    = ISProvisioning
-      -- ^ @PROVISIONING@
-    | ISRunning
-      -- ^ @RUNNING@
-    | ISStaging
-      -- ^ @STAGING@
-    | ISStopped
-      -- ^ @STOPPED@
-    | ISStopping
-      -- ^ @STOPPING@
-    | ISSuspended
-      -- ^ @SUSPENDED@
-    | ISSuspending
-      -- ^ @SUSPENDING@
-    | ISTerminated
-      -- ^ @TERMINATED@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable InstanceStatus
-
-instance FromText InstanceStatus where
-    fromText = \case
-        "PROVISIONING" -> Just ISProvisioning
-        "RUNNING" -> Just ISRunning
-        "STAGING" -> Just ISStaging
-        "STOPPED" -> Just ISStopped
-        "STOPPING" -> Just ISStopping
-        "SUSPENDED" -> Just ISSuspended
-        "SUSPENDING" -> Just ISSuspending
-        "TERMINATED" -> Just ISTerminated
-        _ -> Nothing
-
-instance ToText InstanceStatus where
-    toText = \case
-        ISProvisioning -> "PROVISIONING"
-        ISRunning -> "RUNNING"
-        ISStaging -> "STAGING"
-        ISStopped -> "STOPPED"
-        ISStopping -> "STOPPING"
-        ISSuspended -> "SUSPENDED"
-        ISSuspending -> "SUSPENDING"
-        ISTerminated -> "TERMINATED"
-
-instance FromJSON InstanceStatus where
-    parseJSON = parseJSONText "InstanceStatus"
-
-instance ToJSON InstanceStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data MachineTypesScopedListWarningCode
-    = MTSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | MTSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | MTSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | MTSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | MTSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | MTSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | MTSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | MTSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | MTSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | MTSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | MTSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | MTSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | MTSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | MTSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable MachineTypesScopedListWarningCode
-
-instance FromText MachineTypesScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just MTSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just MTSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just MTSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just MTSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just MTSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just MTSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just MTSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just MTSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just MTSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just MTSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just MTSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just MTSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just MTSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just MTSLWCUnreachable
-        _ -> Nothing
-
-instance ToText MachineTypesScopedListWarningCode where
-    toText = \case
-        MTSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        MTSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        MTSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        MTSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        MTSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        MTSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        MTSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        MTSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        MTSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        MTSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        MTSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        MTSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        MTSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        MTSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON MachineTypesScopedListWarningCode where
-    parseJSON = parseJSONText "MachineTypesScopedListWarningCode"
-
-instance ToJSON MachineTypesScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data DiskTypesScopedListWarningCode
-    = DTSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | DTSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | DTSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | DTSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | DTSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | DTSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | DTSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | DTSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | DTSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | DTSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | DTSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | DTSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | DTSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | DTSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable DiskTypesScopedListWarningCode
-
-instance FromText DiskTypesScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just DTSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just DTSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just DTSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just DTSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just DTSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just DTSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just DTSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just DTSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just DTSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just DTSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just DTSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just DTSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just DTSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just DTSLWCUnreachable
-        _ -> Nothing
-
-instance ToText DiskTypesScopedListWarningCode where
-    toText = \case
-        DTSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        DTSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        DTSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        DTSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        DTSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        DTSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        DTSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        DTSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        DTSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        DTSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        DTSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        DTSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        DTSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        DTSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON DiskTypesScopedListWarningCode where
-    parseJSON = parseJSONText "DiskTypesScopedListWarningCode"
-
-instance ToJSON DiskTypesScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data AutoscalersScopedListWarningCode
-    = ADeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | ADiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | AInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | ANextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | ANextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | ANextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | ANextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | ANextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | ANotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | ANoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | ARequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | AResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | ASingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | AUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable AutoscalersScopedListWarningCode
-
-instance FromText AutoscalersScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just ADeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just ADiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just AInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just ANextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just ANextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just ANextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just ANextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just ANextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just ANotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just ANoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just ARequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just AResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just ASingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just AUnreachable
-        _ -> Nothing
-
-instance ToText AutoscalersScopedListWarningCode where
-    toText = \case
-        ADeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        ADiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        AInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        ANextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        ANextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        ANextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        ANextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        ANextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        ANotCriticalError -> "NOT_CRITICAL_ERROR"
-        ANoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        ARequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        AResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        ASingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        AUnreachable -> "UNREACHABLE"
-
-instance FromJSON AutoscalersScopedListWarningCode where
-    parseJSON = parseJSONText "AutoscalersScopedListWarningCode"
-
-instance ToJSON AutoscalersScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data VPNTunnelsScopedListWarningCode
-    = VTSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | VTSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | VTSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | VTSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | VTSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | VTSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | VTSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | VTSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | VTSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | VTSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | VTSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | VTSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | VTSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | VTSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable VPNTunnelsScopedListWarningCode
-
-instance FromText VPNTunnelsScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just VTSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just VTSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just VTSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just VTSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just VTSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just VTSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just VTSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just VTSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just VTSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just VTSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just VTSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just VTSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just VTSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just VTSLWCUnreachable
-        _ -> Nothing
-
-instance ToText VPNTunnelsScopedListWarningCode where
-    toText = \case
-        VTSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        VTSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        VTSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        VTSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        VTSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        VTSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        VTSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        VTSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        VTSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        VTSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        VTSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        VTSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        VTSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        VTSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON VPNTunnelsScopedListWarningCode where
-    parseJSON = parseJSONText "VPNTunnelsScopedListWarningCode"
-
-instance ToJSON VPNTunnelsScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data InstanceGroupsScopedListWarningCode
-    = IGSLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | IGSLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | IGSLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | IGSLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | IGSLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | IGSLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | IGSLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | IGSLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | IGSLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | IGSLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | IGSLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | IGSLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | IGSLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | IGSLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable InstanceGroupsScopedListWarningCode
-
-instance FromText InstanceGroupsScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just IGSLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just IGSLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just IGSLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just IGSLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just IGSLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just IGSLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just IGSLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just IGSLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just IGSLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just IGSLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just IGSLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just IGSLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just IGSLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just IGSLWCUnreachable
-        _ -> Nothing
-
-instance ToText InstanceGroupsScopedListWarningCode where
-    toText = \case
-        IGSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        IGSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        IGSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        IGSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        IGSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        IGSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        IGSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        IGSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        IGSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        IGSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        IGSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        IGSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        IGSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        IGSLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON InstanceGroupsScopedListWarningCode where
-    parseJSON = parseJSONText "InstanceGroupsScopedListWarningCode"
-
-instance ToJSON InstanceGroupsScopedListWarningCode where
-    toJSON = toJSONText
-
--- | [Output Only] The status of the instance.
-data InstanceWithNamedPortsStatus
-    = IWNPSProvisioning
-      -- ^ @PROVISIONING@
-    | IWNPSRunning
-      -- ^ @RUNNING@
-    | IWNPSStaging
-      -- ^ @STAGING@
-    | IWNPSStopped
-      -- ^ @STOPPED@
-    | IWNPSStopping
-      -- ^ @STOPPING@
-    | IWNPSSuspended
-      -- ^ @SUSPENDED@
-    | IWNPSSuspending
-      -- ^ @SUSPENDING@
-    | IWNPSTerminated
-      -- ^ @TERMINATED@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable InstanceWithNamedPortsStatus
-
-instance FromText InstanceWithNamedPortsStatus where
-    fromText = \case
-        "PROVISIONING" -> Just IWNPSProvisioning
-        "RUNNING" -> Just IWNPSRunning
-        "STAGING" -> Just IWNPSStaging
-        "STOPPED" -> Just IWNPSStopped
-        "STOPPING" -> Just IWNPSStopping
-        "SUSPENDED" -> Just IWNPSSuspended
-        "SUSPENDING" -> Just IWNPSSuspending
-        "TERMINATED" -> Just IWNPSTerminated
-        _ -> Nothing
-
-instance ToText InstanceWithNamedPortsStatus where
-    toText = \case
-        IWNPSProvisioning -> "PROVISIONING"
-        IWNPSRunning -> "RUNNING"
-        IWNPSStaging -> "STAGING"
-        IWNPSStopped -> "STOPPED"
-        IWNPSStopping -> "STOPPING"
-        IWNPSSuspended -> "SUSPENDED"
-        IWNPSSuspending -> "SUSPENDING"
-        IWNPSTerminated -> "TERMINATED"
-
-instance FromJSON InstanceWithNamedPortsStatus where
-    parseJSON = parseJSONText "InstanceWithNamedPortsStatus"
-
-instance ToJSON InstanceWithNamedPortsStatus where
-    toJSON = toJSONText
-
--- | [Output Only] The warning type identifier for this warning.
-data InstancesScopedListWarningCode
-    = ISLWCDeprecatedResourceUsed
-      -- ^ @DEPRECATED_RESOURCE_USED@
-    | ISLWCDiskSizeLargerThanImageSize
-      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
-    | ISLWCInjectedKernelsDeprecated
-      -- ^ @INJECTED_KERNELS_DEPRECATED@
-    | ISLWCNextHopAddressNotAssigned
-      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
-    | ISLWCNextHopCannotIPForward
-      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
-    | ISLWCNextHopInstanceNotFound
-      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
-    | ISLWCNextHopInstanceNotOnNetwork
-      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
-    | ISLWCNextHopNotRunning
-      -- ^ @NEXT_HOP_NOT_RUNNING@
-    | ISLWCNotCriticalError
-      -- ^ @NOT_CRITICAL_ERROR@
-    | ISLWCNoResultsOnPage
-      -- ^ @NO_RESULTS_ON_PAGE@
-    | ISLWCRequiredTosAgreement
-      -- ^ @REQUIRED_TOS_AGREEMENT@
-    | ISLWCResourceNotDeleted
-      -- ^ @RESOURCE_NOT_DELETED@
-    | ISLWCSingleInstancePropertyTemplate
-      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
-    | ISLWCUnreachable
-      -- ^ @UNREACHABLE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable InstancesScopedListWarningCode
-
-instance FromText InstancesScopedListWarningCode where
-    fromText = \case
-        "DEPRECATED_RESOURCE_USED" -> Just ISLWCDeprecatedResourceUsed
-        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Just ISLWCDiskSizeLargerThanImageSize
-        "INJECTED_KERNELS_DEPRECATED" -> Just ISLWCInjectedKernelsDeprecated
-        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Just ISLWCNextHopAddressNotAssigned
-        "NEXT_HOP_CANNOT_IP_FORWARD" -> Just ISLWCNextHopCannotIPForward
-        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Just ISLWCNextHopInstanceNotFound
-        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Just ISLWCNextHopInstanceNotOnNetwork
-        "NEXT_HOP_NOT_RUNNING" -> Just ISLWCNextHopNotRunning
-        "NOT_CRITICAL_ERROR" -> Just ISLWCNotCriticalError
-        "NO_RESULTS_ON_PAGE" -> Just ISLWCNoResultsOnPage
-        "REQUIRED_TOS_AGREEMENT" -> Just ISLWCRequiredTosAgreement
-        "RESOURCE_NOT_DELETED" -> Just ISLWCResourceNotDeleted
-        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Just ISLWCSingleInstancePropertyTemplate
-        "UNREACHABLE" -> Just ISLWCUnreachable
-        _ -> Nothing
-
-instance ToText InstancesScopedListWarningCode where
-    toText = \case
-        ISLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
-        ISLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
-        ISLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
-        ISLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
-        ISLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
-        ISLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
-        ISLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
-        ISLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
-        ISLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
-        ISLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
-        ISLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
-        ISLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
-        ISLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
-        ISLWCUnreachable -> "UNREACHABLE"
-
-instance FromJSON InstancesScopedListWarningCode where
-    parseJSON = parseJSONText "InstancesScopedListWarningCode"
-
-instance ToJSON InstancesScopedListWarningCode where
-    toJSON = toJSONText
-
--- | Sesssion affinity option, must be one of the following values: NONE:
--- Connections from the same client IP may go to any instance in the pool.
--- CLIENT_IP: Connections from the same client IP will go to the same
--- instance in the pool while that instance remains healthy.
--- CLIENT_IP_PROTO: Connections from the same client IP with the same IP
--- protocol will go to the same instance in the pool while that instance
--- remains healthy.
-data TargetPoolSessionAffinity
-    = ClientIP
-      -- ^ @CLIENT_IP@
-    | ClientIPProto
-      -- ^ @CLIENT_IP_PROTO@
-    | None
-      -- ^ @NONE@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable TargetPoolSessionAffinity
-
-instance FromText TargetPoolSessionAffinity where
-    fromText = \case
-        "CLIENT_IP" -> Just ClientIP
-        "CLIENT_IP_PROTO" -> Just ClientIPProto
-        "NONE" -> Just None
-        _ -> Nothing
-
-instance ToText TargetPoolSessionAffinity where
-    toText = \case
-        ClientIP -> "CLIENT_IP"
-        ClientIPProto -> "CLIENT_IP_PROTO"
-        None -> "NONE"
-
-instance FromJSON TargetPoolSessionAffinity where
-    parseJSON = parseJSONText "TargetPoolSessionAffinity"
-
-instance ToJSON TargetPoolSessionAffinity where
-    toJSON = toJSONText
-
--- | The format used to encode and transmit the block device, which should be
--- TAR. This is just a container and transmission format and not a runtime
--- format. Provided by the client when the disk image is created.
-data ImageRawDiskContainerType
-    = TAR
-      -- ^ @TAR@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable ImageRawDiskContainerType
-
-instance FromText ImageRawDiskContainerType where
-    fromText = \case
-        "TAR" -> Just TAR
-        _ -> Nothing
-
-instance ToText ImageRawDiskContainerType where
-    toText = \case
+-- 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.Compute.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Defines the maintenance behavior for this instance. For standard
+-- instances, the default behavior is MIGRATE. For preemptible instances,
+-- the default and only possible behavior is TERMINATE. For more
+-- information, see Setting Instance Scheduling Options.
+data SchedulingOnHostMaintenance
+    = Migrate
+      -- ^ @MIGRATE@
+    | Terminate
+      -- ^ @TERMINATE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SchedulingOnHostMaintenance
+
+instance FromHttpApiData SchedulingOnHostMaintenance where
+    parseQueryParam = \case
+        "MIGRATE" -> Right Migrate
+        "TERMINATE" -> Right Terminate
+        x -> Left ("Unable to parse SchedulingOnHostMaintenance from: " <> x)
+
+instance ToHttpApiData SchedulingOnHostMaintenance where
+    toQueryParam = \case
+        Migrate -> "MIGRATE"
+        Terminate -> "TERMINATE"
+
+instance FromJSON SchedulingOnHostMaintenance where
+    parseJSON = parseJSONText "SchedulingOnHostMaintenance"
+
+instance ToJSON SchedulingOnHostMaintenance where
+    toJSON = toJSONText
+
+-- | Defines how target utilization value is expressed for a Cloud Monitoring
+-- metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not
+-- specified, the default is GAUGE.
+data AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType
+    = DeltaPerMinute
+      -- ^ @DELTA_PER_MINUTE@
+    | DeltaPerSecond
+      -- ^ @DELTA_PER_SECOND@
+    | Gauge
+      -- ^ @GAUGE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType
+
+instance FromHttpApiData AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
+    parseQueryParam = \case
+        "DELTA_PER_MINUTE" -> Right DeltaPerMinute
+        "DELTA_PER_SECOND" -> Right DeltaPerSecond
+        "GAUGE" -> Right Gauge
+        x -> Left ("Unable to parse AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType from: " <> x)
+
+instance ToHttpApiData AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
+    toQueryParam = \case
+        DeltaPerMinute -> "DELTA_PER_MINUTE"
+        DeltaPerSecond -> "DELTA_PER_SECOND"
+        Gauge -> "GAUGE"
+
+instance FromJSON AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
+    parseJSON = parseJSONText "AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType"
+
+instance ToJSON AutoscalingPolicyCustomMetricUtilizationUtilizationTargetType where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data OperationWarningsItemCode
+    = CleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | DeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | DiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | InjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | NextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | NextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | NextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | NextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | NextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | NotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | NoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | RequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | ResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | SingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | Unreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OperationWarningsItemCode
+
+instance FromHttpApiData OperationWarningsItemCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right CleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right DeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right DiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right InjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right NextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right NextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right NextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right NextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right NextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right NotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right NoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right RequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right ResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right SingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right Unreachable
+        x -> Left ("Unable to parse OperationWarningsItemCode from: " <> x)
+
+instance ToHttpApiData OperationWarningsItemCode where
+    toQueryParam = \case
+        CleanupFailed -> "CLEANUP_FAILED"
+        DeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        DiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        InjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        NextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        NextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        NextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        NextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        NextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        NotCriticalError -> "NOT_CRITICAL_ERROR"
+        NoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        RequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        ResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        SingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        Unreachable -> "UNREACHABLE"
+
+instance FromJSON OperationWarningsItemCode where
+    parseJSON = parseJSONText "OperationWarningsItemCode"
+
+instance ToJSON OperationWarningsItemCode where
+    toJSON = toJSONText
+
+-- | The protocol this BackendService uses to communicate with backends.
+-- Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
+data BackendServiceProtocol
+    = HTTP
+      -- ^ @HTTP@
+    | HTTPS
+      -- ^ @HTTPS@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BackendServiceProtocol
+
+instance FromHttpApiData BackendServiceProtocol where
+    parseQueryParam = \case
+        "HTTP" -> Right HTTP
+        "HTTPS" -> Right HTTPS
+        x -> Left ("Unable to parse BackendServiceProtocol from: " <> x)
+
+instance ToHttpApiData BackendServiceProtocol where
+    toQueryParam = \case
+        HTTP -> "HTTP"
+        HTTPS -> "HTTPS"
+
+instance FromJSON BackendServiceProtocol where
+    parseJSON = parseJSONText "BackendServiceProtocol"
+
+instance ToJSON BackendServiceProtocol where
+    toJSON = toJSONText
+
+-- | Specifies the type of the disk, either SCRATCH or PERSISTENT. If not
+-- specified, the default is PERSISTENT.
+data AttachedDiskType
+    = Persistent
+      -- ^ @PERSISTENT@
+    | Scratch
+      -- ^ @SCRATCH@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AttachedDiskType
+
+instance FromHttpApiData AttachedDiskType where
+    parseQueryParam = \case
+        "PERSISTENT" -> Right Persistent
+        "SCRATCH" -> Right Scratch
+        x -> Left ("Unable to parse AttachedDiskType from: " <> x)
+
+instance ToHttpApiData AttachedDiskType where
+    toQueryParam = \case
+        Persistent -> "PERSISTENT"
+        Scratch -> "SCRATCH"
+
+instance FromJSON AttachedDiskType where
+    parseJSON = parseJSONText "AttachedDiskType"
+
+instance ToJSON AttachedDiskType where
+    toJSON = toJSONText
+
+-- | The type of the image used to create this disk. The default and only
+-- value is RAW
+data ImageSourceType
+    = Raw
+      -- ^ @RAW@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ImageSourceType
+
+instance FromHttpApiData ImageSourceType where
+    parseQueryParam = \case
+        "RAW" -> Right Raw
+        x -> Left ("Unable to parse ImageSourceType from: " <> x)
+
+instance ToHttpApiData ImageSourceType where
+    toQueryParam = \case
+        Raw -> "RAW"
+
+instance FromJSON ImageSourceType where
+    parseJSON = parseJSONText "ImageSourceType"
+
+instance ToJSON ImageSourceType where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data ForwardingRulesScopedListWarningCode
+    = FRSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | FRSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | FRSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | FRSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | FRSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | FRSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | FRSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | FRSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | FRSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | FRSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | FRSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | FRSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | FRSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | FRSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | FRSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ForwardingRulesScopedListWarningCode
+
+instance FromHttpApiData ForwardingRulesScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right FRSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right FRSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right FRSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right FRSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right FRSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right FRSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right FRSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right FRSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right FRSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right FRSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right FRSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right FRSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right FRSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right FRSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right FRSLWCUnreachable
+        x -> Left ("Unable to parse ForwardingRulesScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData ForwardingRulesScopedListWarningCode where
+    toQueryParam = \case
+        FRSLWCCleanupFailed -> "CLEANUP_FAILED"
+        FRSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        FRSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        FRSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        FRSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        FRSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        FRSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        FRSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        FRSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        FRSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        FRSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        FRSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        FRSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        FRSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        FRSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON ForwardingRulesScopedListWarningCode where
+    parseJSON = parseJSONText "ForwardingRulesScopedListWarningCode"
+
+instance ToJSON ForwardingRulesScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data OperationsScopedListWarningCode
+    = OSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | OSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | OSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | OSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | OSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | OSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | OSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | OSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | OSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | OSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | OSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | OSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | OSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | OSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | OSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OperationsScopedListWarningCode
+
+instance FromHttpApiData OperationsScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right OSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right OSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right OSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right OSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right OSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right OSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right OSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right OSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right OSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right OSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right OSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right OSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right OSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right OSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right OSLWCUnreachable
+        x -> Left ("Unable to parse OperationsScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData OperationsScopedListWarningCode where
+    toQueryParam = \case
+        OSLWCCleanupFailed -> "CLEANUP_FAILED"
+        OSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        OSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        OSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        OSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        OSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        OSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        OSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        OSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        OSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        OSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        OSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        OSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        OSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        OSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON OperationsScopedListWarningCode where
+    parseJSON = parseJSONText "OperationsScopedListWarningCode"
+
+instance ToJSON OperationsScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data DisksScopedListWarningCode
+    = DSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | DSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | DSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | DSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | DSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | DSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | DSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | DSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | DSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | DSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | DSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | DSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | DSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | DSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | DSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DisksScopedListWarningCode
+
+instance FromHttpApiData DisksScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right DSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right DSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right DSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right DSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right DSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right DSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right DSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right DSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right DSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right DSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right DSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right DSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right DSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right DSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right DSLWCUnreachable
+        x -> Left ("Unable to parse DisksScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData DisksScopedListWarningCode where
+    toQueryParam = \case
+        DSLWCCleanupFailed -> "CLEANUP_FAILED"
+        DSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        DSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        DSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        DSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        DSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        DSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        DSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        DSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        DSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        DSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        DSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        DSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        DSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        DSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON DisksScopedListWarningCode where
+    parseJSON = parseJSONText "DisksScopedListWarningCode"
+
+instance ToJSON DisksScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data InstanceGroupManagersScopedListWarningCode
+    = IGMSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | IGMSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | IGMSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | IGMSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | IGMSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | IGMSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | IGMSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | IGMSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | IGMSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | IGMSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | IGMSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | IGMSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | IGMSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | IGMSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | IGMSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InstanceGroupManagersScopedListWarningCode
+
+instance FromHttpApiData InstanceGroupManagersScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right IGMSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right IGMSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right IGMSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right IGMSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right IGMSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right IGMSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right IGMSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right IGMSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right IGMSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right IGMSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right IGMSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right IGMSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right IGMSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right IGMSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right IGMSLWCUnreachable
+        x -> Left ("Unable to parse InstanceGroupManagersScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData InstanceGroupManagersScopedListWarningCode where
+    toQueryParam = \case
+        IGMSLWCCleanupFailed -> "CLEANUP_FAILED"
+        IGMSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        IGMSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        IGMSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        IGMSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        IGMSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        IGMSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        IGMSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        IGMSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        IGMSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        IGMSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        IGMSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        IGMSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        IGMSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        IGMSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON InstanceGroupManagersScopedListWarningCode where
+    parseJSON = parseJSONText "InstanceGroupManagersScopedListWarningCode"
+
+instance ToJSON InstanceGroupManagersScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data TargetPoolsScopedListWarningCode
+    = TPSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | TPSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | TPSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | TPSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | TPSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | TPSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | TPSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | TPSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | TPSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | TPSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | TPSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | TPSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | TPSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | TPSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | TPSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetPoolsScopedListWarningCode
+
+instance FromHttpApiData TargetPoolsScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right TPSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right TPSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right TPSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right TPSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right TPSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right TPSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right TPSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right TPSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right TPSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right TPSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right TPSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right TPSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right TPSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right TPSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right TPSLWCUnreachable
+        x -> Left ("Unable to parse TargetPoolsScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData TargetPoolsScopedListWarningCode where
+    toQueryParam = \case
+        TPSLWCCleanupFailed -> "CLEANUP_FAILED"
+        TPSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        TPSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        TPSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        TPSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        TPSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        TPSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        TPSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        TPSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        TPSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        TPSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        TPSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        TPSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        TPSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        TPSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON TargetPoolsScopedListWarningCode where
+    parseJSON = parseJSONText "TargetPoolsScopedListWarningCode"
+
+instance ToJSON TargetPoolsScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the VPN gateway.
+data TargetVPNGatewayStatus
+    = Creating
+      -- ^ @CREATING@
+    | Deleting
+      -- ^ @DELETING@
+    | Failed
+      -- ^ @FAILED@
+    | Ready
+      -- ^ @READY@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetVPNGatewayStatus
+
+instance FromHttpApiData TargetVPNGatewayStatus where
+    parseQueryParam = \case
+        "CREATING" -> Right Creating
+        "DELETING" -> Right Deleting
+        "FAILED" -> Right Failed
+        "READY" -> Right Ready
+        x -> Left ("Unable to parse TargetVPNGatewayStatus from: " <> x)
+
+instance ToHttpApiData TargetVPNGatewayStatus where
+    toQueryParam = \case
+        Creating -> "CREATING"
+        Deleting -> "DELETING"
+        Failed -> "FAILED"
+        Ready -> "READY"
+
+instance FromJSON TargetVPNGatewayStatus where
+    parseJSON = parseJSONText "TargetVPNGatewayStatus"
+
+instance ToJSON TargetVPNGatewayStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the snapshot. This can be CREATING,
+-- DELETING, FAILED, READY, or UPLOADING.
+data SnapshotStatus
+    = SSCreating
+      -- ^ @CREATING@
+    | SSDeleting
+      -- ^ @DELETING@
+    | SSFailed
+      -- ^ @FAILED@
+    | SSReady
+      -- ^ @READY@
+    | SSUploading
+      -- ^ @UPLOADING@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SnapshotStatus
+
+instance FromHttpApiData SnapshotStatus where
+    parseQueryParam = \case
+        "CREATING" -> Right SSCreating
+        "DELETING" -> Right SSDeleting
+        "FAILED" -> Right SSFailed
+        "READY" -> Right SSReady
+        "UPLOADING" -> Right SSUploading
+        x -> Left ("Unable to parse SnapshotStatus from: " <> x)
+
+instance ToHttpApiData SnapshotStatus where
+    toQueryParam = \case
+        SSCreating -> "CREATING"
+        SSDeleting -> "DELETING"
+        SSFailed -> "FAILED"
+        SSReady -> "READY"
+        SSUploading -> "UPLOADING"
+
+instance FromJSON SnapshotStatus where
+    parseJSON = parseJSONText "SnapshotStatus"
+
+instance ToJSON SnapshotStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data TargetInstancesScopedListWarningCode
+    = TISLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | TISLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | TISLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | TISLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | TISLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | TISLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | TISLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | TISLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | TISLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | TISLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | TISLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | TISLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | TISLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | TISLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | TISLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetInstancesScopedListWarningCode
+
+instance FromHttpApiData TargetInstancesScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right TISLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right TISLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right TISLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right TISLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right TISLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right TISLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right TISLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right TISLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right TISLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right TISLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right TISLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right TISLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right TISLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right TISLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right TISLWCUnreachable
+        x -> Left ("Unable to parse TargetInstancesScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData TargetInstancesScopedListWarningCode where
+    toQueryParam = \case
+        TISLWCCleanupFailed -> "CLEANUP_FAILED"
+        TISLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        TISLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        TISLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        TISLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        TISLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        TISLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        TISLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        TISLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        TISLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        TISLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        TISLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        TISLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        TISLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        TISLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON TargetInstancesScopedListWarningCode where
+    parseJSON = parseJSONText "TargetInstancesScopedListWarningCode"
+
+instance ToJSON TargetInstancesScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data RouteWarningsItemCode
+    = RWICCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | RWICDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | RWICDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | RWICInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | RWICNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | RWICNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | RWICNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | RWICNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | RWICNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | RWICNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | RWICNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | RWICRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | RWICResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | RWICSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | RWICUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RouteWarningsItemCode
+
+instance FromHttpApiData RouteWarningsItemCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right RWICCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right RWICDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right RWICDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right RWICInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right RWICNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right RWICNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right RWICNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right RWICNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right RWICNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right RWICNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right RWICNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right RWICRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right RWICResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right RWICSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right RWICUnreachable
+        x -> Left ("Unable to parse RouteWarningsItemCode from: " <> x)
+
+instance ToHttpApiData RouteWarningsItemCode where
+    toQueryParam = \case
+        RWICCleanupFailed -> "CLEANUP_FAILED"
+        RWICDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        RWICDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        RWICInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        RWICNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        RWICNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        RWICNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        RWICNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        RWICNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        RWICNotCriticalError -> "NOT_CRITICAL_ERROR"
+        RWICNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        RWICRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        RWICResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        RWICSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        RWICUnreachable -> "UNREACHABLE"
+
+instance FromJSON RouteWarningsItemCode where
+    parseJSON = parseJSONText "RouteWarningsItemCode"
+
+instance ToJSON RouteWarningsItemCode where
+    toJSON = toJSONText
+
+-- | [Output Only] An indicator whether storageBytes is in a stable state or
+-- it is being adjusted as a result of shared storage reallocation. This
+-- status can either be UPDATING, meaning the size of the snapshot is being
+-- updated, or UP_TO_DATE, meaning the size of the snapshot is up-to-date.
+data SnapshotStorageBytesStatus
+    = Updating
+      -- ^ @UPDATING@
+    | UpToDate
+      -- ^ @UP_TO_DATE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SnapshotStorageBytesStatus
+
+instance FromHttpApiData SnapshotStorageBytesStatus where
+    parseQueryParam = \case
+        "UPDATING" -> Right Updating
+        "UP_TO_DATE" -> Right UpToDate
+        x -> Left ("Unable to parse SnapshotStorageBytesStatus from: " <> x)
+
+instance ToHttpApiData SnapshotStorageBytesStatus where
+    toQueryParam = \case
+        Updating -> "UPDATING"
+        UpToDate -> "UP_TO_DATE"
+
+instance FromJSON SnapshotStorageBytesStatus where
+    parseJSON = parseJSONText "SnapshotStorageBytesStatus"
+
+instance ToJSON SnapshotStorageBytesStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data AddressesScopedListWarningCode
+    = ASLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | ASLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | ASLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | ASLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | ASLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | ASLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | ASLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | ASLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | ASLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | ASLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | ASLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | ASLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | ASLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | ASLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | ASLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AddressesScopedListWarningCode
+
+instance FromHttpApiData AddressesScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right ASLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right ASLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right ASLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right ASLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right ASLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right ASLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right ASLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right ASLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right ASLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right ASLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right ASLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right ASLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right ASLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right ASLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right ASLWCUnreachable
+        x -> Left ("Unable to parse AddressesScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData AddressesScopedListWarningCode where
+    toQueryParam = \case
+        ASLWCCleanupFailed -> "CLEANUP_FAILED"
+        ASLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        ASLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        ASLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        ASLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        ASLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        ASLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        ASLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        ASLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        ASLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        ASLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        ASLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        ASLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        ASLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        ASLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON AddressesScopedListWarningCode where
+    parseJSON = parseJSONText "AddressesScopedListWarningCode"
+
+instance ToJSON AddressesScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the image. An image can be used to create
+-- other resources, such as instances, only after the image has been
+-- successfully created and the status is set to READY. Possible values are
+-- FAILED, PENDING, or READY.
+data ImageStatus
+    = ISFailed
+      -- ^ @FAILED@
+    | ISPending
+      -- ^ @PENDING@
+    | ISReady
+      -- ^ @READY@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ImageStatus
+
+instance FromHttpApiData ImageStatus where
+    parseQueryParam = \case
+        "FAILED" -> Right ISFailed
+        "PENDING" -> Right ISPending
+        "READY" -> Right ISReady
+        x -> Left ("Unable to parse ImageStatus from: " <> x)
+
+instance ToHttpApiData ImageStatus where
+    toQueryParam = \case
+        ISFailed -> "FAILED"
+        ISPending -> "PENDING"
+        ISReady -> "READY"
+
+instance FromJSON ImageStatus where
+    parseJSON = parseJSONText "ImageStatus"
+
+instance ToJSON ImageStatus where
+    toJSON = toJSONText
+
+-- | Health state of the instance.
+data HealthStatusHealthState
+    = Healthy
+      -- ^ @HEALTHY@
+    | Unhealthy
+      -- ^ @UNHEALTHY@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable HealthStatusHealthState
+
+instance FromHttpApiData HealthStatusHealthState where
+    parseQueryParam = \case
+        "HEALTHY" -> Right Healthy
+        "UNHEALTHY" -> Right Unhealthy
+        x -> Left ("Unable to parse HealthStatusHealthState from: " <> x)
+
+instance ToHttpApiData HealthStatusHealthState where
+    toQueryParam = \case
+        Healthy -> "HEALTHY"
+        Unhealthy -> "UNHEALTHY"
+
+instance FromJSON HealthStatusHealthState where
+    parseJSON = parseJSONText "HealthStatusHealthState"
+
+instance ToJSON HealthStatusHealthState where
+    toJSON = toJSONText
+
+-- | The deprecation state of this resource. This can be DEPRECATED,
+-- OBSOLETE, or DELETED. Operations which create a new resource using a
+-- DEPRECATED resource will return successfully, but with a warning
+-- indicating the deprecated resource and recommending its replacement.
+-- Operations which use OBSOLETE or DELETED resources will be rejected and
+-- result in an error.
+data DeprecationStatusState
+    = Deleted
+      -- ^ @DELETED@
+    | Deprecated
+      -- ^ @DEPRECATED@
+    | Obsolete
+      -- ^ @OBSOLETE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DeprecationStatusState
+
+instance FromHttpApiData DeprecationStatusState where
+    parseQueryParam = \case
+        "DELETED" -> Right Deleted
+        "DEPRECATED" -> Right Deprecated
+        "OBSOLETE" -> Right Obsolete
+        x -> Left ("Unable to parse DeprecationStatusState from: " <> x)
+
+instance ToHttpApiData DeprecationStatusState where
+    toQueryParam = \case
+        Deleted -> "DELETED"
+        Deprecated -> "DEPRECATED"
+        Obsolete -> "OBSOLETE"
+
+instance FromJSON DeprecationStatusState where
+    parseJSON = parseJSONText "DeprecationStatusState"
+
+instance ToJSON DeprecationStatusState where
+    toJSON = toJSONText
+
+-- | [Output Only] The current action that the managed instance group has
+-- scheduled for the instance. Possible values: - NONE The instance is
+-- running, and the managed instance group does not have any scheduled
+-- actions for this instance. - CREATING The managed instance group is
+-- creating this instance. If the group fails to create this instance, it
+-- will try again until it is successful. - CREATING_WITHOUT_RETRIES The
+-- managed instance group is attempting to create this instance only once.
+-- If the group fails to create this instance, it does not try again and
+-- the group\'s target_size value is decreased. - RECREATING The managed
+-- instance group is recreating this instance. - DELETING The managed
+-- instance group is permanently deleting this instance. - ABANDONING The
+-- managed instance group is abandoning this instance. The instance will be
+-- removed from the instance group and from any target pools that are
+-- associated with this group. - RESTARTING The managed instance group is
+-- restarting the instance. - REFRESHING The managed instance group is
+-- applying configuration changes to the instance without stopping it. For
+-- example, the group can update the target pool list for an instance
+-- without stopping that instance.
+data ManagedInstanceCurrentAction
+    = MICAAbandoning
+      -- ^ @ABANDONING@
+    | MICACreating
+      -- ^ @CREATING@
+    | MICADeleting
+      -- ^ @DELETING@
+    | MICANone
+      -- ^ @NONE@
+    | MICARecreating
+      -- ^ @RECREATING@
+    | MICARefreshing
+      -- ^ @REFRESHING@
+    | MICARestarting
+      -- ^ @RESTARTING@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ManagedInstanceCurrentAction
+
+instance FromHttpApiData ManagedInstanceCurrentAction where
+    parseQueryParam = \case
+        "ABANDONING" -> Right MICAAbandoning
+        "CREATING" -> Right MICACreating
+        "DELETING" -> Right MICADeleting
+        "NONE" -> Right MICANone
+        "RECREATING" -> Right MICARecreating
+        "REFRESHING" -> Right MICARefreshing
+        "RESTARTING" -> Right MICARestarting
+        x -> Left ("Unable to parse ManagedInstanceCurrentAction from: " <> x)
+
+instance ToHttpApiData ManagedInstanceCurrentAction where
+    toQueryParam = \case
+        MICAAbandoning -> "ABANDONING"
+        MICACreating -> "CREATING"
+        MICADeleting -> "DELETING"
+        MICANone -> "NONE"
+        MICARecreating -> "RECREATING"
+        MICARefreshing -> "REFRESHING"
+        MICARestarting -> "RESTARTING"
+
+instance FromJSON ManagedInstanceCurrentAction where
+    parseJSON = parseJSONText "ManagedInstanceCurrentAction"
+
+instance ToJSON ManagedInstanceCurrentAction where
+    toJSON = toJSONText
+
+-- | NAT option controlling how IPs are NAT\'ed to the instance. Currently
+-- only NO_NAT (default value) is supported.
+data TargetInstanceNATPolicy
+    = NoNAT
+      -- ^ @NO_NAT@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetInstanceNATPolicy
+
+instance FromHttpApiData TargetInstanceNATPolicy where
+    parseQueryParam = \case
+        "NO_NAT" -> Right NoNAT
+        x -> Left ("Unable to parse TargetInstanceNATPolicy from: " <> x)
+
+instance ToHttpApiData TargetInstanceNATPolicy where
+    toQueryParam = \case
+        NoNAT -> "NO_NAT"
+
+instance FromJSON TargetInstanceNATPolicy where
+    parseJSON = parseJSONText "TargetInstanceNATPolicy"
+
+instance ToJSON TargetInstanceNATPolicy where
+    toJSON = toJSONText
+
+-- | The type of configuration. The default and only option is
+-- ONE_TO_ONE_NAT.
+data AccessConfigType
+    = OneToOneNAT
+      -- ^ @ONE_TO_ONE_NAT@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AccessConfigType
+
+instance FromHttpApiData AccessConfigType where
+    parseQueryParam = \case
+        "ONE_TO_ONE_NAT" -> Right OneToOneNAT
+        x -> Left ("Unable to parse AccessConfigType from: " <> x)
+
+instance ToHttpApiData AccessConfigType where
+    toQueryParam = \case
+        OneToOneNAT -> "ONE_TO_ONE_NAT"
+
+instance FromJSON AccessConfigType where
+    parseJSON = parseJSONText "AccessConfigType"
+
+instance ToJSON AccessConfigType where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the operation, which can be one of the
+-- following: PENDING, RUNNING, or DONE.
+data OperationStatus
+    = Done
+      -- ^ @DONE@
+    | Pending
+      -- ^ @PENDING@
+    | Running
+      -- ^ @RUNNING@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable OperationStatus
+
+instance FromHttpApiData OperationStatus where
+    parseQueryParam = \case
+        "DONE" -> Right Done
+        "PENDING" -> Right Pending
+        "RUNNING" -> Right Running
+        x -> Left ("Unable to parse OperationStatus from: " <> x)
+
+instance ToHttpApiData OperationStatus where
+    toQueryParam = \case
+        Done -> "DONE"
+        Pending -> "PENDING"
+        Running -> "RUNNING"
+
+instance FromJSON OperationStatus where
+    parseJSON = parseJSONText "OperationStatus"
+
+instance ToJSON OperationStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data TargetVPNGatewaysScopedListWarningCode
+    = TVGSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | TVGSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | TVGSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | TVGSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | TVGSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | TVGSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | TVGSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | TVGSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | TVGSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | TVGSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | TVGSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | TVGSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | TVGSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | TVGSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | TVGSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetVPNGatewaysScopedListWarningCode
+
+instance FromHttpApiData TargetVPNGatewaysScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right TVGSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right TVGSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right TVGSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right TVGSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right TVGSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right TVGSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right TVGSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right TVGSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right TVGSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right TVGSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right TVGSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right TVGSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right TVGSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right TVGSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right TVGSLWCUnreachable
+        x -> Left ("Unable to parse TargetVPNGatewaysScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData TargetVPNGatewaysScopedListWarningCode where
+    toQueryParam = \case
+        TVGSLWCCleanupFailed -> "CLEANUP_FAILED"
+        TVGSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        TVGSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        TVGSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        TVGSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        TVGSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        TVGSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        TVGSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        TVGSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        TVGSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        TVGSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        TVGSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        TVGSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        TVGSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        TVGSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON TargetVPNGatewaysScopedListWarningCode where
+    parseJSON = parseJSONText "TargetVPNGatewaysScopedListWarningCode"
+
+instance ToJSON TargetVPNGatewaysScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of disk creation. Applicable statuses includes:
+-- CREATING, FAILED, READY, RESTORING.
+data DiskStatus
+    = DSCreating
+      -- ^ @CREATING@
+    | DSFailed
+      -- ^ @FAILED@
+    | DSReady
+      -- ^ @READY@
+    | DSRestoring
+      -- ^ @RESTORING@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DiskStatus
+
+instance FromHttpApiData DiskStatus where
+    parseQueryParam = \case
+        "CREATING" -> Right DSCreating
+        "FAILED" -> Right DSFailed
+        "READY" -> Right DSReady
+        "RESTORING" -> Right DSRestoring
+        x -> Left ("Unable to parse DiskStatus from: " <> x)
+
+instance ToHttpApiData DiskStatus where
+    toQueryParam = \case
+        DSCreating -> "CREATING"
+        DSFailed -> "FAILED"
+        DSReady -> "READY"
+        DSRestoring -> "RESTORING"
+
+instance FromJSON DiskStatus where
+    parseJSON = parseJSONText "DiskStatus"
+
+instance ToJSON DiskStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the instance. This field is empty when the
+-- instance does not exist.
+data ManagedInstanceInstanceStatus
+    = MIISProvisioning
+      -- ^ @PROVISIONING@
+    | MIISRunning
+      -- ^ @RUNNING@
+    | MIISStaging
+      -- ^ @STAGING@
+    | MIISStopped
+      -- ^ @STOPPED@
+    | MIISStopping
+      -- ^ @STOPPING@
+    | MIISSuspended
+      -- ^ @SUSPENDED@
+    | MIISSuspending
+      -- ^ @SUSPENDING@
+    | MIISTerminated
+      -- ^ @TERMINATED@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ManagedInstanceInstanceStatus
+
+instance FromHttpApiData ManagedInstanceInstanceStatus where
+    parseQueryParam = \case
+        "PROVISIONING" -> Right MIISProvisioning
+        "RUNNING" -> Right MIISRunning
+        "STAGING" -> Right MIISStaging
+        "STOPPED" -> Right MIISStopped
+        "STOPPING" -> Right MIISStopping
+        "SUSPENDED" -> Right MIISSuspended
+        "SUSPENDING" -> Right MIISSuspending
+        "TERMINATED" -> Right MIISTerminated
+        x -> Left ("Unable to parse ManagedInstanceInstanceStatus from: " <> x)
+
+instance ToHttpApiData ManagedInstanceInstanceStatus where
+    toQueryParam = \case
+        MIISProvisioning -> "PROVISIONING"
+        MIISRunning -> "RUNNING"
+        MIISStaging -> "STAGING"
+        MIISStopped -> "STOPPED"
+        MIISStopping -> "STOPPING"
+        MIISSuspended -> "SUSPENDED"
+        MIISSuspending -> "SUSPENDING"
+        MIISTerminated -> "TERMINATED"
+
+instance FromJSON ManagedInstanceInstanceStatus where
+    parseJSON = parseJSONText "ManagedInstanceInstanceStatus"
+
+instance ToJSON ManagedInstanceInstanceStatus where
+    toJSON = toJSONText
+
+-- | The mode in which to attach this disk, either READ_WRITE or READ_ONLY.
+-- If not specified, the default is to attach the disk in READ_WRITE mode.
+data AttachedDiskMode
+    = ReadOnly
+      -- ^ @READ_ONLY@
+    | ReadWrite
+      -- ^ @READ_WRITE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AttachedDiskMode
+
+instance FromHttpApiData AttachedDiskMode where
+    parseQueryParam = \case
+        "READ_ONLY" -> Right ReadOnly
+        "READ_WRITE" -> Right ReadWrite
+        x -> Left ("Unable to parse AttachedDiskMode from: " <> x)
+
+instance ToHttpApiData AttachedDiskMode where
+    toQueryParam = \case
+        ReadOnly -> "READ_ONLY"
+        ReadWrite -> "READ_WRITE"
+
+instance FromJSON AttachedDiskMode where
+    parseJSON = parseJSONText "AttachedDiskMode"
+
+instance ToJSON AttachedDiskMode where
+    toJSON = toJSONText
+
+-- | [Output Only] Status of the region, either UP or DOWN.
+data RegionStatus
+    = Down
+      -- ^ @DOWN@
+    | UP
+      -- ^ @UP@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable RegionStatus
+
+instance FromHttpApiData RegionStatus where
+    parseQueryParam = \case
+        "DOWN" -> Right Down
+        "UP" -> Right UP
+        x -> Left ("Unable to parse RegionStatus from: " <> x)
+
+instance ToHttpApiData RegionStatus where
+    toQueryParam = \case
+        Down -> "DOWN"
+        UP -> "UP"
+
+instance FromJSON RegionStatus where
+    parseJSON = parseJSONText "RegionStatus"
+
+instance ToJSON RegionStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the VPN tunnel.
+data VPNTunnelStatus
+    = VTSAllocatingResources
+      -- ^ @ALLOCATING_RESOURCES@
+    | VTSAuthorizationError
+      -- ^ @AUTHORIZATION_ERROR@
+    | VTSDeprovisioning
+      -- ^ @DEPROVISIONING@
+    | VTSEstablished
+      -- ^ @ESTABLISHED@
+    | VTSFailed
+      -- ^ @FAILED@
+    | VTSFirstHandshake
+      -- ^ @FIRST_HANDSHAKE@
+    | VTSNegotiationFailure
+      -- ^ @NEGOTIATION_FAILURE@
+    | VTSNetworkError
+      -- ^ @NETWORK_ERROR@
+    | VTSNoIncomingPackets
+      -- ^ @NO_INCOMING_PACKETS@
+    | VTSProvisioning
+      -- ^ @PROVISIONING@
+    | VTSRejected
+      -- ^ @REJECTED@
+    | VTSWaitingForFullConfig
+      -- ^ @WAITING_FOR_FULL_CONFIG@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable VPNTunnelStatus
+
+instance FromHttpApiData VPNTunnelStatus where
+    parseQueryParam = \case
+        "ALLOCATING_RESOURCES" -> Right VTSAllocatingResources
+        "AUTHORIZATION_ERROR" -> Right VTSAuthorizationError
+        "DEPROVISIONING" -> Right VTSDeprovisioning
+        "ESTABLISHED" -> Right VTSEstablished
+        "FAILED" -> Right VTSFailed
+        "FIRST_HANDSHAKE" -> Right VTSFirstHandshake
+        "NEGOTIATION_FAILURE" -> Right VTSNegotiationFailure
+        "NETWORK_ERROR" -> Right VTSNetworkError
+        "NO_INCOMING_PACKETS" -> Right VTSNoIncomingPackets
+        "PROVISIONING" -> Right VTSProvisioning
+        "REJECTED" -> Right VTSRejected
+        "WAITING_FOR_FULL_CONFIG" -> Right VTSWaitingForFullConfig
+        x -> Left ("Unable to parse VPNTunnelStatus from: " <> x)
+
+instance ToHttpApiData VPNTunnelStatus where
+    toQueryParam = \case
+        VTSAllocatingResources -> "ALLOCATING_RESOURCES"
+        VTSAuthorizationError -> "AUTHORIZATION_ERROR"
+        VTSDeprovisioning -> "DEPROVISIONING"
+        VTSEstablished -> "ESTABLISHED"
+        VTSFailed -> "FAILED"
+        VTSFirstHandshake -> "FIRST_HANDSHAKE"
+        VTSNegotiationFailure -> "NEGOTIATION_FAILURE"
+        VTSNetworkError -> "NETWORK_ERROR"
+        VTSNoIncomingPackets -> "NO_INCOMING_PACKETS"
+        VTSProvisioning -> "PROVISIONING"
+        VTSRejected -> "REJECTED"
+        VTSWaitingForFullConfig -> "WAITING_FOR_FULL_CONFIG"
+
+instance FromJSON VPNTunnelStatus where
+    parseJSON = parseJSONText "VPNTunnelStatus"
+
+instance ToJSON VPNTunnelStatus where
+    toJSON = toJSONText
+
+-- | Specifies the balancing mode for this backend. For global HTTP(S) load
+-- balancing, the default is UTILIZATION. Valid values are UTILIZATION and
+-- RATE.
+data BackendBalancingMode
+    = Rate
+      -- ^ @RATE@
+    | Utilization
+      -- ^ @UTILIZATION@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable BackendBalancingMode
+
+instance FromHttpApiData BackendBalancingMode where
+    parseQueryParam = \case
+        "RATE" -> Right Rate
+        "UTILIZATION" -> Right Utilization
+        x -> Left ("Unable to parse BackendBalancingMode from: " <> x)
+
+instance ToHttpApiData BackendBalancingMode where
+    toQueryParam = \case
+        Rate -> "RATE"
+        Utilization -> "UTILIZATION"
+
+instance FromJSON BackendBalancingMode where
+    parseJSON = parseJSONText "BackendBalancingMode"
+
+instance ToJSON BackendBalancingMode where
+    toJSON = toJSONText
+
+-- | The IP protocol to which this rule applies. Valid options are TCP, UDP,
+-- ESP, AH, SCTP or ICMP.
+data ForwardingRuleIPProtocol
+    = AH
+      -- ^ @AH@
+    | Esp
+      -- ^ @ESP@
+    | Sctp
+      -- ^ @SCTP@
+    | TCP
+      -- ^ @TCP@
+    | Udp
+      -- ^ @UDP@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ForwardingRuleIPProtocol
+
+instance FromHttpApiData ForwardingRuleIPProtocol where
+    parseQueryParam = \case
+        "AH" -> Right AH
+        "ESP" -> Right Esp
+        "SCTP" -> Right Sctp
+        "TCP" -> Right TCP
+        "UDP" -> Right Udp
+        x -> Left ("Unable to parse ForwardingRuleIPProtocol from: " <> x)
+
+instance ToHttpApiData ForwardingRuleIPProtocol where
+    toQueryParam = \case
+        AH -> "AH"
+        Esp -> "ESP"
+        Sctp -> "SCTP"
+        TCP -> "TCP"
+        Udp -> "UDP"
+
+instance FromJSON ForwardingRuleIPProtocol where
+    parseJSON = parseJSONText "ForwardingRuleIPProtocol"
+
+instance ToJSON ForwardingRuleIPProtocol where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the address, which can be either IN_USE or
+-- RESERVED. An address that is RESERVED is currently reserved and
+-- available to use. An IN_USE address is currently being used by another
+-- resource and is not available.
+data AddressStatus
+    = InUse
+      -- ^ @IN_USE@
+    | Reserved
+      -- ^ @RESERVED@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AddressStatus
+
+instance FromHttpApiData AddressStatus where
+    parseQueryParam = \case
+        "IN_USE" -> Right InUse
+        "RESERVED" -> Right Reserved
+        x -> Left ("Unable to parse AddressStatus from: " <> x)
+
+instance ToHttpApiData AddressStatus where
+    toQueryParam = \case
+        InUse -> "IN_USE"
+        Reserved -> "RESERVED"
+
+instance FromJSON AddressStatus where
+    parseJSON = parseJSONText "AddressStatus"
+
+instance ToJSON AddressStatus where
+    toJSON = toJSONText
+
+-- | A filter for the state of the instances in the instance group. Valid
+-- options are ALL or RUNNING. If you do not specify this parameter the
+-- list includes all instances regardless of their state.
+data InstanceGroupsListInstancesRequestInstanceState
+    = IGLIRISAll
+      -- ^ @ALL@
+    | IGLIRISRunning
+      -- ^ @RUNNING@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InstanceGroupsListInstancesRequestInstanceState
+
+instance FromHttpApiData InstanceGroupsListInstancesRequestInstanceState where
+    parseQueryParam = \case
+        "ALL" -> Right IGLIRISAll
+        "RUNNING" -> Right IGLIRISRunning
+        x -> Left ("Unable to parse InstanceGroupsListInstancesRequestInstanceState from: " <> x)
+
+instance ToHttpApiData InstanceGroupsListInstancesRequestInstanceState where
+    toQueryParam = \case
+        IGLIRISAll -> "ALL"
+        IGLIRISRunning -> "RUNNING"
+
+instance FromJSON InstanceGroupsListInstancesRequestInstanceState where
+    parseJSON = parseJSONText "InstanceGroupsListInstancesRequestInstanceState"
+
+instance ToJSON InstanceGroupsListInstancesRequestInstanceState where
+    toJSON = toJSONText
+
+-- | Specifies the disk interface to use for attaching this disk, which is
+-- either SCSI or NVME. The default is SCSI. Persistent disks must always
+-- use SCSI and the request will fail if you attempt to attach a persistent
+-- disk in any other format than SCSI. Local SSDs can use either NVME or
+-- SCSI. For performance characteristics of SCSI over NVMe, see Local SSD
+-- performance.
+data AttachedDiskInterface
+    = Nvme
+      -- ^ @NVME@
+    | Scsi
+      -- ^ @SCSI@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AttachedDiskInterface
+
+instance FromHttpApiData AttachedDiskInterface where
+    parseQueryParam = \case
+        "NVME" -> Right Nvme
+        "SCSI" -> Right Scsi
+        x -> Left ("Unable to parse AttachedDiskInterface from: " <> x)
+
+instance ToHttpApiData AttachedDiskInterface where
+    toQueryParam = \case
+        Nvme -> "NVME"
+        Scsi -> "SCSI"
+
+instance FromJSON AttachedDiskInterface where
+    parseJSON = parseJSONText "AttachedDiskInterface"
+
+instance ToJSON AttachedDiskInterface where
+    toJSON = toJSONText
+
+-- | [Output Only] Status of the zone, either UP or DOWN.
+data ZoneStatus
+    = ZSDown
+      -- ^ @DOWN@
+    | ZSUP
+      -- ^ @UP@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ZoneStatus
+
+instance FromHttpApiData ZoneStatus where
+    parseQueryParam = \case
+        "DOWN" -> Right ZSDown
+        "UP" -> Right ZSUP
+        x -> Left ("Unable to parse ZoneStatus from: " <> x)
+
+instance ToHttpApiData ZoneStatus where
+    toQueryParam = \case
+        ZSDown -> "DOWN"
+        ZSUP -> "UP"
+
+instance FromJSON ZoneStatus where
+    parseJSON = parseJSONText "ZoneStatus"
+
+instance ToJSON ZoneStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data SubnetworksScopedListWarningCode
+    = SSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | SSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | SSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | SSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | SSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | SSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | SSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | SSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | SSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | SSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | SSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | SSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | SSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | SSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | SSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SubnetworksScopedListWarningCode
+
+instance FromHttpApiData SubnetworksScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right SSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right SSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right SSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right SSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right SSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right SSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right SSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right SSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right SSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right SSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right SSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right SSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right SSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right SSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right SSLWCUnreachable
+        x -> Left ("Unable to parse SubnetworksScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData SubnetworksScopedListWarningCode where
+    toQueryParam = \case
+        SSLWCCleanupFailed -> "CLEANUP_FAILED"
+        SSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        SSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        SSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        SSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        SSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        SSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        SSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        SSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        SSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        SSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        SSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        SSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        SSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        SSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON SubnetworksScopedListWarningCode where
+    parseJSON = parseJSONText "SubnetworksScopedListWarningCode"
+
+instance ToJSON SubnetworksScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] Name of the quota metric.
+data QuotaMetric
+    = Autoscalers
+      -- ^ @AUTOSCALERS@
+    | BackendServices
+      -- ^ @BACKEND_SERVICES@
+    | CPUs
+      -- ^ @CPUS@
+    | DisksTotalGb
+      -- ^ @DISKS_TOTAL_GB@
+    | Firewalls
+      -- ^ @FIREWALLS@
+    | ForwardingRules
+      -- ^ @FORWARDING_RULES@
+    | HealthChecks
+      -- ^ @HEALTH_CHECKS@
+    | Images
+      -- ^ @IMAGES@
+    | Instances
+      -- ^ @INSTANCES@
+    | InstanceGroups
+      -- ^ @INSTANCE_GROUPS@
+    | InstanceGroupManagers
+      -- ^ @INSTANCE_GROUP_MANAGERS@
+    | InstanceTemplates
+      -- ^ @INSTANCE_TEMPLATES@
+    | InUseAddresses
+      -- ^ @IN_USE_ADDRESSES@
+    | LocalSsdTotalGb
+      -- ^ @LOCAL_SSD_TOTAL_GB@
+    | Networks
+      -- ^ @NETWORKS@
+    | Routes
+      -- ^ @ROUTES@
+    | Snapshots
+      -- ^ @SNAPSHOTS@
+    | SsdTotalGb
+      -- ^ @SSD_TOTAL_GB@
+    | SSLCertificates
+      -- ^ @SSL_CERTIFICATES@
+    | StaticAddresses
+      -- ^ @STATIC_ADDRESSES@
+    | Subnetworks
+      -- ^ @SUBNETWORKS@
+    | TargetHTTPSProxies
+      -- ^ @TARGET_HTTPS_PROXIES@
+    | TargetHTTPProxies
+      -- ^ @TARGET_HTTP_PROXIES@
+    | TargetInstances
+      -- ^ @TARGET_INSTANCES@
+    | TargetPools
+      -- ^ @TARGET_POOLS@
+    | TargetVPNGateways
+      -- ^ @TARGET_VPN_GATEWAYS@
+    | URLMaps
+      -- ^ @URL_MAPS@
+    | VPNTunnels
+      -- ^ @VPN_TUNNELS@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable QuotaMetric
+
+instance FromHttpApiData QuotaMetric where
+    parseQueryParam = \case
+        "AUTOSCALERS" -> Right Autoscalers
+        "BACKEND_SERVICES" -> Right BackendServices
+        "CPUS" -> Right CPUs
+        "DISKS_TOTAL_GB" -> Right DisksTotalGb
+        "FIREWALLS" -> Right Firewalls
+        "FORWARDING_RULES" -> Right ForwardingRules
+        "HEALTH_CHECKS" -> Right HealthChecks
+        "IMAGES" -> Right Images
+        "INSTANCES" -> Right Instances
+        "INSTANCE_GROUPS" -> Right InstanceGroups
+        "INSTANCE_GROUP_MANAGERS" -> Right InstanceGroupManagers
+        "INSTANCE_TEMPLATES" -> Right InstanceTemplates
+        "IN_USE_ADDRESSES" -> Right InUseAddresses
+        "LOCAL_SSD_TOTAL_GB" -> Right LocalSsdTotalGb
+        "NETWORKS" -> Right Networks
+        "ROUTES" -> Right Routes
+        "SNAPSHOTS" -> Right Snapshots
+        "SSD_TOTAL_GB" -> Right SsdTotalGb
+        "SSL_CERTIFICATES" -> Right SSLCertificates
+        "STATIC_ADDRESSES" -> Right StaticAddresses
+        "SUBNETWORKS" -> Right Subnetworks
+        "TARGET_HTTPS_PROXIES" -> Right TargetHTTPSProxies
+        "TARGET_HTTP_PROXIES" -> Right TargetHTTPProxies
+        "TARGET_INSTANCES" -> Right TargetInstances
+        "TARGET_POOLS" -> Right TargetPools
+        "TARGET_VPN_GATEWAYS" -> Right TargetVPNGateways
+        "URL_MAPS" -> Right URLMaps
+        "VPN_TUNNELS" -> Right VPNTunnels
+        x -> Left ("Unable to parse QuotaMetric from: " <> x)
+
+instance ToHttpApiData QuotaMetric where
+    toQueryParam = \case
+        Autoscalers -> "AUTOSCALERS"
+        BackendServices -> "BACKEND_SERVICES"
+        CPUs -> "CPUS"
+        DisksTotalGb -> "DISKS_TOTAL_GB"
+        Firewalls -> "FIREWALLS"
+        ForwardingRules -> "FORWARDING_RULES"
+        HealthChecks -> "HEALTH_CHECKS"
+        Images -> "IMAGES"
+        Instances -> "INSTANCES"
+        InstanceGroups -> "INSTANCE_GROUPS"
+        InstanceGroupManagers -> "INSTANCE_GROUP_MANAGERS"
+        InstanceTemplates -> "INSTANCE_TEMPLATES"
+        InUseAddresses -> "IN_USE_ADDRESSES"
+        LocalSsdTotalGb -> "LOCAL_SSD_TOTAL_GB"
+        Networks -> "NETWORKS"
+        Routes -> "ROUTES"
+        Snapshots -> "SNAPSHOTS"
+        SsdTotalGb -> "SSD_TOTAL_GB"
+        SSLCertificates -> "SSL_CERTIFICATES"
+        StaticAddresses -> "STATIC_ADDRESSES"
+        Subnetworks -> "SUBNETWORKS"
+        TargetHTTPSProxies -> "TARGET_HTTPS_PROXIES"
+        TargetHTTPProxies -> "TARGET_HTTP_PROXIES"
+        TargetInstances -> "TARGET_INSTANCES"
+        TargetPools -> "TARGET_POOLS"
+        TargetVPNGateways -> "TARGET_VPN_GATEWAYS"
+        URLMaps -> "URL_MAPS"
+        VPNTunnels -> "VPN_TUNNELS"
+
+instance FromJSON QuotaMetric where
+    parseJSON = parseJSONText "QuotaMetric"
+
+instance ToJSON QuotaMetric where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the instance. One of the following values:
+-- PROVISIONING, STAGING, RUNNING, STOPPING, and TERMINATED.
+data InstanceStatus
+    = ISProvisioning
+      -- ^ @PROVISIONING@
+    | ISRunning
+      -- ^ @RUNNING@
+    | ISStaging
+      -- ^ @STAGING@
+    | ISStopped
+      -- ^ @STOPPED@
+    | ISStopping
+      -- ^ @STOPPING@
+    | ISSuspended
+      -- ^ @SUSPENDED@
+    | ISSuspending
+      -- ^ @SUSPENDING@
+    | ISTerminated
+      -- ^ @TERMINATED@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InstanceStatus
+
+instance FromHttpApiData InstanceStatus where
+    parseQueryParam = \case
+        "PROVISIONING" -> Right ISProvisioning
+        "RUNNING" -> Right ISRunning
+        "STAGING" -> Right ISStaging
+        "STOPPED" -> Right ISStopped
+        "STOPPING" -> Right ISStopping
+        "SUSPENDED" -> Right ISSuspended
+        "SUSPENDING" -> Right ISSuspending
+        "TERMINATED" -> Right ISTerminated
+        x -> Left ("Unable to parse InstanceStatus from: " <> x)
+
+instance ToHttpApiData InstanceStatus where
+    toQueryParam = \case
+        ISProvisioning -> "PROVISIONING"
+        ISRunning -> "RUNNING"
+        ISStaging -> "STAGING"
+        ISStopped -> "STOPPED"
+        ISStopping -> "STOPPING"
+        ISSuspended -> "SUSPENDED"
+        ISSuspending -> "SUSPENDING"
+        ISTerminated -> "TERMINATED"
+
+instance FromJSON InstanceStatus where
+    parseJSON = parseJSONText "InstanceStatus"
+
+instance ToJSON InstanceStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data MachineTypesScopedListWarningCode
+    = MTSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | MTSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | MTSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | MTSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | MTSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | MTSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | MTSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | MTSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | MTSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | MTSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | MTSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | MTSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | MTSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | MTSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | MTSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable MachineTypesScopedListWarningCode
+
+instance FromHttpApiData MachineTypesScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right MTSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right MTSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right MTSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right MTSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right MTSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right MTSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right MTSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right MTSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right MTSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right MTSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right MTSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right MTSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right MTSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right MTSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right MTSLWCUnreachable
+        x -> Left ("Unable to parse MachineTypesScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData MachineTypesScopedListWarningCode where
+    toQueryParam = \case
+        MTSLWCCleanupFailed -> "CLEANUP_FAILED"
+        MTSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        MTSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        MTSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        MTSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        MTSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        MTSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        MTSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        MTSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        MTSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        MTSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        MTSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        MTSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        MTSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        MTSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON MachineTypesScopedListWarningCode where
+    parseJSON = parseJSONText "MachineTypesScopedListWarningCode"
+
+instance ToJSON MachineTypesScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data DiskTypesScopedListWarningCode
+    = DTSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | DTSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | DTSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | DTSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | DTSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | DTSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | DTSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | DTSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | DTSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | DTSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | DTSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | DTSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | DTSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | DTSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | DTSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DiskTypesScopedListWarningCode
+
+instance FromHttpApiData DiskTypesScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right DTSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right DTSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right DTSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right DTSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right DTSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right DTSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right DTSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right DTSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right DTSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right DTSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right DTSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right DTSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right DTSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right DTSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right DTSLWCUnreachable
+        x -> Left ("Unable to parse DiskTypesScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData DiskTypesScopedListWarningCode where
+    toQueryParam = \case
+        DTSLWCCleanupFailed -> "CLEANUP_FAILED"
+        DTSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        DTSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        DTSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        DTSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        DTSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        DTSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        DTSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        DTSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        DTSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        DTSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        DTSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        DTSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        DTSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        DTSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON DiskTypesScopedListWarningCode where
+    parseJSON = parseJSONText "DiskTypesScopedListWarningCode"
+
+instance ToJSON DiskTypesScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data AutoscalersScopedListWarningCode
+    = ACleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | ADeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | ADiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | AInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | ANextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | ANextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | ANextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | ANextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | ANextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | ANotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | ANoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | ARequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | AResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | ASingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | AUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AutoscalersScopedListWarningCode
+
+instance FromHttpApiData AutoscalersScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right ACleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right ADeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right ADiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right AInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right ANextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right ANextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right ANextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right ANextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right ANextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right ANotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right ANoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right ARequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right AResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right ASingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right AUnreachable
+        x -> Left ("Unable to parse AutoscalersScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData AutoscalersScopedListWarningCode where
+    toQueryParam = \case
+        ACleanupFailed -> "CLEANUP_FAILED"
+        ADeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        ADiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        AInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        ANextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        ANextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        ANextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        ANextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        ANextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        ANotCriticalError -> "NOT_CRITICAL_ERROR"
+        ANoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        ARequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        AResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        ASingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        AUnreachable -> "UNREACHABLE"
+
+instance FromJSON AutoscalersScopedListWarningCode where
+    parseJSON = parseJSONText "AutoscalersScopedListWarningCode"
+
+instance ToJSON AutoscalersScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data VPNTunnelsScopedListWarningCode
+    = VTSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | VTSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | VTSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | VTSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | VTSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | VTSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | VTSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | VTSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | VTSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | VTSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | VTSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | VTSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | VTSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | VTSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | VTSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable VPNTunnelsScopedListWarningCode
+
+instance FromHttpApiData VPNTunnelsScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right VTSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right VTSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right VTSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right VTSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right VTSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right VTSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right VTSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right VTSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right VTSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right VTSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right VTSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right VTSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right VTSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right VTSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right VTSLWCUnreachable
+        x -> Left ("Unable to parse VPNTunnelsScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData VPNTunnelsScopedListWarningCode where
+    toQueryParam = \case
+        VTSLWCCleanupFailed -> "CLEANUP_FAILED"
+        VTSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        VTSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        VTSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        VTSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        VTSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        VTSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        VTSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        VTSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        VTSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        VTSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        VTSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        VTSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        VTSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        VTSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON VPNTunnelsScopedListWarningCode where
+    parseJSON = parseJSONText "VPNTunnelsScopedListWarningCode"
+
+instance ToJSON VPNTunnelsScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data InstanceGroupsScopedListWarningCode
+    = IGSLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | IGSLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | IGSLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | IGSLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | IGSLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | IGSLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | IGSLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | IGSLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | IGSLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | IGSLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | IGSLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | IGSLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | IGSLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | IGSLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | IGSLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InstanceGroupsScopedListWarningCode
+
+instance FromHttpApiData InstanceGroupsScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right IGSLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right IGSLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right IGSLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right IGSLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right IGSLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right IGSLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right IGSLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right IGSLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right IGSLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right IGSLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right IGSLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right IGSLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right IGSLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right IGSLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right IGSLWCUnreachable
+        x -> Left ("Unable to parse InstanceGroupsScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData InstanceGroupsScopedListWarningCode where
+    toQueryParam = \case
+        IGSLWCCleanupFailed -> "CLEANUP_FAILED"
+        IGSLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        IGSLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        IGSLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        IGSLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        IGSLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        IGSLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        IGSLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        IGSLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        IGSLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        IGSLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        IGSLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        IGSLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        IGSLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        IGSLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON InstanceGroupsScopedListWarningCode where
+    parseJSON = parseJSONText "InstanceGroupsScopedListWarningCode"
+
+instance ToJSON InstanceGroupsScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | [Output Only] The status of the instance.
+data InstanceWithNamedPortsStatus
+    = IWNPSProvisioning
+      -- ^ @PROVISIONING@
+    | IWNPSRunning
+      -- ^ @RUNNING@
+    | IWNPSStaging
+      -- ^ @STAGING@
+    | IWNPSStopped
+      -- ^ @STOPPED@
+    | IWNPSStopping
+      -- ^ @STOPPING@
+    | IWNPSSuspended
+      -- ^ @SUSPENDED@
+    | IWNPSSuspending
+      -- ^ @SUSPENDING@
+    | IWNPSTerminated
+      -- ^ @TERMINATED@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InstanceWithNamedPortsStatus
+
+instance FromHttpApiData InstanceWithNamedPortsStatus where
+    parseQueryParam = \case
+        "PROVISIONING" -> Right IWNPSProvisioning
+        "RUNNING" -> Right IWNPSRunning
+        "STAGING" -> Right IWNPSStaging
+        "STOPPED" -> Right IWNPSStopped
+        "STOPPING" -> Right IWNPSStopping
+        "SUSPENDED" -> Right IWNPSSuspended
+        "SUSPENDING" -> Right IWNPSSuspending
+        "TERMINATED" -> Right IWNPSTerminated
+        x -> Left ("Unable to parse InstanceWithNamedPortsStatus from: " <> x)
+
+instance ToHttpApiData InstanceWithNamedPortsStatus where
+    toQueryParam = \case
+        IWNPSProvisioning -> "PROVISIONING"
+        IWNPSRunning -> "RUNNING"
+        IWNPSStaging -> "STAGING"
+        IWNPSStopped -> "STOPPED"
+        IWNPSStopping -> "STOPPING"
+        IWNPSSuspended -> "SUSPENDED"
+        IWNPSSuspending -> "SUSPENDING"
+        IWNPSTerminated -> "TERMINATED"
+
+instance FromJSON InstanceWithNamedPortsStatus where
+    parseJSON = parseJSONText "InstanceWithNamedPortsStatus"
+
+instance ToJSON InstanceWithNamedPortsStatus where
+    toJSON = toJSONText
+
+-- | [Output Only] A warning code, if applicable. For example, Compute Engine
+-- returns NO_RESULTS_ON_PAGE if there are no results in the response.
+data InstancesScopedListWarningCode
+    = ISLWCCleanupFailed
+      -- ^ @CLEANUP_FAILED@
+    | ISLWCDeprecatedResourceUsed
+      -- ^ @DEPRECATED_RESOURCE_USED@
+    | ISLWCDiskSizeLargerThanImageSize
+      -- ^ @DISK_SIZE_LARGER_THAN_IMAGE_SIZE@
+    | ISLWCInjectedKernelsDeprecated
+      -- ^ @INJECTED_KERNELS_DEPRECATED@
+    | ISLWCNextHopAddressNotAssigned
+      -- ^ @NEXT_HOP_ADDRESS_NOT_ASSIGNED@
+    | ISLWCNextHopCannotIPForward
+      -- ^ @NEXT_HOP_CANNOT_IP_FORWARD@
+    | ISLWCNextHopInstanceNotFound
+      -- ^ @NEXT_HOP_INSTANCE_NOT_FOUND@
+    | ISLWCNextHopInstanceNotOnNetwork
+      -- ^ @NEXT_HOP_INSTANCE_NOT_ON_NETWORK@
+    | ISLWCNextHopNotRunning
+      -- ^ @NEXT_HOP_NOT_RUNNING@
+    | ISLWCNotCriticalError
+      -- ^ @NOT_CRITICAL_ERROR@
+    | ISLWCNoResultsOnPage
+      -- ^ @NO_RESULTS_ON_PAGE@
+    | ISLWCRequiredTosAgreement
+      -- ^ @REQUIRED_TOS_AGREEMENT@
+    | ISLWCResourceNotDeleted
+      -- ^ @RESOURCE_NOT_DELETED@
+    | ISLWCSingleInstancePropertyTemplate
+      -- ^ @SINGLE_INSTANCE_PROPERTY_TEMPLATE@
+    | ISLWCUnreachable
+      -- ^ @UNREACHABLE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InstancesScopedListWarningCode
+
+instance FromHttpApiData InstancesScopedListWarningCode where
+    parseQueryParam = \case
+        "CLEANUP_FAILED" -> Right ISLWCCleanupFailed
+        "DEPRECATED_RESOURCE_USED" -> Right ISLWCDeprecatedResourceUsed
+        "DISK_SIZE_LARGER_THAN_IMAGE_SIZE" -> Right ISLWCDiskSizeLargerThanImageSize
+        "INJECTED_KERNELS_DEPRECATED" -> Right ISLWCInjectedKernelsDeprecated
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED" -> Right ISLWCNextHopAddressNotAssigned
+        "NEXT_HOP_CANNOT_IP_FORWARD" -> Right ISLWCNextHopCannotIPForward
+        "NEXT_HOP_INSTANCE_NOT_FOUND" -> Right ISLWCNextHopInstanceNotFound
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK" -> Right ISLWCNextHopInstanceNotOnNetwork
+        "NEXT_HOP_NOT_RUNNING" -> Right ISLWCNextHopNotRunning
+        "NOT_CRITICAL_ERROR" -> Right ISLWCNotCriticalError
+        "NO_RESULTS_ON_PAGE" -> Right ISLWCNoResultsOnPage
+        "REQUIRED_TOS_AGREEMENT" -> Right ISLWCRequiredTosAgreement
+        "RESOURCE_NOT_DELETED" -> Right ISLWCResourceNotDeleted
+        "SINGLE_INSTANCE_PROPERTY_TEMPLATE" -> Right ISLWCSingleInstancePropertyTemplate
+        "UNREACHABLE" -> Right ISLWCUnreachable
+        x -> Left ("Unable to parse InstancesScopedListWarningCode from: " <> x)
+
+instance ToHttpApiData InstancesScopedListWarningCode where
+    toQueryParam = \case
+        ISLWCCleanupFailed -> "CLEANUP_FAILED"
+        ISLWCDeprecatedResourceUsed -> "DEPRECATED_RESOURCE_USED"
+        ISLWCDiskSizeLargerThanImageSize -> "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+        ISLWCInjectedKernelsDeprecated -> "INJECTED_KERNELS_DEPRECATED"
+        ISLWCNextHopAddressNotAssigned -> "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+        ISLWCNextHopCannotIPForward -> "NEXT_HOP_CANNOT_IP_FORWARD"
+        ISLWCNextHopInstanceNotFound -> "NEXT_HOP_INSTANCE_NOT_FOUND"
+        ISLWCNextHopInstanceNotOnNetwork -> "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+        ISLWCNextHopNotRunning -> "NEXT_HOP_NOT_RUNNING"
+        ISLWCNotCriticalError -> "NOT_CRITICAL_ERROR"
+        ISLWCNoResultsOnPage -> "NO_RESULTS_ON_PAGE"
+        ISLWCRequiredTosAgreement -> "REQUIRED_TOS_AGREEMENT"
+        ISLWCResourceNotDeleted -> "RESOURCE_NOT_DELETED"
+        ISLWCSingleInstancePropertyTemplate -> "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+        ISLWCUnreachable -> "UNREACHABLE"
+
+instance FromJSON InstancesScopedListWarningCode where
+    parseJSON = parseJSONText "InstancesScopedListWarningCode"
+
+instance ToJSON InstancesScopedListWarningCode where
+    toJSON = toJSONText
+
+-- | Sesssion affinity option, must be one of the following values: NONE:
+-- Connections from the same client IP may go to any instance in the pool.
+-- CLIENT_IP: Connections from the same client IP will go to the same
+-- instance in the pool while that instance remains healthy.
+-- CLIENT_IP_PROTO: Connections from the same client IP with the same IP
+-- protocol will go to the same instance in the pool while that instance
+-- remains healthy.
+data TargetPoolSessionAffinity
+    = ClientIP
+      -- ^ @CLIENT_IP@
+    | ClientIPProto
+      -- ^ @CLIENT_IP_PROTO@
+    | None
+      -- ^ @NONE@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TargetPoolSessionAffinity
+
+instance FromHttpApiData TargetPoolSessionAffinity where
+    parseQueryParam = \case
+        "CLIENT_IP" -> Right ClientIP
+        "CLIENT_IP_PROTO" -> Right ClientIPProto
+        "NONE" -> Right None
+        x -> Left ("Unable to parse TargetPoolSessionAffinity from: " <> x)
+
+instance ToHttpApiData TargetPoolSessionAffinity where
+    toQueryParam = \case
+        ClientIP -> "CLIENT_IP"
+        ClientIPProto -> "CLIENT_IP_PROTO"
+        None -> "NONE"
+
+instance FromJSON TargetPoolSessionAffinity where
+    parseJSON = parseJSONText "TargetPoolSessionAffinity"
+
+instance ToJSON TargetPoolSessionAffinity where
+    toJSON = toJSONText
+
+-- | The format used to encode and transmit the block device, which should be
+-- TAR. This is just a container and transmission format and not a runtime
+-- format. Provided by the client when the disk image is created.
+data ImageRawDiskContainerType
+    = TAR
+      -- ^ @TAR@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ImageRawDiskContainerType
+
+instance FromHttpApiData ImageRawDiskContainerType where
+    parseQueryParam = \case
+        "TAR" -> Right TAR
+        x -> Left ("Unable to parse ImageRawDiskContainerType from: " <> x)
+
+instance ToHttpApiData ImageRawDiskContainerType where
+    toQueryParam = \case
         TAR -> "TAR"
 
 instance FromJSON ImageRawDiskContainerType where
diff --git a/gen/Network/Google/Resource/Compute/Addresses/AggregatedList.hs b/gen/Network/Google/Resource/Compute/Addresses/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/Addresses/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/Addresses/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Addresses.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of addresses grouped by scope.
+-- Retrieves an aggregated list of addresses.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.addresses.aggregatedList@.
 module Network.Google.Resource.Compute.Addresses.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] AddressAggregatedList
 
--- | Retrieves the list of addresses grouped by scope.
+-- | Retrieves an aggregated list of addresses.
 --
 -- /See:/ 'addressesAggregatedList' smart constructor.
-data AddressesAggregatedList = AddressesAggregatedList
+data AddressesAggregatedList = AddressesAggregatedList'
     { _aalProject    :: !Text
     , _aalFilter     :: !(Maybe Text)
     , _aalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'aalProject'
     -> AddressesAggregatedList
 addressesAggregatedList pAalProject_ =
-    AddressesAggregatedList
+    AddressesAggregatedList'
     { _aalProject = pAalProject_
     , _aalFilter = Nothing
     , _aalPageToken = Nothing
@@ -95,28 +95,40 @@
   = lens _aalProject (\ s a -> s{_aalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 aalFilter :: Lens' AddressesAggregatedList (Maybe Text)
 aalFilter
   = lens _aalFilter (\ s a -> s{_aalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 aalPageToken :: Lens' AddressesAggregatedList (Maybe Text)
 aalPageToken
   = lens _aalPageToken (\ s a -> s{_aalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 aalMaxResults :: Lens' AddressesAggregatedList Word32
 aalMaxResults
   = lens _aalMaxResults
@@ -126,7 +138,11 @@
 instance GoogleRequest AddressesAggregatedList where
         type Rs AddressesAggregatedList =
              AddressAggregatedList
-        requestClient AddressesAggregatedList{..}
+        type Scopes AddressesAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient AddressesAggregatedList'{..}
           = go _aalProject _aalFilter _aalPageToken
               (Just _aalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Addresses/Delete.hs b/gen/Network/Google/Resource/Compute/Addresses/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Addresses/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Addresses/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Addresses.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Deletes the specified address resource.
 --
 -- /See:/ 'addressesDelete' smart constructor.
-data AddressesDelete = AddressesDelete
+data AddressesDelete = AddressesDelete'
     { _aaProject :: !Text
     , _aaAddress :: !Text
     , _aaRegion  :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'aaRegion'
     -> AddressesDelete
 addressesDelete pAaProject_ pAaAddress_ pAaRegion_ =
-    AddressesDelete
+    AddressesDelete'
     { _aaProject = pAaProject_
     , _aaAddress = pAaAddress_
     , _aaRegion = pAaRegion_
@@ -94,13 +94,16 @@
 aaAddress
   = lens _aaAddress (\ s a -> s{_aaAddress = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 aaRegion :: Lens' AddressesDelete Text
 aaRegion = lens _aaRegion (\ s a -> s{_aaRegion = a})
 
 instance GoogleRequest AddressesDelete where
         type Rs AddressesDelete = Operation
-        requestClient AddressesDelete{..}
+        type Scopes AddressesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient AddressesDelete'{..}
           = go _aaProject _aaRegion _aaAddress (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Addresses/Get.hs b/gen/Network/Google/Resource/Compute/Addresses/Get.hs
--- a/gen/Network/Google/Resource/Compute/Addresses/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Addresses/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Addresses.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Returns the specified address resource.
 --
 -- /See:/ 'addressesGet' smart constructor.
-data AddressesGet = AddressesGet
+data AddressesGet = AddressesGet'
     { _addProject :: !Text
     , _addAddress :: !Text
     , _addRegion  :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'addRegion'
     -> AddressesGet
 addressesGet pAddProject_ pAddAddress_ pAddRegion_ =
-    AddressesGet
+    AddressesGet'
     { _addProject = pAddProject_
     , _addAddress = pAddAddress_
     , _addRegion = pAddRegion_
@@ -94,14 +94,18 @@
 addAddress
   = lens _addAddress (\ s a -> s{_addAddress = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 addRegion :: Lens' AddressesGet Text
 addRegion
   = lens _addRegion (\ s a -> s{_addRegion = a})
 
 instance GoogleRequest AddressesGet where
         type Rs AddressesGet = Address
-        requestClient AddressesGet{..}
+        type Scopes AddressesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient AddressesGet'{..}
           = go _addProject _addRegion _addAddress
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Addresses/Insert.hs b/gen/Network/Google/Resource/Compute/Addresses/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Addresses/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Addresses/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Addresses.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- included in the request.
 --
 -- /See:/ 'addressesInsert' smart constructor.
-data AddressesInsert = AddressesInsert
+data AddressesInsert = AddressesInsert'
     { _aiProject :: !Text
     , _aiPayload :: !Address
     , _aiRegion  :: !Text
@@ -80,7 +80,7 @@
     -> Text -- ^ 'aiRegion'
     -> AddressesInsert
 addressesInsert pAiProject_ pAiPayload_ pAiRegion_ =
-    AddressesInsert
+    AddressesInsert'
     { _aiProject = pAiProject_
     , _aiPayload = pAiPayload_
     , _aiRegion = pAiRegion_
@@ -96,13 +96,16 @@
 aiPayload
   = lens _aiPayload (\ s a -> s{_aiPayload = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 aiRegion :: Lens' AddressesInsert Text
 aiRegion = lens _aiRegion (\ s a -> s{_aiRegion = a})
 
 instance GoogleRequest AddressesInsert where
         type Rs AddressesInsert = Operation
-        requestClient AddressesInsert{..}
+        type Scopes AddressesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient AddressesInsert'{..}
           = go _aiProject _aiRegion (Just AltJSON) _aiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Addresses/List.hs b/gen/Network/Google/Resource/Compute/Addresses/List.hs
--- a/gen/Network/Google/Resource/Compute/Addresses/List.hs
+++ b/gen/Network/Google/Resource/Compute/Addresses/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Addresses.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of address resources contained within the specified
--- region.
+-- Retrieves a list of addresses contained within the specified region.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.addresses.list@.
 module Network.Google.Resource.Compute.Addresses.List
@@ -59,11 +58,10 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] AddressList
 
--- | Retrieves the list of address resources contained within the specified
--- region.
+-- | Retrieves a list of addresses contained within the specified region.
 --
 -- /See:/ 'addressesList' smart constructor.
-data AddressesList = AddressesList
+data AddressesList = AddressesList'
     { _alProject    :: !Text
     , _alFilter     :: !(Maybe Text)
     , _alRegion     :: !Text
@@ -89,7 +87,7 @@
     -> Text -- ^ 'alRegion'
     -> AddressesList
 addressesList pAlProject_ pAlRegion_ =
-    AddressesList
+    AddressesList'
     { _alProject = pAlProject_
     , _alFilter = Nothing
     , _alRegion = pAlRegion_
@@ -103,31 +101,43 @@
   = lens _alProject (\ s a -> s{_alProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 alFilter :: Lens' AddressesList (Maybe Text)
 alFilter = lens _alFilter (\ s a -> s{_alFilter = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 alRegion :: Lens' AddressesList Text
 alRegion = lens _alRegion (\ s a -> s{_alRegion = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 alPageToken :: Lens' AddressesList (Maybe Text)
 alPageToken
   = lens _alPageToken (\ s a -> s{_alPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 alMaxResults :: Lens' AddressesList Word32
 alMaxResults
   = lens _alMaxResults (\ s a -> s{_alMaxResults = a})
@@ -135,7 +145,11 @@
 
 instance GoogleRequest AddressesList where
         type Rs AddressesList = AddressList
-        requestClient AddressesList{..}
+        type Scopes AddressesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient AddressesList'{..}
           = go _alProject _alRegion _alFilter _alPageToken
               (Just _alMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/AggregatedList.hs b/gen/Network/Google/Resource/Compute/Autoscalers/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of autoscalers grouped by scope.
+-- Retrieves an aggregated list of autoscalers.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.aggregatedList@.
 module Network.Google.Resource.Compute.Autoscalers.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] AutoscalerAggregatedList
 
--- | Retrieves the list of autoscalers grouped by scope.
+-- | Retrieves an aggregated list of autoscalers.
 --
 -- /See:/ 'autoscalersAggregatedList' smart constructor.
-data AutoscalersAggregatedList = AutoscalersAggregatedList
+data AutoscalersAggregatedList = AutoscalersAggregatedList'
     { _autProject    :: !Text
     , _autFilter     :: !(Maybe Text)
     , _autPageToken  :: !(Maybe Text)
@@ -82,41 +82,53 @@
     :: Text -- ^ 'autProject'
     -> AutoscalersAggregatedList
 autoscalersAggregatedList pAutProject_ =
-    AutoscalersAggregatedList
+    AutoscalersAggregatedList'
     { _autProject = pAutProject_
     , _autFilter = Nothing
     , _autPageToken = Nothing
     , _autMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 autProject :: Lens' AutoscalersAggregatedList Text
 autProject
   = lens _autProject (\ s a -> s{_autProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 autFilter :: Lens' AutoscalersAggregatedList (Maybe Text)
 autFilter
   = lens _autFilter (\ s a -> s{_autFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 autPageToken :: Lens' AutoscalersAggregatedList (Maybe Text)
 autPageToken
   = lens _autPageToken (\ s a -> s{_autPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 autMaxResults :: Lens' AutoscalersAggregatedList Word32
 autMaxResults
   = lens _autMaxResults
@@ -127,7 +139,11 @@
          where
         type Rs AutoscalersAggregatedList =
              AutoscalerAggregatedList
-        requestClient AutoscalersAggregatedList{..}
+        type Scopes AutoscalersAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient AutoscalersAggregatedList'{..}
           = go _autProject _autFilter _autPageToken
               (Just _autMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/Delete.hs b/gen/Network/Google/Resource/Compute/Autoscalers/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified autoscaler resource.
+-- Deletes the specified autoscaler.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.delete@.
 module Network.Google.Resource.Compute.Autoscalers.Delete
@@ -54,10 +54,10 @@
                    Capture "autoscaler" Text :>
                      QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified autoscaler resource.
+-- | Deletes the specified autoscaler.
 --
 -- /See:/ 'autoscalersDelete' smart constructor.
-data AutoscalersDelete = AutoscalersDelete
+data AutoscalersDelete = AutoscalersDelete'
     { _adProject    :: !Text
     , _adZone       :: !Text
     , _adAutoscaler :: !Text
@@ -78,29 +78,32 @@
     -> Text -- ^ 'adAutoscaler'
     -> AutoscalersDelete
 autoscalersDelete pAdProject_ pAdZone_ pAdAutoscaler_ =
-    AutoscalersDelete
+    AutoscalersDelete'
     { _adProject = pAdProject_
     , _adZone = pAdZone_
     , _adAutoscaler = pAdAutoscaler_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 adProject :: Lens' AutoscalersDelete Text
 adProject
   = lens _adProject (\ s a -> s{_adProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 adZone :: Lens' AutoscalersDelete Text
 adZone = lens _adZone (\ s a -> s{_adZone = a})
 
--- | Name of the persistent autoscaler resource to delete.
+-- | Name of the autoscaler to delete.
 adAutoscaler :: Lens' AutoscalersDelete Text
 adAutoscaler
   = lens _adAutoscaler (\ s a -> s{_adAutoscaler = a})
 
 instance GoogleRequest AutoscalersDelete where
         type Rs AutoscalersDelete = Operation
-        requestClient AutoscalersDelete{..}
+        type Scopes AutoscalersDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient AutoscalersDelete'{..}
           = go _adProject _adZone _adAutoscaler (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/Get.hs b/gen/Network/Google/Resource/Compute/Autoscalers/Get.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified autoscaler resource.
+-- Returns the specified autoscaler resource. Get a list of available
+-- autoscalers by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.get@.
 module Network.Google.Resource.Compute.Autoscalers.Get
@@ -54,10 +55,11 @@
                    Capture "autoscaler" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] Autoscaler
 
--- | Returns the specified autoscaler resource.
+-- | Returns the specified autoscaler resource. Get a list of available
+-- autoscalers by making a list() request.
 --
 -- /See:/ 'autoscalersGet' smart constructor.
-data AutoscalersGet = AutoscalersGet
+data AutoscalersGet = AutoscalersGet'
     { _agProject    :: !Text
     , _agZone       :: !Text
     , _agAutoscaler :: !Text
@@ -78,29 +80,33 @@
     -> Text -- ^ 'agAutoscaler'
     -> AutoscalersGet
 autoscalersGet pAgProject_ pAgZone_ pAgAutoscaler_ =
-    AutoscalersGet
+    AutoscalersGet'
     { _agProject = pAgProject_
     , _agZone = pAgZone_
     , _agAutoscaler = pAgAutoscaler_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 agProject :: Lens' AutoscalersGet Text
 agProject
   = lens _agProject (\ s a -> s{_agProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 agZone :: Lens' AutoscalersGet Text
 agZone = lens _agZone (\ s a -> s{_agZone = a})
 
--- | Name of the persistent autoscaler resource to return.
+-- | Name of the autoscaler to return.
 agAutoscaler :: Lens' AutoscalersGet Text
 agAutoscaler
   = lens _agAutoscaler (\ s a -> s{_agAutoscaler = a})
 
 instance GoogleRequest AutoscalersGet where
         type Rs AutoscalersGet = Autoscaler
-        requestClient AutoscalersGet{..}
+        type Scopes AutoscalersGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient AutoscalersGet'{..}
           = go _agProject _agZone _agAutoscaler (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/Insert.hs b/gen/Network/Google/Resource/Compute/Autoscalers/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/Insert.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates an autoscaler resource in the specified project using the data
--- included in the request.
+-- Creates an autoscaler in the specified project using the data included
+-- in the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.insert@.
 module Network.Google.Resource.Compute.Autoscalers.Insert
@@ -55,11 +55,11 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] Autoscaler :> Post '[JSON] Operation
 
--- | Creates an autoscaler resource in the specified project using the data
--- included in the request.
+-- | Creates an autoscaler in the specified project using the data included
+-- in the request.
 --
 -- /See:/ 'autoscalersInsert' smart constructor.
-data AutoscalersInsert = AutoscalersInsert
+data AutoscalersInsert = AutoscalersInsert'
     { _aiiProject :: !Text
     , _aiiZone    :: !Text
     , _aiiPayload :: !Autoscaler
@@ -80,18 +80,18 @@
     -> Autoscaler -- ^ 'aiiPayload'
     -> AutoscalersInsert
 autoscalersInsert pAiiProject_ pAiiZone_ pAiiPayload_ =
-    AutoscalersInsert
+    AutoscalersInsert'
     { _aiiProject = pAiiProject_
     , _aiiZone = pAiiZone_
     , _aiiPayload = pAiiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 aiiProject :: Lens' AutoscalersInsert Text
 aiiProject
   = lens _aiiProject (\ s a -> s{_aiiProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 aiiZone :: Lens' AutoscalersInsert Text
 aiiZone = lens _aiiZone (\ s a -> s{_aiiZone = a})
 
@@ -102,7 +102,10 @@
 
 instance GoogleRequest AutoscalersInsert where
         type Rs AutoscalersInsert = Operation
-        requestClient AutoscalersInsert{..}
+        type Scopes AutoscalersInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient AutoscalersInsert'{..}
           = go _aiiProject _aiiZone (Just AltJSON) _aiiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/List.hs b/gen/Network/Google/Resource/Compute/Autoscalers/List.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/List.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of autoscaler resources contained within the
--- specified zone.
+-- Retrieves a list of autoscalers contained within the specified zone.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.list@.
 module Network.Google.Resource.Compute.Autoscalers.List
@@ -60,11 +59,10 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] AutoscalerList
 
--- | Retrieves the list of autoscaler resources contained within the
--- specified zone.
+-- | Retrieves a list of autoscalers contained within the specified zone.
 --
 -- /See:/ 'autoscalersList' smart constructor.
-data AutoscalersList = AutoscalersList
+data AutoscalersList = AutoscalersList'
     { _aProject    :: !Text
     , _aZone       :: !Text
     , _aFilter     :: !(Maybe Text)
@@ -90,7 +88,7 @@
     -> Text -- ^ 'aZone'
     -> AutoscalersList
 autoscalersList pAProject_ pAZone_ =
-    AutoscalersList
+    AutoscalersList'
     { _aProject = pAProject_
     , _aZone = pAZone_
     , _aFilter = Nothing
@@ -98,36 +96,48 @@
     , _aMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 aProject :: Lens' AutoscalersList Text
 aProject = lens _aProject (\ s a -> s{_aProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 aZone :: Lens' AutoscalersList Text
 aZone = lens _aZone (\ s a -> s{_aZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 aFilter :: Lens' AutoscalersList (Maybe Text)
 aFilter = lens _aFilter (\ s a -> s{_aFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 aPageToken :: Lens' AutoscalersList (Maybe Text)
 aPageToken
   = lens _aPageToken (\ s a -> s{_aPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 aMaxResults :: Lens' AutoscalersList Word32
 aMaxResults
   = lens _aMaxResults (\ s a -> s{_aMaxResults = a}) .
@@ -135,7 +145,11 @@
 
 instance GoogleRequest AutoscalersList where
         type Rs AutoscalersList = AutoscalerList
-        requestClient AutoscalersList{..}
+        type Scopes AutoscalersList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient AutoscalersList'{..}
           = go _aProject _aZone _aFilter _aPageToken
               (Just _aMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/Patch.hs b/gen/Network/Google/Resource/Compute/Autoscalers/Patch.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/Patch.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/Patch.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 an autoscaler resource in the specified project using the data
--- included in the request. This method supports patch semantics.
+-- Updates an autoscaler in the specified project using the data included
+-- in the request. This method supports patch semantics.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.patch@.
 module Network.Google.Resource.Compute.Autoscalers.Patch
@@ -57,11 +57,11 @@
                      QueryParam "alt" AltJSON :>
                        ReqBody '[JSON] Autoscaler :> Patch '[JSON] Operation
 
--- | Updates an autoscaler resource in the specified project using the data
--- included in the request. This method supports patch semantics.
+-- | Updates an autoscaler in the specified project using the data included
+-- in the request. This method supports patch semantics.
 --
 -- /See:/ 'autoscalersPatch' smart constructor.
-data AutoscalersPatch = AutoscalersPatch
+data AutoscalersPatch = AutoscalersPatch'
     { _apProject    :: !Text
     , _apZone       :: !Text
     , _apPayload    :: !Autoscaler
@@ -86,19 +86,19 @@
     -> Text -- ^ 'apAutoscaler'
     -> AutoscalersPatch
 autoscalersPatch pApProject_ pApZone_ pApPayload_ pApAutoscaler_ =
-    AutoscalersPatch
+    AutoscalersPatch'
     { _apProject = pApProject_
     , _apZone = pApZone_
     , _apPayload = pApPayload_
     , _apAutoscaler = pApAutoscaler_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 apProject :: Lens' AutoscalersPatch Text
 apProject
   = lens _apProject (\ s a -> s{_apProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 apZone :: Lens' AutoscalersPatch Text
 apZone = lens _apZone (\ s a -> s{_apZone = a})
 
@@ -107,14 +107,17 @@
 apPayload
   = lens _apPayload (\ s a -> s{_apPayload = a})
 
--- | Name of the autoscaler resource to update.
+-- | Name of the autoscaler to update.
 apAutoscaler :: Lens' AutoscalersPatch Text
 apAutoscaler
   = lens _apAutoscaler (\ s a -> s{_apAutoscaler = a})
 
 instance GoogleRequest AutoscalersPatch where
         type Rs AutoscalersPatch = Operation
-        requestClient AutoscalersPatch{..}
+        type Scopes AutoscalersPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient AutoscalersPatch'{..}
           = go _apProject _apZone (Just _apAutoscaler)
               (Just AltJSON)
               _apPayload
diff --git a/gen/Network/Google/Resource/Compute/Autoscalers/Update.hs b/gen/Network/Google/Resource/Compute/Autoscalers/Update.hs
--- a/gen/Network/Google/Resource/Compute/Autoscalers/Update.hs
+++ b/gen/Network/Google/Resource/Compute/Autoscalers/Update.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Autoscalers.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 an autoscaler resource in the specified project using the data
--- included in the request.
+-- Updates an autoscaler in the specified project using the data included
+-- in the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.autoscalers.update@.
 module Network.Google.Resource.Compute.Autoscalers.Update
@@ -57,11 +57,11 @@
                      QueryParam "alt" AltJSON :>
                        ReqBody '[JSON] Autoscaler :> Put '[JSON] Operation
 
--- | Updates an autoscaler resource in the specified project using the data
--- included in the request.
+-- | Updates an autoscaler in the specified project using the data included
+-- in the request.
 --
 -- /See:/ 'autoscalersUpdate' smart constructor.
-data AutoscalersUpdate = AutoscalersUpdate
+data AutoscalersUpdate = AutoscalersUpdate'
     { _auProject    :: !Text
     , _auZone       :: !Text
     , _auPayload    :: !Autoscaler
@@ -85,19 +85,19 @@
     -> Autoscaler -- ^ 'auPayload'
     -> AutoscalersUpdate
 autoscalersUpdate pAuProject_ pAuZone_ pAuPayload_ =
-    AutoscalersUpdate
+    AutoscalersUpdate'
     { _auProject = pAuProject_
     , _auZone = pAuZone_
     , _auPayload = pAuPayload_
     , _auAutoscaler = Nothing
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 auProject :: Lens' AutoscalersUpdate Text
 auProject
   = lens _auProject (\ s a -> s{_auProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 auZone :: Lens' AutoscalersUpdate Text
 auZone = lens _auZone (\ s a -> s{_auZone = a})
 
@@ -106,14 +106,17 @@
 auPayload
   = lens _auPayload (\ s a -> s{_auPayload = a})
 
--- | Name of the autoscaler resource to update.
+-- | Name of the autoscaler to update.
 auAutoscaler :: Lens' AutoscalersUpdate (Maybe Text)
 auAutoscaler
   = lens _auAutoscaler (\ s a -> s{_auAutoscaler = a})
 
 instance GoogleRequest AutoscalersUpdate where
         type Rs AutoscalersUpdate = Operation
-        requestClient AutoscalersUpdate{..}
+        type Scopes AutoscalersUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient AutoscalersUpdate'{..}
           = go _auProject _auZone _auAutoscaler (Just AltJSON)
               _auPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/Delete.hs b/gen/Network/Google/Resource/Compute/BackendServices/Delete.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified BackendService resource.
 --
 -- /See:/ 'backendServicesDelete' smart constructor.
-data BackendServicesDelete = BackendServicesDelete
+data BackendServicesDelete = BackendServicesDelete'
     { _bsdProject        :: !Text
     , _bsdBackendService :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'bsdBackendService'
     -> BackendServicesDelete
 backendServicesDelete pBsdProject_ pBsdBackendService_ =
-    BackendServicesDelete
+    BackendServicesDelete'
     { _bsdProject = pBsdProject_
     , _bsdBackendService = pBsdBackendService_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 bsdProject :: Lens' BackendServicesDelete Text
 bsdProject
   = lens _bsdProject (\ s a -> s{_bsdProject = a})
@@ -90,7 +90,10 @@
 
 instance GoogleRequest BackendServicesDelete where
         type Rs BackendServicesDelete = Operation
-        requestClient BackendServicesDelete{..}
+        type Scopes BackendServicesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient BackendServicesDelete'{..}
           = go _bsdProject _bsdBackendService (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/Get.hs b/gen/Network/Google/Resource/Compute/BackendServices/Get.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/Get.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified BackendService resource.
+-- Returns the specified BackendService resource. Get a list of available
+-- backend services by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.backendServices.get@.
 module Network.Google.Resource.Compute.BackendServices.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] BackendService
 
--- | Returns the specified BackendService resource.
+-- | Returns the specified BackendService resource. Get a list of available
+-- backend services by making a list() request.
 --
 -- /See:/ 'backendServicesGet' smart constructor.
-data BackendServicesGet = BackendServicesGet
+data BackendServicesGet = BackendServicesGet'
     { _bsgProject        :: !Text
     , _bsgBackendService :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'bsgBackendService'
     -> BackendServicesGet
 backendServicesGet pBsgProject_ pBsgBackendService_ =
-    BackendServicesGet
+    BackendServicesGet'
     { _bsgProject = pBsgProject_
     , _bsgBackendService = pBsgBackendService_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 bsgProject :: Lens' BackendServicesGet Text
 bsgProject
   = lens _bsgProject (\ s a -> s{_bsgProject = a})
@@ -91,7 +93,11 @@
 
 instance GoogleRequest BackendServicesGet where
         type Rs BackendServicesGet = BackendService
-        requestClient BackendServicesGet{..}
+        type Scopes BackendServicesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient BackendServicesGet'{..}
           = go _bsgProject _bsgBackendService (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/GetHealth.hs b/gen/Network/Google/Resource/Compute/BackendServices/GetHealth.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/GetHealth.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/GetHealth.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.GetHealth
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- | Gets the most recent health check results for this BackendService.
 --
 -- /See:/ 'backendServicesGetHealth' smart constructor.
-data BackendServicesGetHealth = BackendServicesGetHealth
+data BackendServicesGetHealth = BackendServicesGetHealth'
     { _bsghProject        :: !Text
     , _bsghPayload        :: !ResourceGroupReference
     , _bsghBackendService :: !Text
@@ -80,7 +80,7 @@
     -> Text -- ^ 'bsghBackendService'
     -> BackendServicesGetHealth
 backendServicesGetHealth pBsghProject_ pBsghPayload_ pBsghBackendService_ =
-    BackendServicesGetHealth
+    BackendServicesGetHealth'
     { _bsghProject = pBsghProject_
     , _bsghPayload = pBsghPayload_
     , _bsghBackendService = pBsghBackendService_
@@ -105,7 +105,11 @@
 instance GoogleRequest BackendServicesGetHealth where
         type Rs BackendServicesGetHealth =
              BackendServiceGroupHealth
-        requestClient BackendServicesGetHealth{..}
+        type Scopes BackendServicesGetHealth =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient BackendServicesGetHealth'{..}
           = go _bsghProject _bsghBackendService (Just AltJSON)
               _bsghPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/Insert.hs b/gen/Network/Google/Resource/Compute/BackendServices/Insert.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/Insert.hs
@@ -14,14 +14,16 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 BackendService resource in the specified project using the
--- data included in the request.
+-- data included in the request. There are several restrictions and
+-- guidelines to keep in mind when creating a backend service. Read
+-- Restrictions and Guidelines for more information.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.backendServices.insert@.
 module Network.Google.Resource.Compute.BackendServices.Insert
@@ -55,10 +57,12 @@
                      Post '[JSON] Operation
 
 -- | Creates a BackendService resource in the specified project using the
--- data included in the request.
+-- data included in the request. There are several restrictions and
+-- guidelines to keep in mind when creating a backend service. Read
+-- Restrictions and Guidelines for more information.
 --
 -- /See:/ 'backendServicesInsert' smart constructor.
-data BackendServicesInsert = BackendServicesInsert
+data BackendServicesInsert = BackendServicesInsert'
     { _bsiProject :: !Text
     , _bsiPayload :: !BackendService
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +79,12 @@
     -> BackendService -- ^ 'bsiPayload'
     -> BackendServicesInsert
 backendServicesInsert pBsiProject_ pBsiPayload_ =
-    BackendServicesInsert
+    BackendServicesInsert'
     { _bsiProject = pBsiProject_
     , _bsiPayload = pBsiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 bsiProject :: Lens' BackendServicesInsert Text
 bsiProject
   = lens _bsiProject (\ s a -> s{_bsiProject = a})
@@ -92,7 +96,10 @@
 
 instance GoogleRequest BackendServicesInsert where
         type Rs BackendServicesInsert = Operation
-        requestClient BackendServicesInsert{..}
+        type Scopes BackendServicesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient BackendServicesInsert'{..}
           = go _bsiProject (Just AltJSON) _bsiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/List.hs b/gen/Network/Google/Resource/Compute/BackendServices/List.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/List.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project.
 --
 -- /See:/ 'backendServicesList' smart constructor.
-data BackendServicesList = BackendServicesList
+data BackendServicesList = BackendServicesList'
     { _bslProject    :: !Text
     , _bslFilter     :: !(Maybe Text)
     , _bslPageToken  :: !(Maybe Text)
@@ -84,41 +84,53 @@
     :: Text -- ^ 'bslProject'
     -> BackendServicesList
 backendServicesList pBslProject_ =
-    BackendServicesList
+    BackendServicesList'
     { _bslProject = pBslProject_
     , _bslFilter = Nothing
     , _bslPageToken = Nothing
     , _bslMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 bslProject :: Lens' BackendServicesList Text
 bslProject
   = lens _bslProject (\ s a -> s{_bslProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 bslFilter :: Lens' BackendServicesList (Maybe Text)
 bslFilter
   = lens _bslFilter (\ s a -> s{_bslFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 bslPageToken :: Lens' BackendServicesList (Maybe Text)
 bslPageToken
   = lens _bslPageToken (\ s a -> s{_bslPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 bslMaxResults :: Lens' BackendServicesList Word32
 bslMaxResults
   = lens _bslMaxResults
@@ -127,7 +139,11 @@
 
 instance GoogleRequest BackendServicesList where
         type Rs BackendServicesList = BackendServiceList
-        requestClient BackendServicesList{..}
+        type Scopes BackendServicesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient BackendServicesList'{..}
           = go _bslProject _bslFilter _bslPageToken
               (Just _bslMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/Patch.hs b/gen/Network/Google/Resource/Compute/BackendServices/Patch.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/Patch.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/Patch.hs
@@ -14,14 +14,16 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Update the entire content of the BackendService resource. This method
--- supports patch semantics.
+-- Updates the entire content of the BackendService resource. There are
+-- several restrictions and guidelines to keep in mind when updating a
+-- backend service. Read Restrictions and Guidelines for more information.
+-- This method supports patch semantics.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.backendServices.patch@.
 module Network.Google.Resource.Compute.BackendServices.Patch
@@ -56,11 +58,13 @@
                      ReqBody '[JSON] BackendService :>
                        Patch '[JSON] Operation
 
--- | Update the entire content of the BackendService resource. This method
--- supports patch semantics.
+-- | Updates the entire content of the BackendService resource. There are
+-- several restrictions and guidelines to keep in mind when updating a
+-- backend service. Read Restrictions and Guidelines for more information.
+-- This method supports patch semantics.
 --
 -- /See:/ 'backendServicesPatch' smart constructor.
-data BackendServicesPatch = BackendServicesPatch
+data BackendServicesPatch = BackendServicesPatch'
     { _bspProject        :: !Text
     , _bspPayload        :: !BackendService
     , _bspBackendService :: !Text
@@ -81,13 +85,13 @@
     -> Text -- ^ 'bspBackendService'
     -> BackendServicesPatch
 backendServicesPatch pBspProject_ pBspPayload_ pBspBackendService_ =
-    BackendServicesPatch
+    BackendServicesPatch'
     { _bspProject = pBspProject_
     , _bspPayload = pBspPayload_
     , _bspBackendService = pBspBackendService_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 bspProject :: Lens' BackendServicesPatch Text
 bspProject
   = lens _bspProject (\ s a -> s{_bspProject = a})
@@ -105,7 +109,10 @@
 
 instance GoogleRequest BackendServicesPatch where
         type Rs BackendServicesPatch = Operation
-        requestClient BackendServicesPatch{..}
+        type Scopes BackendServicesPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient BackendServicesPatch'{..}
           = go _bspProject _bspBackendService (Just AltJSON)
               _bspPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/BackendServices/Update.hs b/gen/Network/Google/Resource/Compute/BackendServices/Update.hs
--- a/gen/Network/Google/Resource/Compute/BackendServices/Update.hs
+++ b/gen/Network/Google/Resource/Compute/BackendServices/Update.hs
@@ -14,13 +14,15 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.BackendServices.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Update the entire content of the BackendService resource.
+-- Updates the entire content of the BackendService resource. There are
+-- several restrictions and guidelines to keep in mind when updating a
+-- backend service. Read Restrictions and Guidelines for more information.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.backendServices.update@.
 module Network.Google.Resource.Compute.BackendServices.Update
@@ -55,10 +57,12 @@
                      ReqBody '[JSON] BackendService :>
                        Put '[JSON] Operation
 
--- | Update the entire content of the BackendService resource.
+-- | Updates the entire content of the BackendService resource. There are
+-- several restrictions and guidelines to keep in mind when updating a
+-- backend service. Read Restrictions and Guidelines for more information.
 --
 -- /See:/ 'backendServicesUpdate' smart constructor.
-data BackendServicesUpdate = BackendServicesUpdate
+data BackendServicesUpdate = BackendServicesUpdate'
     { _bsuProject        :: !Text
     , _bsuPayload        :: !BackendService
     , _bsuBackendService :: !Text
@@ -79,13 +83,13 @@
     -> Text -- ^ 'bsuBackendService'
     -> BackendServicesUpdate
 backendServicesUpdate pBsuProject_ pBsuPayload_ pBsuBackendService_ =
-    BackendServicesUpdate
+    BackendServicesUpdate'
     { _bsuProject = pBsuProject_
     , _bsuPayload = pBsuPayload_
     , _bsuBackendService = pBsuBackendService_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 bsuProject :: Lens' BackendServicesUpdate Text
 bsuProject
   = lens _bsuProject (\ s a -> s{_bsuProject = a})
@@ -103,7 +107,10 @@
 
 instance GoogleRequest BackendServicesUpdate where
         type Rs BackendServicesUpdate = Operation
-        requestClient BackendServicesUpdate{..}
+        type Scopes BackendServicesUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient BackendServicesUpdate'{..}
           = go _bsuProject _bsuBackendService (Just AltJSON)
               _bsuPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/DiskTypes/AggregatedList.hs b/gen/Network/Google/Resource/Compute/DiskTypes/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/DiskTypes/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/DiskTypes/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.DiskTypes.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of disk type resources grouped by scope.
+-- Retrieves an aggregated list of disk types.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.diskTypes.aggregatedList@.
 module Network.Google.Resource.Compute.DiskTypes.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] DiskTypeAggregatedList
 
--- | Retrieves the list of disk type resources grouped by scope.
+-- | Retrieves an aggregated list of disk types.
 --
 -- /See:/ 'diskTypesAggregatedList' smart constructor.
-data DiskTypesAggregatedList = DiskTypesAggregatedList
+data DiskTypesAggregatedList = DiskTypesAggregatedList'
     { _dtalProject    :: !Text
     , _dtalFilter     :: !(Maybe Text)
     , _dtalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'dtalProject'
     -> DiskTypesAggregatedList
 diskTypesAggregatedList pDtalProject_ =
-    DiskTypesAggregatedList
+    DiskTypesAggregatedList'
     { _dtalProject = pDtalProject_
     , _dtalFilter = Nothing
     , _dtalPageToken = Nothing
@@ -95,29 +95,41 @@
   = lens _dtalProject (\ s a -> s{_dtalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 dtalFilter :: Lens' DiskTypesAggregatedList (Maybe Text)
 dtalFilter
   = lens _dtalFilter (\ s a -> s{_dtalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 dtalPageToken :: Lens' DiskTypesAggregatedList (Maybe Text)
 dtalPageToken
   = lens _dtalPageToken
       (\ s a -> s{_dtalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 dtalMaxResults :: Lens' DiskTypesAggregatedList Word32
 dtalMaxResults
   = lens _dtalMaxResults
@@ -127,7 +139,11 @@
 instance GoogleRequest DiskTypesAggregatedList where
         type Rs DiskTypesAggregatedList =
              DiskTypeAggregatedList
-        requestClient DiskTypesAggregatedList{..}
+        type Scopes DiskTypesAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient DiskTypesAggregatedList'{..}
           = go _dtalProject _dtalFilter _dtalPageToken
               (Just _dtalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/DiskTypes/Get.hs b/gen/Network/Google/Resource/Compute/DiskTypes/Get.hs
--- a/gen/Network/Google/Resource/Compute/DiskTypes/Get.hs
+++ b/gen/Network/Google/Resource/Compute/DiskTypes/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.DiskTypes.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified disk type resource.
+-- Returns the specified disk type. Get a list of available disk types by
+-- making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.diskTypes.get@.
 module Network.Google.Resource.Compute.DiskTypes.Get
@@ -54,10 +55,11 @@
                    Capture "diskType" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] DiskType
 
--- | Returns the specified disk type resource.
+-- | Returns the specified disk type. Get a list of available disk types by
+-- making a list() request.
 --
 -- /See:/ 'diskTypesGet' smart constructor.
-data DiskTypesGet = DiskTypesGet
+data DiskTypesGet = DiskTypesGet'
     { _dtgProject  :: !Text
     , _dtgZone     :: !Text
     , _dtgDiskType :: !Text
@@ -78,7 +80,7 @@
     -> Text -- ^ 'dtgDiskType'
     -> DiskTypesGet
 diskTypesGet pDtgProject_ pDtgZone_ pDtgDiskType_ =
-    DiskTypesGet
+    DiskTypesGet'
     { _dtgProject = pDtgProject_
     , _dtgZone = pDtgZone_
     , _dtgDiskType = pDtgDiskType_
@@ -93,14 +95,18 @@
 dtgZone :: Lens' DiskTypesGet Text
 dtgZone = lens _dtgZone (\ s a -> s{_dtgZone = a})
 
--- | Name of the disk type resource to return.
+-- | Name of the disk type to return.
 dtgDiskType :: Lens' DiskTypesGet Text
 dtgDiskType
   = lens _dtgDiskType (\ s a -> s{_dtgDiskType = a})
 
 instance GoogleRequest DiskTypesGet where
         type Rs DiskTypesGet = DiskType
-        requestClient DiskTypesGet{..}
+        type Scopes DiskTypesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient DiskTypesGet'{..}
           = go _dtgProject _dtgZone _dtgDiskType (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/DiskTypes/List.hs b/gen/Network/Google/Resource/Compute/DiskTypes/List.hs
--- a/gen/Network/Google/Resource/Compute/DiskTypes/List.hs
+++ b/gen/Network/Google/Resource/Compute/DiskTypes/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.DiskTypes.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of disk type resources available to the specified
--- project.
+-- Retrieves a list of disk types available to the specified project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.diskTypes.list@.
 module Network.Google.Resource.Compute.DiskTypes.List
@@ -59,11 +58,10 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] DiskTypeList
 
--- | Retrieves the list of disk type resources available to the specified
--- project.
+-- | Retrieves a list of disk types available to the specified project.
 --
 -- /See:/ 'diskTypesList' smart constructor.
-data DiskTypesList = DiskTypesList
+data DiskTypesList = DiskTypesList'
     { _dtlProject    :: !Text
     , _dtlZone       :: !Text
     , _dtlFilter     :: !(Maybe Text)
@@ -89,7 +87,7 @@
     -> Text -- ^ 'dtlZone'
     -> DiskTypesList
 diskTypesList pDtlProject_ pDtlZone_ =
-    DiskTypesList
+    DiskTypesList'
     { _dtlProject = pDtlProject_
     , _dtlZone = pDtlZone_
     , _dtlFilter = Nothing
@@ -107,28 +105,40 @@
 dtlZone = lens _dtlZone (\ s a -> s{_dtlZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 dtlFilter :: Lens' DiskTypesList (Maybe Text)
 dtlFilter
   = lens _dtlFilter (\ s a -> s{_dtlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 dtlPageToken :: Lens' DiskTypesList (Maybe Text)
 dtlPageToken
   = lens _dtlPageToken (\ s a -> s{_dtlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 dtlMaxResults :: Lens' DiskTypesList Word32
 dtlMaxResults
   = lens _dtlMaxResults
@@ -137,7 +147,11 @@
 
 instance GoogleRequest DiskTypesList where
         type Rs DiskTypesList = DiskTypeList
-        requestClient DiskTypesList{..}
+        type Scopes DiskTypesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient DiskTypesList'{..}
           = go _dtlProject _dtlZone _dtlFilter _dtlPageToken
               (Just _dtlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Disks/AggregatedList.hs b/gen/Network/Google/Resource/Compute/Disks/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/Disks/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/Disks/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Disks.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of disks grouped by scope.
+-- Retrieves an aggregated list of persistent disks.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.disks.aggregatedList@.
 module Network.Google.Resource.Compute.Disks.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] DiskAggregatedList
 
--- | Retrieves the list of disks grouped by scope.
+-- | Retrieves an aggregated list of persistent disks.
 --
 -- /See:/ 'disksAggregatedList' smart constructor.
-data DisksAggregatedList = DisksAggregatedList
+data DisksAggregatedList = DisksAggregatedList'
     { _dalProject    :: !Text
     , _dalFilter     :: !(Maybe Text)
     , _dalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'dalProject'
     -> DisksAggregatedList
 disksAggregatedList pDalProject_ =
-    DisksAggregatedList
+    DisksAggregatedList'
     { _dalProject = pDalProject_
     , _dalFilter = Nothing
     , _dalPageToken = Nothing
@@ -95,28 +95,40 @@
   = lens _dalProject (\ s a -> s{_dalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 dalFilter :: Lens' DisksAggregatedList (Maybe Text)
 dalFilter
   = lens _dalFilter (\ s a -> s{_dalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 dalPageToken :: Lens' DisksAggregatedList (Maybe Text)
 dalPageToken
   = lens _dalPageToken (\ s a -> s{_dalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 dalMaxResults :: Lens' DisksAggregatedList Word32
 dalMaxResults
   = lens _dalMaxResults
@@ -125,7 +137,11 @@
 
 instance GoogleRequest DisksAggregatedList where
         type Rs DisksAggregatedList = DiskAggregatedList
-        requestClient DisksAggregatedList{..}
+        type Scopes DisksAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient DisksAggregatedList'{..}
           = go _dalProject _dalFilter _dalPageToken
               (Just _dalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Disks/CreateSnapshot.hs b/gen/Network/Google/Resource/Compute/Disks/CreateSnapshot.hs
--- a/gen/Network/Google/Resource/Compute/Disks/CreateSnapshot.hs
+++ b/gen/Network/Google/Resource/Compute/Disks/CreateSnapshot.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Disks.CreateSnapshot
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 snapshot of this disk.
+-- Creates a snapshot of a specified persistent disk.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.disks.createSnapshot@.
 module Network.Google.Resource.Compute.Disks.CreateSnapshot
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          ReqBody '[JSON] Snapshot :> Post '[JSON] Operation
 
--- | Creates a snapshot of this disk.
+-- | Creates a snapshot of a specified persistent disk.
 --
 -- /See:/ 'disksCreateSnapshot' smart constructor.
-data DisksCreateSnapshot = DisksCreateSnapshot
+data DisksCreateSnapshot = DisksCreateSnapshot'
     { _dcsProject :: !Text
     , _dcsDisk    :: !Text
     , _dcsZone    :: !Text
@@ -85,7 +85,7 @@
     -> Snapshot -- ^ 'dcsPayload'
     -> DisksCreateSnapshot
 disksCreateSnapshot pDcsProject_ pDcsDisk_ pDcsZone_ pDcsPayload_ =
-    DisksCreateSnapshot
+    DisksCreateSnapshot'
     { _dcsProject = pDcsProject_
     , _dcsDisk = pDcsDisk_
     , _dcsZone = pDcsZone_
@@ -112,7 +112,10 @@
 
 instance GoogleRequest DisksCreateSnapshot where
         type Rs DisksCreateSnapshot = Operation
-        requestClient DisksCreateSnapshot{..}
+        type Scopes DisksCreateSnapshot =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient DisksCreateSnapshot'{..}
           = go _dcsProject _dcsZone _dcsDisk (Just AltJSON)
               _dcsPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Disks/Delete.hs b/gen/Network/Google/Resource/Compute/Disks/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Disks/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Disks/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Disks.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -63,7 +63,7 @@
 -- delete snapshots.
 --
 -- /See:/ 'disksDelete' smart constructor.
-data DisksDelete = DisksDelete
+data DisksDelete = DisksDelete'
     { _ddProject :: !Text
     , _ddDisk    :: !Text
     , _ddZone    :: !Text
@@ -84,7 +84,7 @@
     -> Text -- ^ 'ddZone'
     -> DisksDelete
 disksDelete pDdProject_ pDdDisk_ pDdZone_ =
-    DisksDelete
+    DisksDelete'
     { _ddProject = pDdProject_
     , _ddDisk = pDdDisk_
     , _ddZone = pDdZone_
@@ -105,7 +105,10 @@
 
 instance GoogleRequest DisksDelete where
         type Rs DisksDelete = Operation
-        requestClient DisksDelete{..}
+        type Scopes DisksDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient DisksDelete'{..}
           = go _ddProject _ddZone _ddDisk (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Disks/Get.hs b/gen/Network/Google/Resource/Compute/Disks/Get.hs
--- a/gen/Network/Google/Resource/Compute/Disks/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Disks/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Disks.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 specified persistent disk.
+-- Returns a specified persistent disk. Get a list of available persistent
+-- disks by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.disks.get@.
 module Network.Google.Resource.Compute.Disks.Get
@@ -54,10 +55,11 @@
                    Capture "disk" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] Disk
 
--- | Returns a specified persistent disk.
+-- | Returns a specified persistent disk. Get a list of available persistent
+-- disks by making a list() request.
 --
 -- /See:/ 'disksGet' smart constructor.
-data DisksGet = DisksGet
+data DisksGet = DisksGet'
     { _dgProject :: !Text
     , _dgDisk    :: !Text
     , _dgZone    :: !Text
@@ -78,7 +80,7 @@
     -> Text -- ^ 'dgZone'
     -> DisksGet
 disksGet pDgProject_ pDgDisk_ pDgZone_ =
-    DisksGet
+    DisksGet'
     { _dgProject = pDgProject_
     , _dgDisk = pDgDisk_
     , _dgZone = pDgZone_
@@ -99,7 +101,11 @@
 
 instance GoogleRequest DisksGet where
         type Rs DisksGet = Disk
-        requestClient DisksGet{..}
+        type Scopes DisksGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient DisksGet'{..}
           = go _dgProject _dgZone _dgDisk (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Disks/Insert.hs b/gen/Network/Google/Resource/Compute/Disks/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Disks/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Disks/Insert.hs
@@ -14,14 +14,17 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Disks.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 persistent disk in the specified project using the data
--- included in the request.
+-- Creates a persistent disk in the specified project using the data in the
+-- request. You can create a disk with a sourceImage, a sourceSnapshot, or
+-- create an empty 500 GB data disk by omitting all properties. You can
+-- also create a disk that is larger than the default size by specifying
+-- the sizeGb property.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.disks.insert@.
 module Network.Google.Resource.Compute.Disks.Insert
@@ -57,11 +60,14 @@
                      QueryParam "alt" AltJSON :>
                        ReqBody '[JSON] Disk :> Post '[JSON] Operation
 
--- | Creates a persistent disk in the specified project using the data
--- included in the request.
+-- | Creates a persistent disk in the specified project using the data in the
+-- request. You can create a disk with a sourceImage, a sourceSnapshot, or
+-- create an empty 500 GB data disk by omitting all properties. You can
+-- also create a disk that is larger than the default size by specifying
+-- the sizeGb property.
 --
 -- /See:/ 'disksInsert' smart constructor.
-data DisksInsert = DisksInsert
+data DisksInsert = DisksInsert'
     { _diSourceImage :: !(Maybe Text)
     , _diProject     :: !Text
     , _diZone        :: !Text
@@ -85,7 +91,7 @@
     -> Disk -- ^ 'diPayload'
     -> DisksInsert
 disksInsert pDiProject_ pDiZone_ pDiPayload_ =
-    DisksInsert
+    DisksInsert'
     { _diSourceImage = Nothing
     , _diProject = pDiProject_
     , _diZone = pDiZone_
@@ -114,7 +120,10 @@
 
 instance GoogleRequest DisksInsert where
         type Rs DisksInsert = Operation
-        requestClient DisksInsert{..}
+        type Scopes DisksInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient DisksInsert'{..}
           = go _diProject _diZone _diSourceImage (Just AltJSON)
               _diPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Disks/List.hs b/gen/Network/Google/Resource/Compute/Disks/List.hs
--- a/gen/Network/Google/Resource/Compute/Disks/List.hs
+++ b/gen/Network/Google/Resource/Compute/Disks/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Disks.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of persistent disks contained within the specified
+-- Retrieves a list of persistent disks contained within the specified
 -- zone.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.disks.list@.
@@ -59,11 +59,11 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] DiskList
 
--- | Retrieves the list of persistent disks contained within the specified
+-- | Retrieves a list of persistent disks contained within the specified
 -- zone.
 --
 -- /See:/ 'disksList' smart constructor.
-data DisksList = DisksList
+data DisksList = DisksList'
     { _dlProject    :: !Text
     , _dlZone       :: !Text
     , _dlFilter     :: !(Maybe Text)
@@ -89,7 +89,7 @@
     -> Text -- ^ 'dlZone'
     -> DisksList
 disksList pDlProject_ pDlZone_ =
-    DisksList
+    DisksList'
     { _dlProject = pDlProject_
     , _dlZone = pDlZone_
     , _dlFilter = Nothing
@@ -107,27 +107,39 @@
 dlZone = lens _dlZone (\ s a -> s{_dlZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 dlFilter :: Lens' DisksList (Maybe Text)
 dlFilter = lens _dlFilter (\ s a -> s{_dlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 dlPageToken :: Lens' DisksList (Maybe Text)
 dlPageToken
   = lens _dlPageToken (\ s a -> s{_dlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 dlMaxResults :: Lens' DisksList Word32
 dlMaxResults
   = lens _dlMaxResults (\ s a -> s{_dlMaxResults = a})
@@ -135,7 +147,11 @@
 
 instance GoogleRequest DisksList where
         type Rs DisksList = DiskList
-        requestClient DisksList{..}
+        type Scopes DisksList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient DisksList'{..}
           = go _dlProject _dlZone _dlFilter _dlPageToken
               (Just _dlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Disks/Resize.hs b/gen/Network/Google/Resource/Compute/Disks/Resize.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Disks/Resize.hs
@@ -0,0 +1,125 @@
+{-# 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.Compute.Disks.Resize
+-- 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)
+--
+-- Resizes the specified persistent disk.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.disks.resize@.
+module Network.Google.Resource.Compute.Disks.Resize
+    (
+    -- * REST Resource
+      DisksResizeResource
+
+    -- * Creating a Request
+    , disksResize
+    , DisksResize
+
+    -- * Request Lenses
+    , drProject
+    , drDisk
+    , drZone
+    , drPayload
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.disks.resize@ method which the
+-- 'DisksResize' request conforms to.
+type DisksResizeResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "zones" :>
+               Capture "zone" Text :>
+                 "disks" :>
+                   Capture "disk" Text :>
+                     "resize" :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] DisksResizeRequest :>
+                           Post '[JSON] Operation
+
+-- | Resizes the specified persistent disk.
+--
+-- /See:/ 'disksResize' smart constructor.
+data DisksResize = DisksResize'
+    { _drProject :: !Text
+    , _drDisk    :: !Text
+    , _drZone    :: !Text
+    , _drPayload :: !DisksResizeRequest
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisksResize' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drProject'
+--
+-- * 'drDisk'
+--
+-- * 'drZone'
+--
+-- * 'drPayload'
+disksResize
+    :: Text -- ^ 'drProject'
+    -> Text -- ^ 'drDisk'
+    -> Text -- ^ 'drZone'
+    -> DisksResizeRequest -- ^ 'drPayload'
+    -> DisksResize
+disksResize pDrProject_ pDrDisk_ pDrZone_ pDrPayload_ =
+    DisksResize'
+    { _drProject = pDrProject_
+    , _drDisk = pDrDisk_
+    , _drZone = pDrZone_
+    , _drPayload = pDrPayload_
+    }
+
+-- | Project ID for this request.
+drProject :: Lens' DisksResize Text
+drProject
+  = lens _drProject (\ s a -> s{_drProject = a})
+
+-- | The name of the persistent disk.
+drDisk :: Lens' DisksResize Text
+drDisk = lens _drDisk (\ s a -> s{_drDisk = a})
+
+-- | The name of the zone for this request.
+drZone :: Lens' DisksResize Text
+drZone = lens _drZone (\ s a -> s{_drZone = a})
+
+-- | Multipart request metadata.
+drPayload :: Lens' DisksResize DisksResizeRequest
+drPayload
+  = lens _drPayload (\ s a -> s{_drPayload = a})
+
+instance GoogleRequest DisksResize where
+        type Rs DisksResize = Operation
+        type Scopes DisksResize =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient DisksResize'{..}
+          = go _drProject _drZone _drDisk (Just AltJSON)
+              _drPayload
+              computeService
+          where go
+                  = buildClient (Proxy :: Proxy DisksResizeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Firewalls/Delete.hs b/gen/Network/Google/Resource/Compute/Firewalls/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Firewalls/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Firewalls/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Firewalls.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified firewall resource.
+-- Deletes the specified firewall.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.firewalls.delete@.
 module Network.Google.Resource.Compute.Firewalls.Delete
@@ -52,10 +52,10 @@
                  Capture "firewall" Text :>
                    QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified firewall resource.
+-- | Deletes the specified firewall.
 --
 -- /See:/ 'firewallsDelete' smart constructor.
-data FirewallsDelete = FirewallsDelete
+data FirewallsDelete = FirewallsDelete'
     { _fdProject  :: !Text
     , _fdFirewall :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'fdFirewall'
     -> FirewallsDelete
 firewallsDelete pFdProject_ pFdFirewall_ =
-    FirewallsDelete
+    FirewallsDelete'
     { _fdProject = pFdProject_
     , _fdFirewall = pFdFirewall_
     }
@@ -82,14 +82,17 @@
 fdProject
   = lens _fdProject (\ s a -> s{_fdProject = a})
 
--- | Name of the firewall resource to delete.
+-- | Name of the firewall rule to delete.
 fdFirewall :: Lens' FirewallsDelete Text
 fdFirewall
   = lens _fdFirewall (\ s a -> s{_fdFirewall = a})
 
 instance GoogleRequest FirewallsDelete where
         type Rs FirewallsDelete = Operation
-        requestClient FirewallsDelete{..}
+        type Scopes FirewallsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient FirewallsDelete'{..}
           = go _fdProject _fdFirewall (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Firewalls/Get.hs b/gen/Network/Google/Resource/Compute/Firewalls/Get.hs
--- a/gen/Network/Google/Resource/Compute/Firewalls/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Firewalls/Get.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Firewalls.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified firewall resource.
+-- Returns the specified firewall.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.firewalls.get@.
 module Network.Google.Resource.Compute.Firewalls.Get
@@ -52,10 +52,10 @@
                  Capture "firewall" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Firewall
 
--- | Returns the specified firewall resource.
+-- | Returns the specified firewall.
 --
 -- /See:/ 'firewallsGet' smart constructor.
-data FirewallsGet = FirewallsGet
+data FirewallsGet = FirewallsGet'
     { _fgProject  :: !Text
     , _fgFirewall :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'fgFirewall'
     -> FirewallsGet
 firewallsGet pFgProject_ pFgFirewall_ =
-    FirewallsGet
+    FirewallsGet'
     { _fgProject = pFgProject_
     , _fgFirewall = pFgFirewall_
     }
@@ -82,14 +82,18 @@
 fgProject
   = lens _fgProject (\ s a -> s{_fgProject = a})
 
--- | Name of the firewall resource to return.
+-- | Name of the firewall rule to return.
 fgFirewall :: Lens' FirewallsGet Text
 fgFirewall
   = lens _fgFirewall (\ s a -> s{_fgFirewall = a})
 
 instance GoogleRequest FirewallsGet where
         type Rs FirewallsGet = Firewall
-        requestClient FirewallsGet{..}
+        type Scopes FirewallsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient FirewallsGet'{..}
           = go _fgProject _fgFirewall (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Firewalls/Insert.hs b/gen/Network/Google/Resource/Compute/Firewalls/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Firewalls/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Firewalls/Insert.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Firewalls.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 firewall resource in the specified project using the data
--- included in the request.
+-- Creates a firewall rule in the specified project using the data included
+-- in the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.firewalls.insert@.
 module Network.Google.Resource.Compute.Firewalls.Insert
@@ -53,11 +53,11 @@
                  QueryParam "alt" AltJSON :>
                    ReqBody '[JSON] Firewall :> Post '[JSON] Operation
 
--- | Creates a firewall resource in the specified project using the data
--- included in the request.
+-- | Creates a firewall rule in the specified project using the data included
+-- in the request.
 --
 -- /See:/ 'firewallsInsert' smart constructor.
-data FirewallsInsert = FirewallsInsert
+data FirewallsInsert = FirewallsInsert'
     { _fiProject :: !Text
     , _fiPayload :: !Firewall
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,7 +74,7 @@
     -> Firewall -- ^ 'fiPayload'
     -> FirewallsInsert
 firewallsInsert pFiProject_ pFiPayload_ =
-    FirewallsInsert
+    FirewallsInsert'
     { _fiProject = pFiProject_
     , _fiPayload = pFiPayload_
     }
@@ -91,7 +91,10 @@
 
 instance GoogleRequest FirewallsInsert where
         type Rs FirewallsInsert = Operation
-        requestClient FirewallsInsert{..}
+        type Scopes FirewallsInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient FirewallsInsert'{..}
           = go _fiProject (Just AltJSON) _fiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Firewalls/List.hs b/gen/Network/Google/Resource/Compute/Firewalls/List.hs
--- a/gen/Network/Google/Resource/Compute/Firewalls/List.hs
+++ b/gen/Network/Google/Resource/Compute/Firewalls/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Firewalls.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of firewall resources available to the specified
--- project.
+-- Retrieves the list of firewall rules available to the specified project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.firewalls.list@.
 module Network.Google.Resource.Compute.Firewalls.List
@@ -57,11 +56,10 @@
                      QueryParam "maxResults" (Textual Word32) :>
                        QueryParam "alt" AltJSON :> Get '[JSON] FirewallList
 
--- | Retrieves the list of firewall resources available to the specified
--- project.
+-- | Retrieves the list of firewall rules available to the specified project.
 --
 -- /See:/ 'firewallsList' smart constructor.
-data FirewallsList = FirewallsList
+data FirewallsList = FirewallsList'
     { _flProject    :: !Text
     , _flFilter     :: !(Maybe Text)
     , _flPageToken  :: !(Maybe Text)
@@ -83,7 +81,7 @@
     :: Text -- ^ 'flProject'
     -> FirewallsList
 firewallsList pFlProject_ =
-    FirewallsList
+    FirewallsList'
     { _flProject = pFlProject_
     , _flFilter = Nothing
     , _flPageToken = Nothing
@@ -96,27 +94,39 @@
   = lens _flProject (\ s a -> s{_flProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 flFilter :: Lens' FirewallsList (Maybe Text)
 flFilter = lens _flFilter (\ s a -> s{_flFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 flPageToken :: Lens' FirewallsList (Maybe Text)
 flPageToken
   = lens _flPageToken (\ s a -> s{_flPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 flMaxResults :: Lens' FirewallsList Word32
 flMaxResults
   = lens _flMaxResults (\ s a -> s{_flMaxResults = a})
@@ -124,7 +134,11 @@
 
 instance GoogleRequest FirewallsList where
         type Rs FirewallsList = FirewallList
-        requestClient FirewallsList{..}
+        type Scopes FirewallsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient FirewallsList'{..}
           = go _flProject _flFilter _flPageToken
               (Just _flMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Firewalls/Patch.hs b/gen/Network/Google/Resource/Compute/Firewalls/Patch.hs
--- a/gen/Network/Google/Resource/Compute/Firewalls/Patch.hs
+++ b/gen/Network/Google/Resource/Compute/Firewalls/Patch.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Firewalls.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Updates the specified firewall resource with the data included in the
+-- Updates the specified firewall rule with the data included in the
 -- request. This method supports patch semantics.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.firewalls.patch@.
@@ -55,11 +55,11 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] Firewall :> Patch '[JSON] Operation
 
--- | Updates the specified firewall resource with the data included in the
+-- | Updates the specified firewall rule with the data included in the
 -- request. This method supports patch semantics.
 --
 -- /See:/ 'firewallsPatch' smart constructor.
-data FirewallsPatch = FirewallsPatch
+data FirewallsPatch = FirewallsPatch'
     { _fpProject  :: !Text
     , _fpPayload  :: !Firewall
     , _fpFirewall :: !Text
@@ -80,7 +80,7 @@
     -> Text -- ^ 'fpFirewall'
     -> FirewallsPatch
 firewallsPatch pFpProject_ pFpPayload_ pFpFirewall_ =
-    FirewallsPatch
+    FirewallsPatch'
     { _fpProject = pFpProject_
     , _fpPayload = pFpPayload_
     , _fpFirewall = pFpFirewall_
@@ -96,14 +96,17 @@
 fpPayload
   = lens _fpPayload (\ s a -> s{_fpPayload = a})
 
--- | Name of the firewall resource to update.
+-- | Name of the firewall rule to update.
 fpFirewall :: Lens' FirewallsPatch Text
 fpFirewall
   = lens _fpFirewall (\ s a -> s{_fpFirewall = a})
 
 instance GoogleRequest FirewallsPatch where
         type Rs FirewallsPatch = Operation
-        requestClient FirewallsPatch{..}
+        type Scopes FirewallsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient FirewallsPatch'{..}
           = go _fpProject _fpFirewall (Just AltJSON) _fpPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Firewalls/Update.hs b/gen/Network/Google/Resource/Compute/Firewalls/Update.hs
--- a/gen/Network/Google/Resource/Compute/Firewalls/Update.hs
+++ b/gen/Network/Google/Resource/Compute/Firewalls/Update.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Firewalls.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Updates the specified firewall resource with the data included in the
+-- Updates the specified firewall rule with the data included in the
 -- request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.firewalls.update@.
@@ -55,11 +55,11 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] Firewall :> Put '[JSON] Operation
 
--- | Updates the specified firewall resource with the data included in the
+-- | Updates the specified firewall rule with the data included in the
 -- request.
 --
 -- /See:/ 'firewallsUpdate' smart constructor.
-data FirewallsUpdate = FirewallsUpdate
+data FirewallsUpdate = FirewallsUpdate'
     { _fuProject  :: !Text
     , _fuPayload  :: !Firewall
     , _fuFirewall :: !Text
@@ -80,7 +80,7 @@
     -> Text -- ^ 'fuFirewall'
     -> FirewallsUpdate
 firewallsUpdate pFuProject_ pFuPayload_ pFuFirewall_ =
-    FirewallsUpdate
+    FirewallsUpdate'
     { _fuProject = pFuProject_
     , _fuPayload = pFuPayload_
     , _fuFirewall = pFuFirewall_
@@ -96,14 +96,17 @@
 fuPayload
   = lens _fuPayload (\ s a -> s{_fuPayload = a})
 
--- | Name of the firewall resource to update.
+-- | Name of the firewall rule to update.
 fuFirewall :: Lens' FirewallsUpdate Text
 fuFirewall
   = lens _fuFirewall (\ s a -> s{_fuFirewall = a})
 
 instance GoogleRequest FirewallsUpdate where
         type Rs FirewallsUpdate = Operation
-        requestClient FirewallsUpdate{..}
+        type Scopes FirewallsUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient FirewallsUpdate'{..}
           = go _fuProject _fuFirewall (Just AltJSON) _fuPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/ForwardingRules/AggregatedList.hs b/gen/Network/Google/Resource/Compute/ForwardingRules/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/ForwardingRules/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/ForwardingRules/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ForwardingRules.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of forwarding rules grouped by scope.
+-- Retrieves an aggregated list of forwarding rules.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.forwardingRules.aggregatedList@.
 module Network.Google.Resource.Compute.ForwardingRules.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] ForwardingRuleAggregatedList
 
--- | Retrieves the list of forwarding rules grouped by scope.
+-- | Retrieves an aggregated list of forwarding rules.
 --
 -- /See:/ 'forwardingRulesAggregatedList' smart constructor.
-data ForwardingRulesAggregatedList = ForwardingRulesAggregatedList
+data ForwardingRulesAggregatedList = ForwardingRulesAggregatedList'
     { _fralProject    :: !Text
     , _fralFilter     :: !(Maybe Text)
     , _fralPageToken  :: !(Maybe Text)
@@ -82,42 +82,54 @@
     :: Text -- ^ 'fralProject'
     -> ForwardingRulesAggregatedList
 forwardingRulesAggregatedList pFralProject_ =
-    ForwardingRulesAggregatedList
+    ForwardingRulesAggregatedList'
     { _fralProject = pFralProject_
     , _fralFilter = Nothing
     , _fralPageToken = Nothing
     , _fralMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 fralProject :: Lens' ForwardingRulesAggregatedList Text
 fralProject
   = lens _fralProject (\ s a -> s{_fralProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 fralFilter :: Lens' ForwardingRulesAggregatedList (Maybe Text)
 fralFilter
   = lens _fralFilter (\ s a -> s{_fralFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 fralPageToken :: Lens' ForwardingRulesAggregatedList (Maybe Text)
 fralPageToken
   = lens _fralPageToken
       (\ s a -> s{_fralPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 fralMaxResults :: Lens' ForwardingRulesAggregatedList Word32
 fralMaxResults
   = lens _fralMaxResults
@@ -128,7 +140,11 @@
          where
         type Rs ForwardingRulesAggregatedList =
              ForwardingRuleAggregatedList
-        requestClient ForwardingRulesAggregatedList{..}
+        type Scopes ForwardingRulesAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ForwardingRulesAggregatedList'{..}
           = go _fralProject _fralFilter _fralPageToken
               (Just _fralMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/ForwardingRules/Delete.hs b/gen/Network/Google/Resource/Compute/ForwardingRules/Delete.hs
--- a/gen/Network/Google/Resource/Compute/ForwardingRules/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/ForwardingRules/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ForwardingRules.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Deletes the specified ForwardingRule resource.
 --
 -- /See:/ 'forwardingRulesDelete' smart constructor.
-data ForwardingRulesDelete = ForwardingRulesDelete
+data ForwardingRulesDelete = ForwardingRulesDelete'
     { _frdProject        :: !Text
     , _frdForwardingRule :: !Text
     , _frdRegion         :: !Text
@@ -78,13 +78,13 @@
     -> Text -- ^ 'frdRegion'
     -> ForwardingRulesDelete
 forwardingRulesDelete pFrdProject_ pFrdForwardingRule_ pFrdRegion_ =
-    ForwardingRulesDelete
+    ForwardingRulesDelete'
     { _frdProject = pFrdProject_
     , _frdForwardingRule = pFrdForwardingRule_
     , _frdRegion = pFrdRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 frdProject :: Lens' ForwardingRulesDelete Text
 frdProject
   = lens _frdProject (\ s a -> s{_frdProject = a})
@@ -102,7 +102,10 @@
 
 instance GoogleRequest ForwardingRulesDelete where
         type Rs ForwardingRulesDelete = Operation
-        requestClient ForwardingRulesDelete{..}
+        type Scopes ForwardingRulesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ForwardingRulesDelete'{..}
           = go _frdProject _frdRegion _frdForwardingRule
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/ForwardingRules/Get.hs b/gen/Network/Google/Resource/Compute/ForwardingRules/Get.hs
--- a/gen/Network/Google/Resource/Compute/ForwardingRules/Get.hs
+++ b/gen/Network/Google/Resource/Compute/ForwardingRules/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ForwardingRules.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Returns the specified ForwardingRule resource.
 --
 -- /See:/ 'forwardingRulesGet' smart constructor.
-data ForwardingRulesGet = ForwardingRulesGet
+data ForwardingRulesGet = ForwardingRulesGet'
     { _frgProject        :: !Text
     , _frgForwardingRule :: !Text
     , _frgRegion         :: !Text
@@ -79,13 +79,13 @@
     -> Text -- ^ 'frgRegion'
     -> ForwardingRulesGet
 forwardingRulesGet pFrgProject_ pFrgForwardingRule_ pFrgRegion_ =
-    ForwardingRulesGet
+    ForwardingRulesGet'
     { _frgProject = pFrgProject_
     , _frgForwardingRule = pFrgForwardingRule_
     , _frgRegion = pFrgRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 frgProject :: Lens' ForwardingRulesGet Text
 frgProject
   = lens _frgProject (\ s a -> s{_frgProject = a})
@@ -103,7 +103,11 @@
 
 instance GoogleRequest ForwardingRulesGet where
         type Rs ForwardingRulesGet = ForwardingRule
-        requestClient ForwardingRulesGet{..}
+        type Scopes ForwardingRulesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ForwardingRulesGet'{..}
           = go _frgProject _frgRegion _frgForwardingRule
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/ForwardingRules/Insert.hs b/gen/Network/Google/Resource/Compute/ForwardingRules/Insert.hs
--- a/gen/Network/Google/Resource/Compute/ForwardingRules/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/ForwardingRules/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ForwardingRules.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- using the data included in the request.
 --
 -- /See:/ 'forwardingRulesInsert' smart constructor.
-data ForwardingRulesInsert = ForwardingRulesInsert
+data ForwardingRulesInsert = ForwardingRulesInsert'
     { _friProject :: !Text
     , _friPayload :: !ForwardingRule
     , _friRegion  :: !Text
@@ -81,13 +81,13 @@
     -> Text -- ^ 'friRegion'
     -> ForwardingRulesInsert
 forwardingRulesInsert pFriProject_ pFriPayload_ pFriRegion_ =
-    ForwardingRulesInsert
+    ForwardingRulesInsert'
     { _friProject = pFriProject_
     , _friPayload = pFriPayload_
     , _friRegion = pFriRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 friProject :: Lens' ForwardingRulesInsert Text
 friProject
   = lens _friProject (\ s a -> s{_friProject = a})
@@ -104,7 +104,10 @@
 
 instance GoogleRequest ForwardingRulesInsert where
         type Rs ForwardingRulesInsert = Operation
-        requestClient ForwardingRulesInsert{..}
+        type Scopes ForwardingRulesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ForwardingRulesInsert'{..}
           = go _friProject _friRegion (Just AltJSON)
               _friPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/ForwardingRules/List.hs b/gen/Network/Google/Resource/Compute/ForwardingRules/List.hs
--- a/gen/Network/Google/Resource/Compute/ForwardingRules/List.hs
+++ b/gen/Network/Google/Resource/Compute/ForwardingRules/List.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ForwardingRules.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of ForwardingRule resources available to the
--- specified project and region.
+-- Retrieves a list of ForwardingRule resources available to the specified
+-- project and region.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.forwardingRules.list@.
 module Network.Google.Resource.Compute.ForwardingRules.List
@@ -60,11 +60,11 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] ForwardingRuleList
 
--- | Retrieves the list of ForwardingRule resources available to the
--- specified project and region.
+-- | Retrieves a list of ForwardingRule resources available to the specified
+-- project and region.
 --
 -- /See:/ 'forwardingRulesList' smart constructor.
-data ForwardingRulesList = ForwardingRulesList
+data ForwardingRulesList = ForwardingRulesList'
     { _frlProject    :: !Text
     , _frlFilter     :: !(Maybe Text)
     , _frlRegion     :: !Text
@@ -90,7 +90,7 @@
     -> Text -- ^ 'frlRegion'
     -> ForwardingRulesList
 forwardingRulesList pFrlProject_ pFrlRegion_ =
-    ForwardingRulesList
+    ForwardingRulesList'
     { _frlProject = pFrlProject_
     , _frlFilter = Nothing
     , _frlRegion = pFrlRegion_
@@ -98,22 +98,32 @@
     , _frlMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 frlProject :: Lens' ForwardingRulesList Text
 frlProject
   = lens _frlProject (\ s a -> s{_frlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 frlFilter :: Lens' ForwardingRulesList (Maybe Text)
 frlFilter
   = lens _frlFilter (\ s a -> s{_frlFilter = a})
@@ -123,14 +133,16 @@
 frlRegion
   = lens _frlRegion (\ s a -> s{_frlRegion = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 frlPageToken :: Lens' ForwardingRulesList (Maybe Text)
 frlPageToken
   = lens _frlPageToken (\ s a -> s{_frlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 frlMaxResults :: Lens' ForwardingRulesList Word32
 frlMaxResults
   = lens _frlMaxResults
@@ -139,7 +151,11 @@
 
 instance GoogleRequest ForwardingRulesList where
         type Rs ForwardingRulesList = ForwardingRuleList
-        requestClient ForwardingRulesList{..}
+        type Scopes ForwardingRulesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ForwardingRulesList'{..}
           = go _frlProject _frlRegion _frlFilter _frlPageToken
               (Just _frlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/ForwardingRules/SetTarget.hs b/gen/Network/Google/Resource/Compute/ForwardingRules/SetTarget.hs
--- a/gen/Network/Google/Resource/Compute/ForwardingRules/SetTarget.hs
+++ b/gen/Network/Google/Resource/Compute/ForwardingRules/SetTarget.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ForwardingRules.SetTarget
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Changes target url for forwarding rule.
+-- Changes target URL for forwarding rule. The new target should be of the
+-- same type as the old target.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.forwardingRules.setTarget@.
 module Network.Google.Resource.Compute.ForwardingRules.SetTarget
@@ -58,10 +59,11 @@
                          ReqBody '[JSON] TargetReference :>
                            Post '[JSON] Operation
 
--- | Changes target url for forwarding rule.
+-- | Changes target URL for forwarding rule. The new target should be of the
+-- same type as the old target.
 --
 -- /See:/ 'forwardingRulesSetTarget' smart constructor.
-data ForwardingRulesSetTarget = ForwardingRulesSetTarget
+data ForwardingRulesSetTarget = ForwardingRulesSetTarget'
     { _frstProject        :: !Text
     , _frstForwardingRule :: !Text
     , _frstPayload        :: !TargetReference
@@ -86,14 +88,14 @@
     -> Text -- ^ 'frstRegion'
     -> ForwardingRulesSetTarget
 forwardingRulesSetTarget pFrstProject_ pFrstForwardingRule_ pFrstPayload_ pFrstRegion_ =
-    ForwardingRulesSetTarget
+    ForwardingRulesSetTarget'
     { _frstProject = pFrstProject_
     , _frstForwardingRule = pFrstForwardingRule_
     , _frstPayload = pFrstPayload_
     , _frstRegion = pFrstRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 frstProject :: Lens' ForwardingRulesSetTarget Text
 frstProject
   = lens _frstProject (\ s a -> s{_frstProject = a})
@@ -116,7 +118,10 @@
 
 instance GoogleRequest ForwardingRulesSetTarget where
         type Rs ForwardingRulesSetTarget = Operation
-        requestClient ForwardingRulesSetTarget{..}
+        type Scopes ForwardingRulesSetTarget =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ForwardingRulesSetTarget'{..}
           = go _frstProject _frstRegion _frstForwardingRule
               (Just AltJSON)
               _frstPayload
diff --git a/gen/Network/Google/Resource/Compute/GlobalAddresses/Delete.hs b/gen/Network/Google/Resource/Compute/GlobalAddresses/Delete.hs
--- a/gen/Network/Google/Resource/Compute/GlobalAddresses/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalAddresses/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalAddresses.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified address resource.
 --
 -- /See:/ 'globalAddressesDelete' smart constructor.
-data GlobalAddressesDelete = GlobalAddressesDelete
+data GlobalAddressesDelete = GlobalAddressesDelete'
     { _gadProject :: !Text
     , _gadAddress :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'gadAddress'
     -> GlobalAddressesDelete
 globalAddressesDelete pGadProject_ pGadAddress_ =
-    GlobalAddressesDelete
+    GlobalAddressesDelete'
     { _gadProject = pGadProject_
     , _gadAddress = pGadAddress_
     }
@@ -89,7 +89,10 @@
 
 instance GoogleRequest GlobalAddressesDelete where
         type Rs GlobalAddressesDelete = Operation
-        requestClient GlobalAddressesDelete{..}
+        type Scopes GlobalAddressesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient GlobalAddressesDelete'{..}
           = go _gadProject _gadAddress (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalAddresses/Get.hs b/gen/Network/Google/Resource/Compute/GlobalAddresses/Get.hs
--- a/gen/Network/Google/Resource/Compute/GlobalAddresses/Get.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalAddresses/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalAddresses.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified address resource.
+-- Returns the specified address resource. Get a list of available
+-- addresses by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalAddresses.get@.
 module Network.Google.Resource.Compute.GlobalAddresses.Get
@@ -52,10 +53,11 @@
                  Capture "address" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Address
 
--- | Returns the specified address resource.
+-- | Returns the specified address resource. Get a list of available
+-- addresses by making a list() request.
 --
 -- /See:/ 'globalAddressesGet' smart constructor.
-data GlobalAddressesGet = GlobalAddressesGet
+data GlobalAddressesGet = GlobalAddressesGet'
     { _gagProject :: !Text
     , _gagAddress :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +74,7 @@
     -> Text -- ^ 'gagAddress'
     -> GlobalAddressesGet
 globalAddressesGet pGagProject_ pGagAddress_ =
-    GlobalAddressesGet
+    GlobalAddressesGet'
     { _gagProject = pGagProject_
     , _gagAddress = pGagAddress_
     }
@@ -89,7 +91,11 @@
 
 instance GoogleRequest GlobalAddressesGet where
         type Rs GlobalAddressesGet = Address
-        requestClient GlobalAddressesGet{..}
+        type Scopes GlobalAddressesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalAddressesGet'{..}
           = go _gagProject _gagAddress (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalAddresses/Insert.hs b/gen/Network/Google/Resource/Compute/GlobalAddresses/Insert.hs
--- a/gen/Network/Google/Resource/Compute/GlobalAddresses/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalAddresses/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalAddresses.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- included in the request.
 --
 -- /See:/ 'globalAddressesInsert' smart constructor.
-data GlobalAddressesInsert = GlobalAddressesInsert
+data GlobalAddressesInsert = GlobalAddressesInsert'
     { _gaiProject :: !Text
     , _gaiPayload :: !Address
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,7 +74,7 @@
     -> Address -- ^ 'gaiPayload'
     -> GlobalAddressesInsert
 globalAddressesInsert pGaiProject_ pGaiPayload_ =
-    GlobalAddressesInsert
+    GlobalAddressesInsert'
     { _gaiProject = pGaiProject_
     , _gaiPayload = pGaiPayload_
     }
@@ -91,7 +91,10 @@
 
 instance GoogleRequest GlobalAddressesInsert where
         type Rs GlobalAddressesInsert = Operation
-        requestClient GlobalAddressesInsert{..}
+        type Scopes GlobalAddressesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient GlobalAddressesInsert'{..}
           = go _gaiProject (Just AltJSON) _gaiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalAddresses/List.hs b/gen/Network/Google/Resource/Compute/GlobalAddresses/List.hs
--- a/gen/Network/Google/Resource/Compute/GlobalAddresses/List.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalAddresses/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalAddresses.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of global address resources.
+-- Retrieves a list of global addresses.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalAddresses.list@.
 module Network.Google.Resource.Compute.GlobalAddresses.List
@@ -56,10 +56,10 @@
                      QueryParam "maxResults" (Textual Word32) :>
                        QueryParam "alt" AltJSON :> Get '[JSON] AddressList
 
--- | Retrieves the list of global address resources.
+-- | Retrieves a list of global addresses.
 --
 -- /See:/ 'globalAddressesList' smart constructor.
-data GlobalAddressesList = GlobalAddressesList
+data GlobalAddressesList = GlobalAddressesList'
     { _galProject    :: !Text
     , _galFilter     :: !(Maybe Text)
     , _galPageToken  :: !(Maybe Text)
@@ -81,7 +81,7 @@
     :: Text -- ^ 'galProject'
     -> GlobalAddressesList
 globalAddressesList pGalProject_ =
-    GlobalAddressesList
+    GlobalAddressesList'
     { _galProject = pGalProject_
     , _galFilter = Nothing
     , _galPageToken = Nothing
@@ -94,28 +94,40 @@
   = lens _galProject (\ s a -> s{_galProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 galFilter :: Lens' GlobalAddressesList (Maybe Text)
 galFilter
   = lens _galFilter (\ s a -> s{_galFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 galPageToken :: Lens' GlobalAddressesList (Maybe Text)
 galPageToken
   = lens _galPageToken (\ s a -> s{_galPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 galMaxResults :: Lens' GlobalAddressesList Word32
 galMaxResults
   = lens _galMaxResults
@@ -124,7 +136,11 @@
 
 instance GoogleRequest GlobalAddressesList where
         type Rs GlobalAddressesList = AddressList
-        requestClient GlobalAddressesList{..}
+        type Scopes GlobalAddressesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalAddressesList'{..}
           = go _galProject _galFilter _galPageToken
               (Just _galMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Delete.hs b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Delete.hs
--- a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalForwardingRules.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified ForwardingRule resource.
 --
 -- /See:/ 'globalForwardingRulesDelete' smart constructor.
-data GlobalForwardingRulesDelete = GlobalForwardingRulesDelete
+data GlobalForwardingRulesDelete = GlobalForwardingRulesDelete'
     { _gfrdProject        :: !Text
     , _gfrdForwardingRule :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'gfrdForwardingRule'
     -> GlobalForwardingRulesDelete
 globalForwardingRulesDelete pGfrdProject_ pGfrdForwardingRule_ =
-    GlobalForwardingRulesDelete
+    GlobalForwardingRulesDelete'
     { _gfrdProject = pGfrdProject_
     , _gfrdForwardingRule = pGfrdForwardingRule_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 gfrdProject :: Lens' GlobalForwardingRulesDelete Text
 gfrdProject
   = lens _gfrdProject (\ s a -> s{_gfrdProject = a})
@@ -91,7 +91,10 @@
 instance GoogleRequest GlobalForwardingRulesDelete
          where
         type Rs GlobalForwardingRulesDelete = Operation
-        requestClient GlobalForwardingRulesDelete{..}
+        type Scopes GlobalForwardingRulesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient GlobalForwardingRulesDelete'{..}
           = go _gfrdProject _gfrdForwardingRule (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Get.hs b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Get.hs
--- a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Get.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalForwardingRules.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified ForwardingRule resource.
+-- Returns the specified ForwardingRule resource. Get a list of available
+-- forwarding rules by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalForwardingRules.get@.
 module Network.Google.Resource.Compute.GlobalForwardingRules.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] ForwardingRule
 
--- | Returns the specified ForwardingRule resource.
+-- | Returns the specified ForwardingRule resource. Get a list of available
+-- forwarding rules by making a list() request.
 --
 -- /See:/ 'globalForwardingRulesGet' smart constructor.
-data GlobalForwardingRulesGet = GlobalForwardingRulesGet
+data GlobalForwardingRulesGet = GlobalForwardingRulesGet'
     { _gfrgProject        :: !Text
     , _gfrgForwardingRule :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'gfrgForwardingRule'
     -> GlobalForwardingRulesGet
 globalForwardingRulesGet pGfrgProject_ pGfrgForwardingRule_ =
-    GlobalForwardingRulesGet
+    GlobalForwardingRulesGet'
     { _gfrgProject = pGfrgProject_
     , _gfrgForwardingRule = pGfrgForwardingRule_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 gfrgProject :: Lens' GlobalForwardingRulesGet Text
 gfrgProject
   = lens _gfrgProject (\ s a -> s{_gfrgProject = a})
@@ -91,7 +93,11 @@
 
 instance GoogleRequest GlobalForwardingRulesGet where
         type Rs GlobalForwardingRulesGet = ForwardingRule
-        requestClient GlobalForwardingRulesGet{..}
+        type Scopes GlobalForwardingRulesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalForwardingRulesGet'{..}
           = go _gfrgProject _gfrgForwardingRule (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Insert.hs b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Insert.hs
--- a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalForwardingRules.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- using the data included in the request.
 --
 -- /See:/ 'globalForwardingRulesInsert' smart constructor.
-data GlobalForwardingRulesInsert = GlobalForwardingRulesInsert
+data GlobalForwardingRulesInsert = GlobalForwardingRulesInsert'
     { _gfriProject :: !Text
     , _gfriPayload :: !ForwardingRule
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +75,12 @@
     -> ForwardingRule -- ^ 'gfriPayload'
     -> GlobalForwardingRulesInsert
 globalForwardingRulesInsert pGfriProject_ pGfriPayload_ =
-    GlobalForwardingRulesInsert
+    GlobalForwardingRulesInsert'
     { _gfriProject = pGfriProject_
     , _gfriPayload = pGfriPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 gfriProject :: Lens' GlobalForwardingRulesInsert Text
 gfriProject
   = lens _gfriProject (\ s a -> s{_gfriProject = a})
@@ -93,7 +93,10 @@
 instance GoogleRequest GlobalForwardingRulesInsert
          where
         type Rs GlobalForwardingRulesInsert = Operation
-        requestClient GlobalForwardingRulesInsert{..}
+        type Scopes GlobalForwardingRulesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient GlobalForwardingRulesInsert'{..}
           = go _gfriProject (Just AltJSON) _gfriPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/List.hs b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/List.hs
--- a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/List.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/List.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalForwardingRules.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of ForwardingRule resources available to the
--- specified project.
+-- Retrieves a list of ForwardingRule resources available to the specified
+-- project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalForwardingRules.list@.
 module Network.Google.Resource.Compute.GlobalForwardingRules.List
@@ -58,11 +58,11 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] ForwardingRuleList
 
--- | Retrieves the list of ForwardingRule resources available to the
--- specified project.
+-- | Retrieves a list of ForwardingRule resources available to the specified
+-- project.
 --
 -- /See:/ 'globalForwardingRulesList' smart constructor.
-data GlobalForwardingRulesList = GlobalForwardingRulesList
+data GlobalForwardingRulesList = GlobalForwardingRulesList'
     { _gfrlProject    :: !Text
     , _gfrlFilter     :: !(Maybe Text)
     , _gfrlPageToken  :: !(Maybe Text)
@@ -84,42 +84,54 @@
     :: Text -- ^ 'gfrlProject'
     -> GlobalForwardingRulesList
 globalForwardingRulesList pGfrlProject_ =
-    GlobalForwardingRulesList
+    GlobalForwardingRulesList'
     { _gfrlProject = pGfrlProject_
     , _gfrlFilter = Nothing
     , _gfrlPageToken = Nothing
     , _gfrlMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 gfrlProject :: Lens' GlobalForwardingRulesList Text
 gfrlProject
   = lens _gfrlProject (\ s a -> s{_gfrlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 gfrlFilter :: Lens' GlobalForwardingRulesList (Maybe Text)
 gfrlFilter
   = lens _gfrlFilter (\ s a -> s{_gfrlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 gfrlPageToken :: Lens' GlobalForwardingRulesList (Maybe Text)
 gfrlPageToken
   = lens _gfrlPageToken
       (\ s a -> s{_gfrlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 gfrlMaxResults :: Lens' GlobalForwardingRulesList Word32
 gfrlMaxResults
   = lens _gfrlMaxResults
@@ -130,7 +142,11 @@
          where
         type Rs GlobalForwardingRulesList =
              ForwardingRuleList
-        requestClient GlobalForwardingRulesList{..}
+        type Scopes GlobalForwardingRulesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalForwardingRulesList'{..}
           = go _gfrlProject _gfrlFilter _gfrlPageToken
               (Just _gfrlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/SetTarget.hs b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/SetTarget.hs
--- a/gen/Network/Google/Resource/Compute/GlobalForwardingRules/SetTarget.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalForwardingRules/SetTarget.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalForwardingRules.SetTarget
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Changes target url for forwarding rule.
+-- Changes target URL for forwarding rule. The new target should be of the
+-- same type as the old target.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalForwardingRules.setTarget@.
 module Network.Google.Resource.Compute.GlobalForwardingRules.SetTarget
@@ -56,10 +57,11 @@
                        ReqBody '[JSON] TargetReference :>
                          Post '[JSON] Operation
 
--- | Changes target url for forwarding rule.
+-- | Changes target URL for forwarding rule. The new target should be of the
+-- same type as the old target.
 --
 -- /See:/ 'globalForwardingRulesSetTarget' smart constructor.
-data GlobalForwardingRulesSetTarget = GlobalForwardingRulesSetTarget
+data GlobalForwardingRulesSetTarget = GlobalForwardingRulesSetTarget'
     { _gfrstProject        :: !Text
     , _gfrstForwardingRule :: !Text
     , _gfrstPayload        :: !TargetReference
@@ -80,13 +82,13 @@
     -> TargetReference -- ^ 'gfrstPayload'
     -> GlobalForwardingRulesSetTarget
 globalForwardingRulesSetTarget pGfrstProject_ pGfrstForwardingRule_ pGfrstPayload_ =
-    GlobalForwardingRulesSetTarget
+    GlobalForwardingRulesSetTarget'
     { _gfrstProject = pGfrstProject_
     , _gfrstForwardingRule = pGfrstForwardingRule_
     , _gfrstPayload = pGfrstPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 gfrstProject :: Lens' GlobalForwardingRulesSetTarget Text
 gfrstProject
   = lens _gfrstProject (\ s a -> s{_gfrstProject = a})
@@ -105,7 +107,10 @@
 instance GoogleRequest GlobalForwardingRulesSetTarget
          where
         type Rs GlobalForwardingRulesSetTarget = Operation
-        requestClient GlobalForwardingRulesSetTarget{..}
+        type Scopes GlobalForwardingRulesSetTarget =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient GlobalForwardingRulesSetTarget'{..}
           = go _gfrstProject _gfrstForwardingRule
               (Just AltJSON)
               _gfrstPayload
diff --git a/gen/Network/Google/Resource/Compute/GlobalOperations/AggregatedList.hs b/gen/Network/Google/Resource/Compute/GlobalOperations/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/GlobalOperations/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalOperations/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalOperations.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of all operations grouped by scope.
+-- Retrieves an aggregated list of all operations.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalOperations.aggregatedList@.
 module Network.Google.Resource.Compute.GlobalOperations.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] OperationAggregatedList
 
--- | Retrieves the list of all operations grouped by scope.
+-- | Retrieves an aggregated list of all operations.
 --
 -- /See:/ 'globalOperationsAggregatedList' smart constructor.
-data GlobalOperationsAggregatedList = GlobalOperationsAggregatedList
+data GlobalOperationsAggregatedList = GlobalOperationsAggregatedList'
     { _goalProject    :: !Text
     , _goalFilter     :: !(Maybe Text)
     , _goalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'goalProject'
     -> GlobalOperationsAggregatedList
 globalOperationsAggregatedList pGoalProject_ =
-    GlobalOperationsAggregatedList
+    GlobalOperationsAggregatedList'
     { _goalProject = pGoalProject_
     , _goalFilter = Nothing
     , _goalPageToken = Nothing
@@ -95,29 +95,41 @@
   = lens _goalProject (\ s a -> s{_goalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 goalFilter :: Lens' GlobalOperationsAggregatedList (Maybe Text)
 goalFilter
   = lens _goalFilter (\ s a -> s{_goalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 goalPageToken :: Lens' GlobalOperationsAggregatedList (Maybe Text)
 goalPageToken
   = lens _goalPageToken
       (\ s a -> s{_goalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 goalMaxResults :: Lens' GlobalOperationsAggregatedList Word32
 goalMaxResults
   = lens _goalMaxResults
@@ -128,7 +140,11 @@
          where
         type Rs GlobalOperationsAggregatedList =
              OperationAggregatedList
-        requestClient GlobalOperationsAggregatedList{..}
+        type Scopes GlobalOperationsAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalOperationsAggregatedList'{..}
           = go _goalProject _goalFilter _goalPageToken
               (Just _goalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/GlobalOperations/Delete.hs b/gen/Network/Google/Resource/Compute/GlobalOperations/Delete.hs
--- a/gen/Network/Google/Resource/Compute/GlobalOperations/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalOperations/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalOperations.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified Operations resource.
 --
 -- /See:/ 'globalOperationsDelete' smart constructor.
-data GlobalOperationsDelete = GlobalOperationsDelete
+data GlobalOperationsDelete = GlobalOperationsDelete'
     { _godProject   :: !Text
     , _godOperation :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'godOperation'
     -> GlobalOperationsDelete
 globalOperationsDelete pGodProject_ pGodOperation_ =
-    GlobalOperationsDelete
+    GlobalOperationsDelete'
     { _godProject = pGodProject_
     , _godOperation = pGodOperation_
     }
@@ -89,7 +89,10 @@
 
 instance GoogleRequest GlobalOperationsDelete where
         type Rs GlobalOperationsDelete = ()
-        requestClient GlobalOperationsDelete{..}
+        type Scopes GlobalOperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient GlobalOperationsDelete'{..}
           = go _godProject _godOperation (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalOperations/Get.hs b/gen/Network/Google/Resource/Compute/GlobalOperations/Get.hs
--- a/gen/Network/Google/Resource/Compute/GlobalOperations/Get.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalOperations/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalOperations.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the specified Operations resource.
+-- Retrieves the specified Operations resource. Get a list of operations by
+-- making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalOperations.get@.
 module Network.Google.Resource.Compute.GlobalOperations.Get
@@ -52,10 +53,11 @@
                  Capture "operation" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Operation
 
--- | Retrieves the specified Operations resource.
+-- | Retrieves the specified Operations resource. Get a list of operations by
+-- making a list() request.
 --
 -- /See:/ 'globalOperationsGet' smart constructor.
-data GlobalOperationsGet = GlobalOperationsGet
+data GlobalOperationsGet = GlobalOperationsGet'
     { _gogProject   :: !Text
     , _gogOperation :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +74,7 @@
     -> Text -- ^ 'gogOperation'
     -> GlobalOperationsGet
 globalOperationsGet pGogProject_ pGogOperation_ =
-    GlobalOperationsGet
+    GlobalOperationsGet'
     { _gogProject = pGogProject_
     , _gogOperation = pGogOperation_
     }
@@ -89,7 +91,11 @@
 
 instance GoogleRequest GlobalOperationsGet where
         type Rs GlobalOperationsGet = Operation
-        requestClient GlobalOperationsGet{..}
+        type Scopes GlobalOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalOperationsGet'{..}
           = go _gogProject _gogOperation (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/GlobalOperations/List.hs b/gen/Network/Google/Resource/Compute/GlobalOperations/List.hs
--- a/gen/Network/Google/Resource/Compute/GlobalOperations/List.hs
+++ b/gen/Network/Google/Resource/Compute/GlobalOperations/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.GlobalOperations.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of Operation resources contained within the specified
+-- Retrieves a list of Operation resources contained within the specified
 -- project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.globalOperations.list@.
@@ -57,11 +57,11 @@
                      QueryParam "maxResults" (Textual Word32) :>
                        QueryParam "alt" AltJSON :> Get '[JSON] OperationList
 
--- | Retrieves the list of Operation resources contained within the specified
+-- | Retrieves a list of Operation resources contained within the specified
 -- project.
 --
 -- /See:/ 'globalOperationsList' smart constructor.
-data GlobalOperationsList = GlobalOperationsList
+data GlobalOperationsList = GlobalOperationsList'
     { _golProject    :: !Text
     , _golFilter     :: !(Maybe Text)
     , _golPageToken  :: !(Maybe Text)
@@ -83,7 +83,7 @@
     :: Text -- ^ 'golProject'
     -> GlobalOperationsList
 globalOperationsList pGolProject_ =
-    GlobalOperationsList
+    GlobalOperationsList'
     { _golProject = pGolProject_
     , _golFilter = Nothing
     , _golPageToken = Nothing
@@ -96,28 +96,40 @@
   = lens _golProject (\ s a -> s{_golProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 golFilter :: Lens' GlobalOperationsList (Maybe Text)
 golFilter
   = lens _golFilter (\ s a -> s{_golFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 golPageToken :: Lens' GlobalOperationsList (Maybe Text)
 golPageToken
   = lens _golPageToken (\ s a -> s{_golPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 golMaxResults :: Lens' GlobalOperationsList Word32
 golMaxResults
   = lens _golMaxResults
@@ -126,7 +138,11 @@
 
 instance GoogleRequest GlobalOperationsList where
         type Rs GlobalOperationsList = OperationList
-        requestClient GlobalOperationsList{..}
+        type Scopes GlobalOperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient GlobalOperationsList'{..}
           = go _golProject _golFilter _golPageToken
               (Just _golMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Delete.hs b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Delete.hs
--- a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPHealthChecks.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified HttpHealthCheck resource.
 --
 -- /See:/ 'hTTPHealthChecksDelete' smart constructor.
-data HTTPHealthChecksDelete = HTTPHealthChecksDelete
+data HTTPHealthChecksDelete = HTTPHealthChecksDelete'
     { _httphcdProject         :: !Text
     , _httphcdHTTPHealthCheck :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'httphcdHTTPHealthCheck'
     -> HTTPHealthChecksDelete
 hTTPHealthChecksDelete pHttphcdProject_ pHttphcdHTTPHealthCheck_ =
-    HTTPHealthChecksDelete
+    HTTPHealthChecksDelete'
     { _httphcdProject = pHttphcdProject_
     , _httphcdHTTPHealthCheck = pHttphcdHTTPHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 httphcdProject :: Lens' HTTPHealthChecksDelete Text
 httphcdProject
   = lens _httphcdProject
@@ -91,7 +91,10 @@
 
 instance GoogleRequest HTTPHealthChecksDelete where
         type Rs HTTPHealthChecksDelete = Operation
-        requestClient HTTPHealthChecksDelete{..}
+        type Scopes HTTPHealthChecksDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPHealthChecksDelete'{..}
           = go _httphcdProject _httphcdHTTPHealthCheck
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Get.hs b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Get.hs
--- a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Get.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPHealthChecks.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified HttpHealthCheck resource.
+-- Returns the specified HttpHealthCheck resource. Get a list of available
+-- HTTP health checks by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.httpHealthChecks.get@.
 module Network.Google.Resource.Compute.HTTPHealthChecks.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] HTTPHealthCheck
 
--- | Returns the specified HttpHealthCheck resource.
+-- | Returns the specified HttpHealthCheck resource. Get a list of available
+-- HTTP health checks by making a list() request.
 --
 -- /See:/ 'hTTPHealthChecksGet' smart constructor.
-data HTTPHealthChecksGet = HTTPHealthChecksGet
+data HTTPHealthChecksGet = HTTPHealthChecksGet'
     { _httphcgProject         :: !Text
     , _httphcgHTTPHealthCheck :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'httphcgHTTPHealthCheck'
     -> HTTPHealthChecksGet
 hTTPHealthChecksGet pHttphcgProject_ pHttphcgHTTPHealthCheck_ =
-    HTTPHealthChecksGet
+    HTTPHealthChecksGet'
     { _httphcgProject = pHttphcgProject_
     , _httphcgHTTPHealthCheck = pHttphcgHTTPHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 httphcgProject :: Lens' HTTPHealthChecksGet Text
 httphcgProject
   = lens _httphcgProject
@@ -92,7 +94,11 @@
 
 instance GoogleRequest HTTPHealthChecksGet where
         type Rs HTTPHealthChecksGet = HTTPHealthCheck
-        requestClient HTTPHealthChecksGet{..}
+        type Scopes HTTPHealthChecksGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient HTTPHealthChecksGet'{..}
           = go _httphcgProject _httphcgHTTPHealthCheck
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Insert.hs b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Insert.hs
--- a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPHealthChecks.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- data included in the request.
 --
 -- /See:/ 'hTTPHealthChecksInsert' smart constructor.
-data HTTPHealthChecksInsert = HTTPHealthChecksInsert
+data HTTPHealthChecksInsert = HTTPHealthChecksInsert'
     { _httphciProject :: !Text
     , _httphciPayload :: !HTTPHealthCheck
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +75,12 @@
     -> HTTPHealthCheck -- ^ 'httphciPayload'
     -> HTTPHealthChecksInsert
 hTTPHealthChecksInsert pHttphciProject_ pHttphciPayload_ =
-    HTTPHealthChecksInsert
+    HTTPHealthChecksInsert'
     { _httphciProject = pHttphciProject_
     , _httphciPayload = pHttphciPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 httphciProject :: Lens' HTTPHealthChecksInsert Text
 httphciProject
   = lens _httphciProject
@@ -94,7 +94,10 @@
 
 instance GoogleRequest HTTPHealthChecksInsert where
         type Rs HTTPHealthChecksInsert = Operation
-        requestClient HTTPHealthChecksInsert{..}
+        type Scopes HTTPHealthChecksInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPHealthChecksInsert'{..}
           = go _httphciProject (Just AltJSON) _httphciPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/List.hs b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/List.hs
--- a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/List.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPHealthChecks.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project.
 --
 -- /See:/ 'hTTPHealthChecksList' smart constructor.
-data HTTPHealthChecksList = HTTPHealthChecksList
+data HTTPHealthChecksList = HTTPHealthChecksList'
     { _httphclProject    :: !Text
     , _httphclFilter     :: !(Maybe Text)
     , _httphclPageToken  :: !(Maybe Text)
@@ -84,44 +84,56 @@
     :: Text -- ^ 'httphclProject'
     -> HTTPHealthChecksList
 hTTPHealthChecksList pHttphclProject_ =
-    HTTPHealthChecksList
+    HTTPHealthChecksList'
     { _httphclProject = pHttphclProject_
     , _httphclFilter = Nothing
     , _httphclPageToken = Nothing
     , _httphclMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 httphclProject :: Lens' HTTPHealthChecksList Text
 httphclProject
   = lens _httphclProject
       (\ s a -> s{_httphclProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 httphclFilter :: Lens' HTTPHealthChecksList (Maybe Text)
 httphclFilter
   = lens _httphclFilter
       (\ s a -> s{_httphclFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 httphclPageToken :: Lens' HTTPHealthChecksList (Maybe Text)
 httphclPageToken
   = lens _httphclPageToken
       (\ s a -> s{_httphclPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 httphclMaxResults :: Lens' HTTPHealthChecksList Word32
 httphclMaxResults
   = lens _httphclMaxResults
@@ -130,7 +142,11 @@
 
 instance GoogleRequest HTTPHealthChecksList where
         type Rs HTTPHealthChecksList = HTTPHealthCheckList
-        requestClient HTTPHealthChecksList{..}
+        type Scopes HTTPHealthChecksList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient HTTPHealthChecksList'{..}
           = go _httphclProject _httphclFilter _httphclPageToken
               (Just _httphclMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Patch.hs b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Patch.hs
--- a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Patch.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Patch.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPHealthChecks.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- data included in the request. This method supports patch semantics.
 --
 -- /See:/ 'hTTPHealthChecksPatch' smart constructor.
-data HTTPHealthChecksPatch = HTTPHealthChecksPatch
+data HTTPHealthChecksPatch = HTTPHealthChecksPatch'
     { _httphcpProject         :: !Text
     , _httphcpPayload         :: !HTTPHealthCheck
     , _httphcpHTTPHealthCheck :: !Text
@@ -81,13 +81,13 @@
     -> Text -- ^ 'httphcpHTTPHealthCheck'
     -> HTTPHealthChecksPatch
 hTTPHealthChecksPatch pHttphcpProject_ pHttphcpPayload_ pHttphcpHTTPHealthCheck_ =
-    HTTPHealthChecksPatch
+    HTTPHealthChecksPatch'
     { _httphcpProject = pHttphcpProject_
     , _httphcpPayload = pHttphcpPayload_
     , _httphcpHTTPHealthCheck = pHttphcpHTTPHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 httphcpProject :: Lens' HTTPHealthChecksPatch Text
 httphcpProject
   = lens _httphcpProject
@@ -107,7 +107,10 @@
 
 instance GoogleRequest HTTPHealthChecksPatch where
         type Rs HTTPHealthChecksPatch = Operation
-        requestClient HTTPHealthChecksPatch{..}
+        type Scopes HTTPHealthChecksPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPHealthChecksPatch'{..}
           = go _httphcpProject _httphcpHTTPHealthCheck
               (Just AltJSON)
               _httphcpPayload
diff --git a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Update.hs b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Update.hs
--- a/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Update.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPHealthChecks/Update.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPHealthChecks.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- data included in the request.
 --
 -- /See:/ 'hTTPHealthChecksUpdate' smart constructor.
-data HTTPHealthChecksUpdate = HTTPHealthChecksUpdate
+data HTTPHealthChecksUpdate = HTTPHealthChecksUpdate'
     { _httphcuProject         :: !Text
     , _httphcuPayload         :: !HTTPHealthCheck
     , _httphcuHTTPHealthCheck :: !Text
@@ -81,13 +81,13 @@
     -> Text -- ^ 'httphcuHTTPHealthCheck'
     -> HTTPHealthChecksUpdate
 hTTPHealthChecksUpdate pHttphcuProject_ pHttphcuPayload_ pHttphcuHTTPHealthCheck_ =
-    HTTPHealthChecksUpdate
+    HTTPHealthChecksUpdate'
     { _httphcuProject = pHttphcuProject_
     , _httphcuPayload = pHttphcuPayload_
     , _httphcuHTTPHealthCheck = pHttphcuHTTPHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 httphcuProject :: Lens' HTTPHealthChecksUpdate Text
 httphcuProject
   = lens _httphcuProject
@@ -107,7 +107,10 @@
 
 instance GoogleRequest HTTPHealthChecksUpdate where
         type Rs HTTPHealthChecksUpdate = Operation
-        requestClient HTTPHealthChecksUpdate{..}
+        type Scopes HTTPHealthChecksUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPHealthChecksUpdate'{..}
           = go _httphcuProject _httphcuHTTPHealthCheck
               (Just AltJSON)
               _httphcuPayload
diff --git a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Delete.hs b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Delete.hs
--- a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPSHealthChecks.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified HttpsHealthCheck resource.
 --
 -- /See:/ 'httpsHealthChecksDelete' smart constructor.
-data HTTPSHealthChecksDelete = HTTPSHealthChecksDelete
+data HTTPSHealthChecksDelete = HTTPSHealthChecksDelete'
     { _hhcdProject          :: !Text
     , _hhcdHTTPSHealthCheck :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'hhcdHTTPSHealthCheck'
     -> HTTPSHealthChecksDelete
 httpsHealthChecksDelete pHhcdProject_ pHhcdHTTPSHealthCheck_ =
-    HTTPSHealthChecksDelete
+    HTTPSHealthChecksDelete'
     { _hhcdProject = pHhcdProject_
     , _hhcdHTTPSHealthCheck = pHhcdHTTPSHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 hhcdProject :: Lens' HTTPSHealthChecksDelete Text
 hhcdProject
   = lens _hhcdProject (\ s a -> s{_hhcdProject = a})
@@ -90,7 +90,10 @@
 
 instance GoogleRequest HTTPSHealthChecksDelete where
         type Rs HTTPSHealthChecksDelete = Operation
-        requestClient HTTPSHealthChecksDelete{..}
+        type Scopes HTTPSHealthChecksDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPSHealthChecksDelete'{..}
           = go _hhcdProject _hhcdHTTPSHealthCheck
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Get.hs b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Get.hs
--- a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Get.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPSHealthChecks.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified HttpsHealthCheck resource.
+-- Returns the specified HttpsHealthCheck resource. Get a list of available
+-- HTTPS health checks by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.httpsHealthChecks.get@.
 module Network.Google.Resource.Compute.HTTPSHealthChecks.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] HTTPSHealthCheck
 
--- | Returns the specified HttpsHealthCheck resource.
+-- | Returns the specified HttpsHealthCheck resource. Get a list of available
+-- HTTPS health checks by making a list() request.
 --
 -- /See:/ 'httpsHealthChecksGet' smart constructor.
-data HTTPSHealthChecksGet = HTTPSHealthChecksGet
+data HTTPSHealthChecksGet = HTTPSHealthChecksGet'
     { _hhcgProject          :: !Text
     , _hhcgHTTPSHealthCheck :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'hhcgHTTPSHealthCheck'
     -> HTTPSHealthChecksGet
 httpsHealthChecksGet pHhcgProject_ pHhcgHTTPSHealthCheck_ =
-    HTTPSHealthChecksGet
+    HTTPSHealthChecksGet'
     { _hhcgProject = pHhcgProject_
     , _hhcgHTTPSHealthCheck = pHhcgHTTPSHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 hhcgProject :: Lens' HTTPSHealthChecksGet Text
 hhcgProject
   = lens _hhcgProject (\ s a -> s{_hhcgProject = a})
@@ -91,7 +93,11 @@
 
 instance GoogleRequest HTTPSHealthChecksGet where
         type Rs HTTPSHealthChecksGet = HTTPSHealthCheck
-        requestClient HTTPSHealthChecksGet{..}
+        type Scopes HTTPSHealthChecksGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient HTTPSHealthChecksGet'{..}
           = go _hhcgProject _hhcgHTTPSHealthCheck
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Insert.hs b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Insert.hs
--- a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPSHealthChecks.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- data included in the request.
 --
 -- /See:/ 'httpsHealthChecksInsert' smart constructor.
-data HTTPSHealthChecksInsert = HTTPSHealthChecksInsert
+data HTTPSHealthChecksInsert = HTTPSHealthChecksInsert'
     { _hhciProject :: !Text
     , _hhciPayload :: !HTTPSHealthCheck
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +75,12 @@
     -> HTTPSHealthCheck -- ^ 'hhciPayload'
     -> HTTPSHealthChecksInsert
 httpsHealthChecksInsert pHhciProject_ pHhciPayload_ =
-    HTTPSHealthChecksInsert
+    HTTPSHealthChecksInsert'
     { _hhciProject = pHhciProject_
     , _hhciPayload = pHhciPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 hhciProject :: Lens' HTTPSHealthChecksInsert Text
 hhciProject
   = lens _hhciProject (\ s a -> s{_hhciProject = a})
@@ -92,7 +92,10 @@
 
 instance GoogleRequest HTTPSHealthChecksInsert where
         type Rs HTTPSHealthChecksInsert = Operation
-        requestClient HTTPSHealthChecksInsert{..}
+        type Scopes HTTPSHealthChecksInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPSHealthChecksInsert'{..}
           = go _hhciProject (Just AltJSON) _hhciPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/List.hs b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/List.hs
--- a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/List.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPSHealthChecks.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project.
 --
 -- /See:/ 'httpsHealthChecksList' smart constructor.
-data HTTPSHealthChecksList = HTTPSHealthChecksList
+data HTTPSHealthChecksList = HTTPSHealthChecksList'
     { _hhclProject    :: !Text
     , _hhclFilter     :: !(Maybe Text)
     , _hhclPageToken  :: !(Maybe Text)
@@ -84,42 +84,54 @@
     :: Text -- ^ 'hhclProject'
     -> HTTPSHealthChecksList
 httpsHealthChecksList pHhclProject_ =
-    HTTPSHealthChecksList
+    HTTPSHealthChecksList'
     { _hhclProject = pHhclProject_
     , _hhclFilter = Nothing
     , _hhclPageToken = Nothing
     , _hhclMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 hhclProject :: Lens' HTTPSHealthChecksList Text
 hhclProject
   = lens _hhclProject (\ s a -> s{_hhclProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 hhclFilter :: Lens' HTTPSHealthChecksList (Maybe Text)
 hhclFilter
   = lens _hhclFilter (\ s a -> s{_hhclFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 hhclPageToken :: Lens' HTTPSHealthChecksList (Maybe Text)
 hhclPageToken
   = lens _hhclPageToken
       (\ s a -> s{_hhclPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 hhclMaxResults :: Lens' HTTPSHealthChecksList Word32
 hhclMaxResults
   = lens _hhclMaxResults
@@ -128,7 +140,11 @@
 
 instance GoogleRequest HTTPSHealthChecksList where
         type Rs HTTPSHealthChecksList = HTTPSHealthCheckList
-        requestClient HTTPSHealthChecksList{..}
+        type Scopes HTTPSHealthChecksList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient HTTPSHealthChecksList'{..}
           = go _hhclProject _hhclFilter _hhclPageToken
               (Just _hhclMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Patch.hs b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Patch.hs
--- a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Patch.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Patch.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPSHealthChecks.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- data included in the request. This method supports patch semantics.
 --
 -- /See:/ 'httpsHealthChecksPatch' smart constructor.
-data HTTPSHealthChecksPatch = HTTPSHealthChecksPatch
+data HTTPSHealthChecksPatch = HTTPSHealthChecksPatch'
     { _hhcpProject          :: !Text
     , _hhcpPayload          :: !HTTPSHealthCheck
     , _hhcpHTTPSHealthCheck :: !Text
@@ -81,13 +81,13 @@
     -> Text -- ^ 'hhcpHTTPSHealthCheck'
     -> HTTPSHealthChecksPatch
 httpsHealthChecksPatch pHhcpProject_ pHhcpPayload_ pHhcpHTTPSHealthCheck_ =
-    HTTPSHealthChecksPatch
+    HTTPSHealthChecksPatch'
     { _hhcpProject = pHhcpProject_
     , _hhcpPayload = pHhcpPayload_
     , _hhcpHTTPSHealthCheck = pHhcpHTTPSHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 hhcpProject :: Lens' HTTPSHealthChecksPatch Text
 hhcpProject
   = lens _hhcpProject (\ s a -> s{_hhcpProject = a})
@@ -105,7 +105,10 @@
 
 instance GoogleRequest HTTPSHealthChecksPatch where
         type Rs HTTPSHealthChecksPatch = Operation
-        requestClient HTTPSHealthChecksPatch{..}
+        type Scopes HTTPSHealthChecksPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPSHealthChecksPatch'{..}
           = go _hhcpProject _hhcpHTTPSHealthCheck
               (Just AltJSON)
               _hhcpPayload
diff --git a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Update.hs b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Update.hs
--- a/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Update.hs
+++ b/gen/Network/Google/Resource/Compute/HTTPSHealthChecks/Update.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.HTTPSHealthChecks.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- data included in the request.
 --
 -- /See:/ 'httpsHealthChecksUpdate' smart constructor.
-data HTTPSHealthChecksUpdate = HTTPSHealthChecksUpdate
+data HTTPSHealthChecksUpdate = HTTPSHealthChecksUpdate'
     { _hhcuProject          :: !Text
     , _hhcuPayload          :: !HTTPSHealthCheck
     , _hhcuHTTPSHealthCheck :: !Text
@@ -81,13 +81,13 @@
     -> Text -- ^ 'hhcuHTTPSHealthCheck'
     -> HTTPSHealthChecksUpdate
 httpsHealthChecksUpdate pHhcuProject_ pHhcuPayload_ pHhcuHTTPSHealthCheck_ =
-    HTTPSHealthChecksUpdate
+    HTTPSHealthChecksUpdate'
     { _hhcuProject = pHhcuProject_
     , _hhcuPayload = pHhcuPayload_
     , _hhcuHTTPSHealthCheck = pHhcuHTTPSHealthCheck_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 hhcuProject :: Lens' HTTPSHealthChecksUpdate Text
 hhcuProject
   = lens _hhcuProject (\ s a -> s{_hhcuProject = a})
@@ -105,7 +105,10 @@
 
 instance GoogleRequest HTTPSHealthChecksUpdate where
         type Rs HTTPSHealthChecksUpdate = Operation
-        requestClient HTTPSHealthChecksUpdate{..}
+        type Scopes HTTPSHealthChecksUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient HTTPSHealthChecksUpdate'{..}
           = go _hhcuProject _hhcuHTTPSHealthCheck
               (Just AltJSON)
               _hhcuPayload
diff --git a/gen/Network/Google/Resource/Compute/Images/Delete.hs b/gen/Network/Google/Resource/Compute/Images/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Images/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Images/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Images.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified image resource.
+-- Deletes the specified image.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.images.delete@.
 module Network.Google.Resource.Compute.Images.Delete
@@ -52,10 +52,10 @@
                  Capture "image" Text :>
                    QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified image resource.
+-- | Deletes the specified image.
 --
 -- /See:/ 'imagesDelete' smart constructor.
-data ImagesDelete = ImagesDelete
+data ImagesDelete = ImagesDelete'
     { _imaImage   :: !Text
     , _imaProject :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'imaProject'
     -> ImagesDelete
 imagesDelete pImaImage_ pImaProject_ =
-    ImagesDelete
+    ImagesDelete'
     { _imaImage = pImaImage_
     , _imaProject = pImaProject_
     }
@@ -88,7 +88,10 @@
 
 instance GoogleRequest ImagesDelete where
         type Rs ImagesDelete = Operation
-        requestClient ImagesDelete{..}
+        type Scopes ImagesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ImagesDelete'{..}
           = go _imaProject _imaImage (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Images/Deprecate.hs b/gen/Network/Google/Resource/Compute/Images/Deprecate.hs
--- a/gen/Network/Google/Resource/Compute/Images/Deprecate.hs
+++ b/gen/Network/Google/Resource/Compute/Images/Deprecate.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Images.Deprecate
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- given, clears the deprecation status instead.
 --
 -- /See:/ 'imagesDeprecate' smart constructor.
-data ImagesDeprecate = ImagesDeprecate
+data ImagesDeprecate = ImagesDeprecate'
     { _imamImage   :: !Text
     , _imamProject :: !Text
     , _imamPayload :: !DeprecationStatus
@@ -82,7 +82,7 @@
     -> DeprecationStatus -- ^ 'imamPayload'
     -> ImagesDeprecate
 imagesDeprecate pImamImage_ pImamProject_ pImamPayload_ =
-    ImagesDeprecate
+    ImagesDeprecate'
     { _imamImage = pImamImage_
     , _imamProject = pImamProject_
     , _imamPayload = pImamPayload_
@@ -105,7 +105,10 @@
 
 instance GoogleRequest ImagesDeprecate where
         type Rs ImagesDeprecate = Operation
-        requestClient ImagesDeprecate{..}
+        type Scopes ImagesDeprecate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ImagesDeprecate'{..}
           = go _imamProject _imamImage (Just AltJSON)
               _imamPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Images/Get.hs b/gen/Network/Google/Resource/Compute/Images/Get.hs
--- a/gen/Network/Google/Resource/Compute/Images/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Images/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Images.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified image resource.
+-- Returns the specified image. Get a list of available images by making a
+-- list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.images.get@.
 module Network.Google.Resource.Compute.Images.Get
@@ -52,10 +53,11 @@
                  Capture "image" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Image
 
--- | Returns the specified image resource.
+-- | Returns the specified image. Get a list of available images by making a
+-- list() request.
 --
 -- /See:/ 'imagesGet' smart constructor.
-data ImagesGet = ImagesGet
+data ImagesGet = ImagesGet'
     { _iImage   :: !Text
     , _iProject :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +74,7 @@
     -> Text -- ^ 'iProject'
     -> ImagesGet
 imagesGet pIImage_ pIProject_ =
-    ImagesGet
+    ImagesGet'
     { _iImage = pIImage_
     , _iProject = pIProject_
     }
@@ -87,7 +89,11 @@
 
 instance GoogleRequest ImagesGet where
         type Rs ImagesGet = Image
-        requestClient ImagesGet{..}
+        type Scopes ImagesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ImagesGet'{..}
           = go _iProject _iImage (Just AltJSON) computeService
           where go
                   = buildClient (Proxy :: Proxy ImagesGetResource)
diff --git a/gen/Network/Google/Resource/Compute/Images/GetFromFamily.hs b/gen/Network/Google/Resource/Compute/Images/GetFromFamily.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Images/GetFromFamily.hs
@@ -0,0 +1,105 @@
+{-# 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.Compute.Images.GetFromFamily
+-- 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 the latest image that is part of an image family and is not
+-- deprecated.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.images.getFromFamily@.
+module Network.Google.Resource.Compute.Images.GetFromFamily
+    (
+    -- * REST Resource
+      ImagesGetFromFamilyResource
+
+    -- * Creating a Request
+    , imagesGetFromFamily
+    , ImagesGetFromFamily
+
+    -- * Request Lenses
+    , igffProject
+    , igffFamily
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.images.getFromFamily@ method which the
+-- 'ImagesGetFromFamily' request conforms to.
+type ImagesGetFromFamilyResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "global" :>
+               "images" :>
+                 "family" :>
+                   Capture "family" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Image
+
+-- | Returns the latest image that is part of an image family and is not
+-- deprecated.
+--
+-- /See:/ 'imagesGetFromFamily' smart constructor.
+data ImagesGetFromFamily = ImagesGetFromFamily'
+    { _igffProject :: !Text
+    , _igffFamily  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImagesGetFromFamily' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igffProject'
+--
+-- * 'igffFamily'
+imagesGetFromFamily
+    :: Text -- ^ 'igffProject'
+    -> Text -- ^ 'igffFamily'
+    -> ImagesGetFromFamily
+imagesGetFromFamily pIgffProject_ pIgffFamily_ =
+    ImagesGetFromFamily'
+    { _igffProject = pIgffProject_
+    , _igffFamily = pIgffFamily_
+    }
+
+-- | Project ID for this request.
+igffProject :: Lens' ImagesGetFromFamily Text
+igffProject
+  = lens _igffProject (\ s a -> s{_igffProject = a})
+
+-- | Name of the image resource to return.
+igffFamily :: Lens' ImagesGetFromFamily Text
+igffFamily
+  = lens _igffFamily (\ s a -> s{_igffFamily = a})
+
+instance GoogleRequest ImagesGetFromFamily where
+        type Rs ImagesGetFromFamily = Image
+        type Scopes ImagesGetFromFamily =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ImagesGetFromFamily'{..}
+          = go _igffProject _igffFamily (Just AltJSON)
+              computeService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ImagesGetFromFamilyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Images/Insert.hs b/gen/Network/Google/Resource/Compute/Images/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Images/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Images/Insert.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Images.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates an image resource in the specified project using the data
--- included in the request.
+-- Creates an image in the specified project using the data included in the
+-- request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.images.insert@.
 module Network.Google.Resource.Compute.Images.Insert
@@ -53,11 +53,11 @@
                  QueryParam "alt" AltJSON :>
                    ReqBody '[JSON] Image :> Post '[JSON] Operation
 
--- | Creates an image resource in the specified project using the data
--- included in the request.
+-- | Creates an image in the specified project using the data included in the
+-- request.
 --
 -- /See:/ 'imagesInsert' smart constructor.
-data ImagesInsert = ImagesInsert
+data ImagesInsert = ImagesInsert'
     { _iiProject :: !Text
     , _iiPayload :: !Image
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,7 +74,7 @@
     -> Image -- ^ 'iiPayload'
     -> ImagesInsert
 imagesInsert pIiProject_ pIiPayload_ =
-    ImagesInsert
+    ImagesInsert'
     { _iiProject = pIiProject_
     , _iiPayload = pIiPayload_
     }
@@ -91,7 +91,13 @@
 
 instance GoogleRequest ImagesInsert where
         type Rs ImagesInsert = Operation
-        requestClient ImagesInsert{..}
+        type Scopes ImagesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/devstorage.full_control",
+               "https://www.googleapis.com/auth/devstorage.read_only",
+               "https://www.googleapis.com/auth/devstorage.read_write"]
+        requestClient ImagesInsert'{..}
           = go _iiProject (Just AltJSON) _iiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Images/List.hs b/gen/Network/Google/Resource/Compute/Images/List.hs
--- a/gen/Network/Google/Resource/Compute/Images/List.hs
+++ b/gen/Network/Google/Resource/Compute/Images/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Images.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -71,7 +71,7 @@
 -- Accessing images for more information.
 --
 -- /See:/ 'imagesList' smart constructor.
-data ImagesList = ImagesList
+data ImagesList = ImagesList'
     { _illProject    :: !Text
     , _illFilter     :: !(Maybe Text)
     , _illPageToken  :: !(Maybe Text)
@@ -93,7 +93,7 @@
     :: Text -- ^ 'illProject'
     -> ImagesList
 imagesList pIllProject_ =
-    ImagesList
+    ImagesList'
     { _illProject = pIllProject_
     , _illFilter = Nothing
     , _illPageToken = Nothing
@@ -106,28 +106,40 @@
   = lens _illProject (\ s a -> s{_illProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 illFilter :: Lens' ImagesList (Maybe Text)
 illFilter
   = lens _illFilter (\ s a -> s{_illFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 illPageToken :: Lens' ImagesList (Maybe Text)
 illPageToken
   = lens _illPageToken (\ s a -> s{_illPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 illMaxResults :: Lens' ImagesList Word32
 illMaxResults
   = lens _illMaxResults
@@ -136,7 +148,11 @@
 
 instance GoogleRequest ImagesList where
         type Rs ImagesList = ImageList
-        requestClient ImagesList{..}
+        type Scopes ImagesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ImagesList'{..}
           = go _illProject _illFilter _illPageToken
               (Just _illMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AbandonInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AbandonInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AbandonInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AbandonInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.AbandonInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -78,7 +78,7 @@
 -- with the listmanagedinstances method.
 --
 -- /See:/ 'instanceGroupManagersAbandonInstances' smart constructor.
-data InstanceGroupManagersAbandonInstances = InstanceGroupManagersAbandonInstances
+data InstanceGroupManagersAbandonInstances = InstanceGroupManagersAbandonInstances'
     { _igmaiProject              :: !Text
     , _igmaiInstanceGroupManager :: !Text
     , _igmaiZone                 :: !Text
@@ -103,14 +103,14 @@
     -> InstanceGroupManagersAbandonInstancesRequest -- ^ 'igmaiPayload'
     -> InstanceGroupManagersAbandonInstances
 instanceGroupManagersAbandonInstances pIgmaiProject_ pIgmaiInstanceGroupManager_ pIgmaiZone_ pIgmaiPayload_ =
-    InstanceGroupManagersAbandonInstances
+    InstanceGroupManagersAbandonInstances'
     { _igmaiProject = pIgmaiProject_
     , _igmaiInstanceGroupManager = pIgmaiInstanceGroupManager_
     , _igmaiZone = pIgmaiZone_
     , _igmaiPayload = pIgmaiPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmaiProject :: Lens' InstanceGroupManagersAbandonInstances Text
 igmaiProject
   = lens _igmaiProject (\ s a -> s{_igmaiProject = a})
@@ -135,8 +135,11 @@
          InstanceGroupManagersAbandonInstances where
         type Rs InstanceGroupManagersAbandonInstances =
              Operation
+        type Scopes InstanceGroupManagersAbandonInstances =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
         requestClient
-          InstanceGroupManagersAbandonInstances{..}
+          InstanceGroupManagersAbandonInstances'{..}
           = go _igmaiProject _igmaiZone
               _igmaiInstanceGroupManager
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AggregatedList.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/AggregatedList.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- | Retrieves the list of managed instance groups and groups them by zone.
 --
 -- /See:/ 'instanceGroupManagersAggregatedList' smart constructor.
-data InstanceGroupManagersAggregatedList = InstanceGroupManagersAggregatedList
+data InstanceGroupManagersAggregatedList = InstanceGroupManagersAggregatedList'
     { _igmalProject    :: !Text
     , _igmalFilter     :: !(Maybe Text)
     , _igmalPageToken  :: !(Maybe Text)
@@ -82,42 +82,54 @@
     :: Text -- ^ 'igmalProject'
     -> InstanceGroupManagersAggregatedList
 instanceGroupManagersAggregatedList pIgmalProject_ =
-    InstanceGroupManagersAggregatedList
+    InstanceGroupManagersAggregatedList'
     { _igmalProject = pIgmalProject_
     , _igmalFilter = Nothing
     , _igmalPageToken = Nothing
     , _igmalMaxResults = 500
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmalProject :: Lens' InstanceGroupManagersAggregatedList Text
 igmalProject
   = lens _igmalProject (\ s a -> s{_igmalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 igmalFilter :: Lens' InstanceGroupManagersAggregatedList (Maybe Text)
 igmalFilter
   = lens _igmalFilter (\ s a -> s{_igmalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 igmalPageToken :: Lens' InstanceGroupManagersAggregatedList (Maybe Text)
 igmalPageToken
   = lens _igmalPageToken
       (\ s a -> s{_igmalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 igmalMaxResults :: Lens' InstanceGroupManagersAggregatedList Word32
 igmalMaxResults
   = lens _igmalMaxResults
@@ -128,7 +140,12 @@
          InstanceGroupManagersAggregatedList where
         type Rs InstanceGroupManagersAggregatedList =
              InstanceGroupManagerAggregatedList
-        requestClient InstanceGroupManagersAggregatedList{..}
+        type Scopes InstanceGroupManagersAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient
+          InstanceGroupManagersAggregatedList'{..}
           = go _igmalProject _igmalFilter _igmalPageToken
               (Just _igmalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Delete.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Delete.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Delete.hs
@@ -14,14 +14,15 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified managed instance group and all of the instances in
--- that group.
+-- that group. Note that the instance group must not belong to a backend
+-- service. Read Deleting an instance group for more information.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceGroupManagers.delete@.
 module Network.Google.Resource.Compute.InstanceGroupManagers.Delete
@@ -56,10 +57,11 @@
                      QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
 -- | Deletes the specified managed instance group and all of the instances in
--- that group.
+-- that group. Note that the instance group must not belong to a backend
+-- service. Read Deleting an instance group for more information.
 --
 -- /See:/ 'instanceGroupManagersDelete' smart constructor.
-data InstanceGroupManagersDelete = InstanceGroupManagersDelete
+data InstanceGroupManagersDelete = InstanceGroupManagersDelete'
     { _igmdProject              :: !Text
     , _igmdInstanceGroupManager :: !Text
     , _igmdZone                 :: !Text
@@ -80,13 +82,13 @@
     -> Text -- ^ 'igmdZone'
     -> InstanceGroupManagersDelete
 instanceGroupManagersDelete pIgmdProject_ pIgmdInstanceGroupManager_ pIgmdZone_ =
-    InstanceGroupManagersDelete
+    InstanceGroupManagersDelete'
     { _igmdProject = pIgmdProject_
     , _igmdInstanceGroupManager = pIgmdInstanceGroupManager_
     , _igmdZone = pIgmdZone_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmdProject :: Lens' InstanceGroupManagersDelete Text
 igmdProject
   = lens _igmdProject (\ s a -> s{_igmdProject = a})
@@ -104,7 +106,10 @@
 instance GoogleRequest InstanceGroupManagersDelete
          where
         type Rs InstanceGroupManagersDelete = Operation
-        requestClient InstanceGroupManagersDelete{..}
+        type Scopes InstanceGroupManagersDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupManagersDelete'{..}
           = go _igmdProject _igmdZone _igmdInstanceGroupManager
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/DeleteInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/DeleteInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/DeleteInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/DeleteInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.DeleteInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -74,7 +74,7 @@
 -- status of the deleting action with the listmanagedinstances method.
 --
 -- /See:/ 'instanceGroupManagersDeleteInstances' smart constructor.
-data InstanceGroupManagersDeleteInstances = InstanceGroupManagersDeleteInstances
+data InstanceGroupManagersDeleteInstances = InstanceGroupManagersDeleteInstances'
     { _igmdiProject              :: !Text
     , _igmdiInstanceGroupManager :: !Text
     , _igmdiZone                 :: !Text
@@ -99,14 +99,14 @@
     -> InstanceGroupManagersDeleteInstancesRequest -- ^ 'igmdiPayload'
     -> InstanceGroupManagersDeleteInstances
 instanceGroupManagersDeleteInstances pIgmdiProject_ pIgmdiInstanceGroupManager_ pIgmdiZone_ pIgmdiPayload_ =
-    InstanceGroupManagersDeleteInstances
+    InstanceGroupManagersDeleteInstances'
     { _igmdiProject = pIgmdiProject_
     , _igmdiInstanceGroupManager = pIgmdiInstanceGroupManager_
     , _igmdiZone = pIgmdiZone_
     , _igmdiPayload = pIgmdiPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmdiProject :: Lens' InstanceGroupManagersDeleteInstances Text
 igmdiProject
   = lens _igmdiProject (\ s a -> s{_igmdiProject = a})
@@ -131,8 +131,11 @@
          InstanceGroupManagersDeleteInstances where
         type Rs InstanceGroupManagersDeleteInstances =
              Operation
+        type Scopes InstanceGroupManagersDeleteInstances =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
         requestClient
-          InstanceGroupManagersDeleteInstances{..}
+          InstanceGroupManagersDeleteInstances'{..}
           = go _igmdiProject _igmdiZone
               _igmdiInstanceGroupManager
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Get.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Get.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Get.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Get.hs
@@ -14,13 +14,15 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 all of the details about the specified managed instance group.
+-- Get a list of available managed instance groups by making a list()
+-- request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceGroupManagers.get@.
 module Network.Google.Resource.Compute.InstanceGroupManagers.Get
@@ -56,9 +58,11 @@
                        Get '[JSON] InstanceGroupManager
 
 -- | Returns all of the details about the specified managed instance group.
+-- Get a list of available managed instance groups by making a list()
+-- request.
 --
 -- /See:/ 'instanceGroupManagersGet' smart constructor.
-data InstanceGroupManagersGet = InstanceGroupManagersGet
+data InstanceGroupManagersGet = InstanceGroupManagersGet'
     { _igmgProject              :: !Text
     , _igmgInstanceGroupManager :: !Text
     , _igmgZone                 :: !Text
@@ -79,13 +83,13 @@
     -> Text -- ^ 'igmgZone'
     -> InstanceGroupManagersGet
 instanceGroupManagersGet pIgmgProject_ pIgmgInstanceGroupManager_ pIgmgZone_ =
-    InstanceGroupManagersGet
+    InstanceGroupManagersGet'
     { _igmgProject = pIgmgProject_
     , _igmgInstanceGroupManager = pIgmgInstanceGroupManager_
     , _igmgZone = pIgmgZone_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmgProject :: Lens' InstanceGroupManagersGet Text
 igmgProject
   = lens _igmgProject (\ s a -> s{_igmgProject = a})
@@ -103,7 +107,11 @@
 instance GoogleRequest InstanceGroupManagersGet where
         type Rs InstanceGroupManagersGet =
              InstanceGroupManager
-        requestClient InstanceGroupManagersGet{..}
+        type Scopes InstanceGroupManagersGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceGroupManagersGet'{..}
           = go _igmgProject _igmgZone _igmgInstanceGroupManager
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Insert.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Insert.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -70,7 +70,7 @@
 -- listmanagedinstances method.
 --
 -- /See:/ 'instanceGroupManagersInsert' smart constructor.
-data InstanceGroupManagersInsert = InstanceGroupManagersInsert
+data InstanceGroupManagersInsert = InstanceGroupManagersInsert'
     { _igmiProject :: !Text
     , _igmiZone    :: !Text
     , _igmiPayload :: !InstanceGroupManager
@@ -91,13 +91,13 @@
     -> InstanceGroupManager -- ^ 'igmiPayload'
     -> InstanceGroupManagersInsert
 instanceGroupManagersInsert pIgmiProject_ pIgmiZone_ pIgmiPayload_ =
-    InstanceGroupManagersInsert
+    InstanceGroupManagersInsert'
     { _igmiProject = pIgmiProject_
     , _igmiZone = pIgmiZone_
     , _igmiPayload = pIgmiPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmiProject :: Lens' InstanceGroupManagersInsert Text
 igmiProject
   = lens _igmiProject (\ s a -> s{_igmiProject = a})
@@ -115,7 +115,10 @@
 instance GoogleRequest InstanceGroupManagersInsert
          where
         type Rs InstanceGroupManagersInsert = Operation
-        requestClient InstanceGroupManagersInsert{..}
+        type Scopes InstanceGroupManagersInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupManagersInsert'{..}
           = go _igmiProject _igmiZone (Just AltJSON)
               _igmiPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/List.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/List.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/List.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -64,7 +64,7 @@
 -- the specified project and zone.
 --
 -- /See:/ 'instanceGroupManagersList' smart constructor.
-data InstanceGroupManagersList = InstanceGroupManagersList
+data InstanceGroupManagersList = InstanceGroupManagersList'
     { _igmlProject    :: !Text
     , _igmlZone       :: !Text
     , _igmlFilter     :: !(Maybe Text)
@@ -90,7 +90,7 @@
     -> Text -- ^ 'igmlZone'
     -> InstanceGroupManagersList
 instanceGroupManagersList pIgmlProject_ pIgmlZone_ =
-    InstanceGroupManagersList
+    InstanceGroupManagersList'
     { _igmlProject = pIgmlProject_
     , _igmlZone = pIgmlZone_
     , _igmlFilter = Nothing
@@ -98,7 +98,7 @@
     , _igmlMaxResults = 500
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmlProject :: Lens' InstanceGroupManagersList Text
 igmlProject
   = lens _igmlProject (\ s a -> s{_igmlProject = a})
@@ -108,29 +108,41 @@
 igmlZone = lens _igmlZone (\ s a -> s{_igmlZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 igmlFilter :: Lens' InstanceGroupManagersList (Maybe Text)
 igmlFilter
   = lens _igmlFilter (\ s a -> s{_igmlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 igmlPageToken :: Lens' InstanceGroupManagersList (Maybe Text)
 igmlPageToken
   = lens _igmlPageToken
       (\ s a -> s{_igmlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 igmlMaxResults :: Lens' InstanceGroupManagersList Word32
 igmlMaxResults
   = lens _igmlMaxResults
@@ -141,7 +153,11 @@
          where
         type Rs InstanceGroupManagersList =
              InstanceGroupManagerList
-        requestClient InstanceGroupManagersList{..}
+        type Scopes InstanceGroupManagersList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceGroupManagersList'{..}
           = go _igmlProject _igmlZone _igmlFilter
               _igmlPageToken
               (Just _igmlMaxResults)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/ListManagedInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/ListManagedInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/ListManagedInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/ListManagedInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.ListManagedInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -71,7 +71,7 @@
 -- failed action.
 --
 -- /See:/ 'instanceGroupManagersListManagedInstances' smart constructor.
-data InstanceGroupManagersListManagedInstances = InstanceGroupManagersListManagedInstances
+data InstanceGroupManagersListManagedInstances = InstanceGroupManagersListManagedInstances'
     { _igmlmiProject              :: !Text
     , _igmlmiInstanceGroupManager :: !Text
     , _igmlmiZone                 :: !Text
@@ -92,13 +92,13 @@
     -> Text -- ^ 'igmlmiZone'
     -> InstanceGroupManagersListManagedInstances
 instanceGroupManagersListManagedInstances pIgmlmiProject_ pIgmlmiInstanceGroupManager_ pIgmlmiZone_ =
-    InstanceGroupManagersListManagedInstances
+    InstanceGroupManagersListManagedInstances'
     { _igmlmiProject = pIgmlmiProject_
     , _igmlmiInstanceGroupManager = pIgmlmiInstanceGroupManager_
     , _igmlmiZone = pIgmlmiZone_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmlmiProject :: Lens' InstanceGroupManagersListManagedInstances Text
 igmlmiProject
   = lens _igmlmiProject
@@ -119,8 +119,13 @@
          InstanceGroupManagersListManagedInstances where
         type Rs InstanceGroupManagersListManagedInstances =
              InstanceGroupManagersListManagedInstancesResponse
+        type Scopes InstanceGroupManagersListManagedInstances
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
         requestClient
-          InstanceGroupManagersListManagedInstances{..}
+          InstanceGroupManagersListManagedInstances'{..}
           = go _igmlmiProject _igmlmiZone
               _igmlmiInstanceGroupManager
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/RecreateInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/RecreateInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/RecreateInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/RecreateInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.RecreateInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -72,7 +72,7 @@
 -- status of the recreating action with the listmanagedinstances method.
 --
 -- /See:/ 'instanceGroupManagersRecreateInstances' smart constructor.
-data InstanceGroupManagersRecreateInstances = InstanceGroupManagersRecreateInstances
+data InstanceGroupManagersRecreateInstances = InstanceGroupManagersRecreateInstances'
     { _igmriProject              :: !Text
     , _igmriInstanceGroupManager :: !Text
     , _igmriZone                 :: !Text
@@ -97,14 +97,14 @@
     -> InstanceGroupManagersRecreateInstancesRequest -- ^ 'igmriPayload'
     -> InstanceGroupManagersRecreateInstances
 instanceGroupManagersRecreateInstances pIgmriProject_ pIgmriInstanceGroupManager_ pIgmriZone_ pIgmriPayload_ =
-    InstanceGroupManagersRecreateInstances
+    InstanceGroupManagersRecreateInstances'
     { _igmriProject = pIgmriProject_
     , _igmriInstanceGroupManager = pIgmriInstanceGroupManager_
     , _igmriZone = pIgmriZone_
     , _igmriPayload = pIgmriPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmriProject :: Lens' InstanceGroupManagersRecreateInstances Text
 igmriProject
   = lens _igmriProject (\ s a -> s{_igmriProject = a})
@@ -129,8 +129,11 @@
          InstanceGroupManagersRecreateInstances where
         type Rs InstanceGroupManagersRecreateInstances =
              Operation
+        type Scopes InstanceGroupManagersRecreateInstances =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
         requestClient
-          InstanceGroupManagersRecreateInstances{..}
+          InstanceGroupManagersRecreateInstances'{..}
           = go _igmriProject _igmriZone
               _igmriInstanceGroupManager
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Resize.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Resize.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Resize.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/Resize.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.Resize
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -72,7 +72,7 @@
 -- method.
 --
 -- /See:/ 'instanceGroupManagersResize' smart constructor.
-data InstanceGroupManagersResize = InstanceGroupManagersResize
+data InstanceGroupManagersResize = InstanceGroupManagersResize'
     { _igmrProject              :: !Text
     , _igmrSize                 :: !(Textual Int32)
     , _igmrInstanceGroupManager :: !Text
@@ -97,14 +97,14 @@
     -> Text -- ^ 'igmrZone'
     -> InstanceGroupManagersResize
 instanceGroupManagersResize pIgmrProject_ pIgmrSize_ pIgmrInstanceGroupManager_ pIgmrZone_ =
-    InstanceGroupManagersResize
+    InstanceGroupManagersResize'
     { _igmrProject = pIgmrProject_
     , _igmrSize = _Coerce # pIgmrSize_
     , _igmrInstanceGroupManager = pIgmrInstanceGroupManager_
     , _igmrZone = pIgmrZone_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmrProject :: Lens' InstanceGroupManagersResize Text
 igmrProject
   = lens _igmrProject (\ s a -> s{_igmrProject = a})
@@ -131,7 +131,10 @@
 instance GoogleRequest InstanceGroupManagersResize
          where
         type Rs InstanceGroupManagersResize = Operation
-        requestClient InstanceGroupManagersResize{..}
+        type Scopes InstanceGroupManagersResize =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupManagersResize'{..}
           = go _igmrProject _igmrZone _igmrInstanceGroupManager
               (Just _igmrSize)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetInstanceTemplate.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetInstanceTemplate.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetInstanceTemplate.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetInstanceTemplate.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.SetInstanceTemplate
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -67,7 +67,7 @@
 -- change unless you recreate them.
 --
 -- /See:/ 'instanceGroupManagersSetInstanceTemplate' smart constructor.
-data InstanceGroupManagersSetInstanceTemplate = InstanceGroupManagersSetInstanceTemplate
+data InstanceGroupManagersSetInstanceTemplate = InstanceGroupManagersSetInstanceTemplate'
     { _igmsitProject              :: !Text
     , _igmsitInstanceGroupManager :: !Text
     , _igmsitZone                 :: !Text
@@ -92,14 +92,14 @@
     -> InstanceGroupManagersSetInstanceTemplateRequest -- ^ 'igmsitPayload'
     -> InstanceGroupManagersSetInstanceTemplate
 instanceGroupManagersSetInstanceTemplate pIgmsitProject_ pIgmsitInstanceGroupManager_ pIgmsitZone_ pIgmsitPayload_ =
-    InstanceGroupManagersSetInstanceTemplate
+    InstanceGroupManagersSetInstanceTemplate'
     { _igmsitProject = pIgmsitProject_
     , _igmsitInstanceGroupManager = pIgmsitInstanceGroupManager_
     , _igmsitZone = pIgmsitZone_
     , _igmsitPayload = pIgmsitPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmsitProject :: Lens' InstanceGroupManagersSetInstanceTemplate Text
 igmsitProject
   = lens _igmsitProject
@@ -126,8 +126,12 @@
          InstanceGroupManagersSetInstanceTemplate where
         type Rs InstanceGroupManagersSetInstanceTemplate =
              Operation
+        type Scopes InstanceGroupManagersSetInstanceTemplate
+             =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
         requestClient
-          InstanceGroupManagersSetInstanceTemplate{..}
+          InstanceGroupManagersSetInstanceTemplate'{..}
           = go _igmsitProject _igmsitZone
               _igmsitInstanceGroupManager
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetTargetPools.hs b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetTargetPools.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetTargetPools.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroupManagers/SetTargetPools.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroupManagers.SetTargetPools
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -72,7 +72,7 @@
 -- all of the instances in the group depending on the size of the group.
 --
 -- /See:/ 'instanceGroupManagersSetTargetPools' smart constructor.
-data InstanceGroupManagersSetTargetPools = InstanceGroupManagersSetTargetPools
+data InstanceGroupManagersSetTargetPools = InstanceGroupManagersSetTargetPools'
     { _igmstpProject              :: !Text
     , _igmstpInstanceGroupManager :: !Text
     , _igmstpZone                 :: !Text
@@ -97,14 +97,14 @@
     -> InstanceGroupManagersSetTargetPoolsRequest -- ^ 'igmstpPayload'
     -> InstanceGroupManagersSetTargetPools
 instanceGroupManagersSetTargetPools pIgmstpProject_ pIgmstpInstanceGroupManager_ pIgmstpZone_ pIgmstpPayload_ =
-    InstanceGroupManagersSetTargetPools
+    InstanceGroupManagersSetTargetPools'
     { _igmstpProject = pIgmstpProject_
     , _igmstpInstanceGroupManager = pIgmstpInstanceGroupManager_
     , _igmstpZone = pIgmstpZone_
     , _igmstpPayload = pIgmstpPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igmstpProject :: Lens' InstanceGroupManagersSetTargetPools Text
 igmstpProject
   = lens _igmstpProject
@@ -131,7 +131,11 @@
          InstanceGroupManagersSetTargetPools where
         type Rs InstanceGroupManagersSetTargetPools =
              Operation
-        requestClient InstanceGroupManagersSetTargetPools{..}
+        type Scopes InstanceGroupManagersSetTargetPools =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient
+          InstanceGroupManagersSetTargetPools'{..}
           = go _igmstpProject _igmstpZone
               _igmstpInstanceGroupManager
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/AddInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/AddInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/AddInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/AddInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.AddInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,7 +22,7 @@
 --
 -- Adds a list of instances to the specified instance group. All of the
 -- instances in the instance group must be in the same network\/subnetwork.
--- TODO: Change to comment to state \"if IG is load balanced.\"
+-- Read Adding instances for more information.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceGroups.addInstances@.
 module Network.Google.Resource.Compute.InstanceGroups.AddInstances
@@ -62,10 +62,10 @@
 
 -- | Adds a list of instances to the specified instance group. All of the
 -- instances in the instance group must be in the same network\/subnetwork.
--- TODO: Change to comment to state \"if IG is load balanced.\"
+-- Read Adding instances for more information.
 --
 -- /See:/ 'instanceGroupsAddInstances' smart constructor.
-data InstanceGroupsAddInstances = InstanceGroupsAddInstances
+data InstanceGroupsAddInstances = InstanceGroupsAddInstances'
     { _igaiProject       :: !Text
     , _igaiZone          :: !Text
     , _igaiPayload       :: !InstanceGroupsAddInstancesRequest
@@ -90,14 +90,14 @@
     -> Text -- ^ 'igaiInstanceGroup'
     -> InstanceGroupsAddInstances
 instanceGroupsAddInstances pIgaiProject_ pIgaiZone_ pIgaiPayload_ pIgaiInstanceGroup_ =
-    InstanceGroupsAddInstances
+    InstanceGroupsAddInstances'
     { _igaiProject = pIgaiProject_
     , _igaiZone = pIgaiZone_
     , _igaiPayload = pIgaiPayload_
     , _igaiInstanceGroup = pIgaiInstanceGroup_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igaiProject :: Lens' InstanceGroupsAddInstances Text
 igaiProject
   = lens _igaiProject (\ s a -> s{_igaiProject = a})
@@ -120,7 +120,10 @@
 instance GoogleRequest InstanceGroupsAddInstances
          where
         type Rs InstanceGroupsAddInstances = Operation
-        requestClient InstanceGroupsAddInstances{..}
+        type Scopes InstanceGroupsAddInstances =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupsAddInstances'{..}
           = go _igaiProject _igaiZone _igaiInstanceGroup
               (Just AltJSON)
               _igaiPayload
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/AggregatedList.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/AggregatedList.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- | Retrieves the list of instance groups and sorts them by zone.
 --
 -- /See:/ 'instanceGroupsAggregatedList' smart constructor.
-data InstanceGroupsAggregatedList = InstanceGroupsAggregatedList
+data InstanceGroupsAggregatedList = InstanceGroupsAggregatedList'
     { _igalProject    :: !Text
     , _igalFilter     :: !(Maybe Text)
     , _igalPageToken  :: !(Maybe Text)
@@ -82,42 +82,54 @@
     :: Text -- ^ 'igalProject'
     -> InstanceGroupsAggregatedList
 instanceGroupsAggregatedList pIgalProject_ =
-    InstanceGroupsAggregatedList
+    InstanceGroupsAggregatedList'
     { _igalProject = pIgalProject_
     , _igalFilter = Nothing
     , _igalPageToken = Nothing
     , _igalMaxResults = 500
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igalProject :: Lens' InstanceGroupsAggregatedList Text
 igalProject
   = lens _igalProject (\ s a -> s{_igalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 igalFilter :: Lens' InstanceGroupsAggregatedList (Maybe Text)
 igalFilter
   = lens _igalFilter (\ s a -> s{_igalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 igalPageToken :: Lens' InstanceGroupsAggregatedList (Maybe Text)
 igalPageToken
   = lens _igalPageToken
       (\ s a -> s{_igalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 igalMaxResults :: Lens' InstanceGroupsAggregatedList Word32
 igalMaxResults
   = lens _igalMaxResults
@@ -128,7 +140,11 @@
          where
         type Rs InstanceGroupsAggregatedList =
              InstanceGroupAggregatedList
-        requestClient InstanceGroupsAggregatedList{..}
+        type Scopes InstanceGroupsAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceGroupsAggregatedList'{..}
           = go _igalProject _igalFilter _igalPageToken
               (Just _igalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/Delete.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/Delete.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/Delete.hs
@@ -14,14 +14,15 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified instance group. The instances in the group are not
--- deleted.
+-- deleted. Note that instance group must not belong to a backend service.
+-- Read Deleting an instance group for more information.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceGroups.delete@.
 module Network.Google.Resource.Compute.InstanceGroups.Delete
@@ -56,10 +57,11 @@
                      QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
 -- | Deletes the specified instance group. The instances in the group are not
--- deleted.
+-- deleted. Note that instance group must not belong to a backend service.
+-- Read Deleting an instance group for more information.
 --
 -- /See:/ 'instanceGroupsDelete' smart constructor.
-data InstanceGroupsDelete = InstanceGroupsDelete
+data InstanceGroupsDelete = InstanceGroupsDelete'
     { _igdProject       :: !Text
     , _igdZone          :: !Text
     , _igdInstanceGroup :: !Text
@@ -80,13 +82,13 @@
     -> Text -- ^ 'igdInstanceGroup'
     -> InstanceGroupsDelete
 instanceGroupsDelete pIgdProject_ pIgdZone_ pIgdInstanceGroup_ =
-    InstanceGroupsDelete
+    InstanceGroupsDelete'
     { _igdProject = pIgdProject_
     , _igdZone = pIgdZone_
     , _igdInstanceGroup = pIgdInstanceGroup_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igdProject :: Lens' InstanceGroupsDelete Text
 igdProject
   = lens _igdProject (\ s a -> s{_igdProject = a})
@@ -103,7 +105,10 @@
 
 instance GoogleRequest InstanceGroupsDelete where
         type Rs InstanceGroupsDelete = Operation
-        requestClient InstanceGroupsDelete{..}
+        type Scopes InstanceGroupsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupsDelete'{..}
           = go _igdProject _igdZone _igdInstanceGroup
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/Get.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/Get.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/Get.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified instance group resource.
+-- Returns the specified instance group. Get a list of available instance
+-- groups by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceGroups.get@.
 module Network.Google.Resource.Compute.InstanceGroups.Get
@@ -54,10 +55,11 @@
                    Capture "instanceGroup" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] InstanceGroup
 
--- | Returns the specified instance group resource.
+-- | Returns the specified instance group. Get a list of available instance
+-- groups by making a list() request.
 --
 -- /See:/ 'instanceGroupsGet' smart constructor.
-data InstanceGroupsGet = InstanceGroupsGet
+data InstanceGroupsGet = InstanceGroupsGet'
     { _iggProject       :: !Text
     , _iggZone          :: !Text
     , _iggInstanceGroup :: !Text
@@ -78,13 +80,13 @@
     -> Text -- ^ 'iggInstanceGroup'
     -> InstanceGroupsGet
 instanceGroupsGet pIggProject_ pIggZone_ pIggInstanceGroup_ =
-    InstanceGroupsGet
+    InstanceGroupsGet'
     { _iggProject = pIggProject_
     , _iggZone = pIggZone_
     , _iggInstanceGroup = pIggInstanceGroup_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 iggProject :: Lens' InstanceGroupsGet Text
 iggProject
   = lens _iggProject (\ s a -> s{_iggProject = a})
@@ -101,7 +103,11 @@
 
 instance GoogleRequest InstanceGroupsGet where
         type Rs InstanceGroupsGet = InstanceGroup
-        requestClient InstanceGroupsGet{..}
+        type Scopes InstanceGroupsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceGroupsGet'{..}
           = go _iggProject _iggZone _iggInstanceGroup
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/Insert.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/Insert.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- that are included in the request.
 --
 -- /See:/ 'instanceGroupsInsert' smart constructor.
-data InstanceGroupsInsert = InstanceGroupsInsert
+data InstanceGroupsInsert = InstanceGroupsInsert'
     { _igiProject :: !Text
     , _igiZone    :: !Text
     , _igiPayload :: !InstanceGroup
@@ -81,13 +81,13 @@
     -> InstanceGroup -- ^ 'igiPayload'
     -> InstanceGroupsInsert
 instanceGroupsInsert pIgiProject_ pIgiZone_ pIgiPayload_ =
-    InstanceGroupsInsert
+    InstanceGroupsInsert'
     { _igiProject = pIgiProject_
     , _igiZone = pIgiZone_
     , _igiPayload = pIgiPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igiProject :: Lens' InstanceGroupsInsert Text
 igiProject
   = lens _igiProject (\ s a -> s{_igiProject = a})
@@ -103,7 +103,10 @@
 
 instance GoogleRequest InstanceGroupsInsert where
         type Rs InstanceGroupsInsert = Operation
-        requestClient InstanceGroupsInsert{..}
+        type Scopes InstanceGroupsInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupsInsert'{..}
           = go _igiProject _igiZone (Just AltJSON) _igiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/List.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/List.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/List.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -64,7 +64,7 @@
 -- project and zone.
 --
 -- /See:/ 'instanceGroupsList' smart constructor.
-data InstanceGroupsList = InstanceGroupsList
+data InstanceGroupsList = InstanceGroupsList'
     { _iglProject    :: !Text
     , _iglZone       :: !Text
     , _iglFilter     :: !(Maybe Text)
@@ -90,7 +90,7 @@
     -> Text -- ^ 'iglZone'
     -> InstanceGroupsList
 instanceGroupsList pIglProject_ pIglZone_ =
-    InstanceGroupsList
+    InstanceGroupsList'
     { _iglProject = pIglProject_
     , _iglZone = pIglZone_
     , _iglFilter = Nothing
@@ -98,7 +98,7 @@
     , _iglMaxResults = 500
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 iglProject :: Lens' InstanceGroupsList Text
 iglProject
   = lens _iglProject (\ s a -> s{_iglProject = a})
@@ -108,28 +108,40 @@
 iglZone = lens _iglZone (\ s a -> s{_iglZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 iglFilter :: Lens' InstanceGroupsList (Maybe Text)
 iglFilter
   = lens _iglFilter (\ s a -> s{_iglFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 iglPageToken :: Lens' InstanceGroupsList (Maybe Text)
 iglPageToken
   = lens _iglPageToken (\ s a -> s{_iglPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 iglMaxResults :: Lens' InstanceGroupsList Word32
 iglMaxResults
   = lens _iglMaxResults
@@ -138,7 +150,11 @@
 
 instance GoogleRequest InstanceGroupsList where
         type Rs InstanceGroupsList = InstanceGroupList
-        requestClient InstanceGroupsList{..}
+        type Scopes InstanceGroupsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceGroupsList'{..}
           = go _iglProject _iglZone _iglFilter _iglPageToken
               (Just _iglMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/ListInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/ListInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/ListInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/ListInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.ListInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -68,7 +68,7 @@
 -- | Lists the instances in the specified instance group.
 --
 -- /See:/ 'instanceGroupsListInstances'' smart constructor.
-data InstanceGroupsListInstances' = InstanceGroupsListInstances'
+data InstanceGroupsListInstances' = InstanceGroupsListInstances''
     { _igliProject       :: !Text
     , _igliZone          :: !Text
     , _igliPayload       :: !InstanceGroupsListInstancesRequest
@@ -102,7 +102,7 @@
     -> Text -- ^ 'igliInstanceGroup'
     -> InstanceGroupsListInstances'
 instanceGroupsListInstances' pIgliProject_ pIgliZone_ pIgliPayload_ pIgliInstanceGroup_ =
-    InstanceGroupsListInstances'
+    InstanceGroupsListInstances''
     { _igliProject = pIgliProject_
     , _igliZone = pIgliZone_
     , _igliPayload = pIgliPayload_
@@ -112,7 +112,7 @@
     , _igliMaxResults = 500
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igliProject :: Lens' InstanceGroupsListInstances' Text
 igliProject
   = lens _igliProject (\ s a -> s{_igliProject = a})
@@ -127,23 +127,32 @@
   = lens _igliPayload (\ s a -> s{_igliPayload = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 igliFilter :: Lens' InstanceGroupsListInstances' (Maybe Text)
 igliFilter
   = lens _igliFilter (\ s a -> s{_igliFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 igliPageToken :: Lens' InstanceGroupsListInstances' (Maybe Text)
 igliPageToken
   = lens _igliPageToken
@@ -156,7 +165,10 @@
   = lens _igliInstanceGroup
       (\ s a -> s{_igliInstanceGroup = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 igliMaxResults :: Lens' InstanceGroupsListInstances' Word32
 igliMaxResults
   = lens _igliMaxResults
@@ -167,7 +179,11 @@
          where
         type Rs InstanceGroupsListInstances' =
              InstanceGroupsListInstances
-        requestClient InstanceGroupsListInstances'{..}
+        type Scopes InstanceGroupsListInstances' =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceGroupsListInstances''{..}
           = go _igliProject _igliZone _igliInstanceGroup
               _igliFilter
               _igliPageToken
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/RemoveInstances.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/RemoveInstances.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/RemoveInstances.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/RemoveInstances.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.RemoveInstances
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -63,7 +63,7 @@
 -- does not delete those instances.
 --
 -- /See:/ 'instanceGroupsRemoveInstances' smart constructor.
-data InstanceGroupsRemoveInstances = InstanceGroupsRemoveInstances
+data InstanceGroupsRemoveInstances = InstanceGroupsRemoveInstances'
     { _igriProject       :: !Text
     , _igriZone          :: !Text
     , _igriPayload       :: !InstanceGroupsRemoveInstancesRequest
@@ -88,14 +88,14 @@
     -> Text -- ^ 'igriInstanceGroup'
     -> InstanceGroupsRemoveInstances
 instanceGroupsRemoveInstances pIgriProject_ pIgriZone_ pIgriPayload_ pIgriInstanceGroup_ =
-    InstanceGroupsRemoveInstances
+    InstanceGroupsRemoveInstances'
     { _igriProject = pIgriProject_
     , _igriZone = pIgriZone_
     , _igriPayload = pIgriPayload_
     , _igriInstanceGroup = pIgriInstanceGroup_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igriProject :: Lens' InstanceGroupsRemoveInstances Text
 igriProject
   = lens _igriProject (\ s a -> s{_igriProject = a})
@@ -119,7 +119,10 @@
 instance GoogleRequest InstanceGroupsRemoveInstances
          where
         type Rs InstanceGroupsRemoveInstances = Operation
-        requestClient InstanceGroupsRemoveInstances{..}
+        type Scopes InstanceGroupsRemoveInstances =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupsRemoveInstances'{..}
           = go _igriProject _igriZone _igriInstanceGroup
               (Just AltJSON)
               _igriPayload
diff --git a/gen/Network/Google/Resource/Compute/InstanceGroups/SetNamedPorts.hs b/gen/Network/Google/Resource/Compute/InstanceGroups/SetNamedPorts.hs
--- a/gen/Network/Google/Resource/Compute/InstanceGroups/SetNamedPorts.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceGroups/SetNamedPorts.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceGroups.SetNamedPorts
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- | Sets the named ports for the specified instance group.
 --
 -- /See:/ 'instanceGroupsSetNamedPorts' smart constructor.
-data InstanceGroupsSetNamedPorts = InstanceGroupsSetNamedPorts
+data InstanceGroupsSetNamedPorts = InstanceGroupsSetNamedPorts'
     { _igsnpProject       :: !Text
     , _igsnpZone          :: !Text
     , _igsnpPayload       :: !InstanceGroupsSetNamedPortsRequest
@@ -86,14 +86,14 @@
     -> Text -- ^ 'igsnpInstanceGroup'
     -> InstanceGroupsSetNamedPorts
 instanceGroupsSetNamedPorts pIgsnpProject_ pIgsnpZone_ pIgsnpPayload_ pIgsnpInstanceGroup_ =
-    InstanceGroupsSetNamedPorts
+    InstanceGroupsSetNamedPorts'
     { _igsnpProject = pIgsnpProject_
     , _igsnpZone = pIgsnpZone_
     , _igsnpPayload = pIgsnpPayload_
     , _igsnpInstanceGroup = pIgsnpInstanceGroup_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 igsnpProject :: Lens' InstanceGroupsSetNamedPorts Text
 igsnpProject
   = lens _igsnpProject (\ s a -> s{_igsnpProject = a})
@@ -117,7 +117,10 @@
 instance GoogleRequest InstanceGroupsSetNamedPorts
          where
         type Rs InstanceGroupsSetNamedPorts = Operation
-        requestClient InstanceGroupsSetNamedPorts{..}
+        type Scopes InstanceGroupsSetNamedPorts =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceGroupsSetNamedPorts'{..}
           = go _igsnpProject _igsnpZone _igsnpInstanceGroup
               (Just AltJSON)
               _igsnpPayload
diff --git a/gen/Network/Google/Resource/Compute/InstanceTemplates/Delete.hs b/gen/Network/Google/Resource/Compute/InstanceTemplates/Delete.hs
--- a/gen/Network/Google/Resource/Compute/InstanceTemplates/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceTemplates/Delete.hs
@@ -14,13 +14,17 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceTemplates.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified instance template.
+-- Deletes the specified instance template. If you delete an instance
+-- template that is being referenced from another instance group, the
+-- instance group will not be able to create or recreate virtual machine
+-- instances. Deleting an instance template is permanent and cannot be
+-- undone.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceTemplates.delete@.
 module Network.Google.Resource.Compute.InstanceTemplates.Delete
@@ -52,10 +56,14 @@
                  Capture "instanceTemplate" Text :>
                    QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified instance template.
+-- | Deletes the specified instance template. If you delete an instance
+-- template that is being referenced from another instance group, the
+-- instance group will not be able to create or recreate virtual machine
+-- instances. Deleting an instance template is permanent and cannot be
+-- undone.
 --
 -- /See:/ 'instanceTemplatesDelete' smart constructor.
-data InstanceTemplatesDelete = InstanceTemplatesDelete
+data InstanceTemplatesDelete = InstanceTemplatesDelete'
     { _itdProject          :: !Text
     , _itdInstanceTemplate :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +80,12 @@
     -> Text -- ^ 'itdInstanceTemplate'
     -> InstanceTemplatesDelete
 instanceTemplatesDelete pItdProject_ pItdInstanceTemplate_ =
-    InstanceTemplatesDelete
+    InstanceTemplatesDelete'
     { _itdProject = pItdProject_
     , _itdInstanceTemplate = pItdInstanceTemplate_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 itdProject :: Lens' InstanceTemplatesDelete Text
 itdProject
   = lens _itdProject (\ s a -> s{_itdProject = a})
@@ -90,7 +98,10 @@
 
 instance GoogleRequest InstanceTemplatesDelete where
         type Rs InstanceTemplatesDelete = Operation
-        requestClient InstanceTemplatesDelete{..}
+        type Scopes InstanceTemplatesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceTemplatesDelete'{..}
           = go _itdProject _itdInstanceTemplate (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/InstanceTemplates/Get.hs b/gen/Network/Google/Resource/Compute/InstanceTemplates/Get.hs
--- a/gen/Network/Google/Resource/Compute/InstanceTemplates/Get.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceTemplates/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceTemplates.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified instance template resource.
+-- Returns the specified instance template. Get a list of available
+-- instance templates by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceTemplates.get@.
 module Network.Google.Resource.Compute.InstanceTemplates.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] InstanceTemplate
 
--- | Returns the specified instance template resource.
+-- | Returns the specified instance template. Get a list of available
+-- instance templates by making a list() request.
 --
 -- /See:/ 'instanceTemplatesGet' smart constructor.
-data InstanceTemplatesGet = InstanceTemplatesGet
+data InstanceTemplatesGet = InstanceTemplatesGet'
     { _itgProject          :: !Text
     , _itgInstanceTemplate :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'itgInstanceTemplate'
     -> InstanceTemplatesGet
 instanceTemplatesGet pItgProject_ pItgInstanceTemplate_ =
-    InstanceTemplatesGet
+    InstanceTemplatesGet'
     { _itgProject = pItgProject_
     , _itgInstanceTemplate = pItgInstanceTemplate_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 itgProject :: Lens' InstanceTemplatesGet Text
 itgProject
   = lens _itgProject (\ s a -> s{_itgProject = a})
@@ -91,7 +93,11 @@
 
 instance GoogleRequest InstanceTemplatesGet where
         type Rs InstanceTemplatesGet = InstanceTemplate
-        requestClient InstanceTemplatesGet{..}
+        type Scopes InstanceTemplatesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceTemplatesGet'{..}
           = go _itgProject _itgInstanceTemplate (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/InstanceTemplates/Insert.hs b/gen/Network/Google/Resource/Compute/InstanceTemplates/Insert.hs
--- a/gen/Network/Google/Resource/Compute/InstanceTemplates/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceTemplates/Insert.hs
@@ -14,14 +14,17 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceTemplates.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Creates an instance template in the specified project using the data
--- that is included in the request.
+-- that is included in the request. If you are creating a new template to
+-- update an existing instance group, your new instance template must use
+-- the same network or, if applicable, the same subnetwork as the original
+-- template.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instanceTemplates.insert@.
 module Network.Google.Resource.Compute.InstanceTemplates.Insert
@@ -55,10 +58,13 @@
                      Post '[JSON] Operation
 
 -- | Creates an instance template in the specified project using the data
--- that is included in the request.
+-- that is included in the request. If you are creating a new template to
+-- update an existing instance group, your new instance template must use
+-- the same network or, if applicable, the same subnetwork as the original
+-- template.
 --
 -- /See:/ 'instanceTemplatesInsert' smart constructor.
-data InstanceTemplatesInsert = InstanceTemplatesInsert
+data InstanceTemplatesInsert = InstanceTemplatesInsert'
     { _itiProject :: !Text
     , _itiPayload :: !InstanceTemplate
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +81,12 @@
     -> InstanceTemplate -- ^ 'itiPayload'
     -> InstanceTemplatesInsert
 instanceTemplatesInsert pItiProject_ pItiPayload_ =
-    InstanceTemplatesInsert
+    InstanceTemplatesInsert'
     { _itiProject = pItiProject_
     , _itiPayload = pItiPayload_
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 itiProject :: Lens' InstanceTemplatesInsert Text
 itiProject
   = lens _itiProject (\ s a -> s{_itiProject = a})
@@ -92,7 +98,10 @@
 
 instance GoogleRequest InstanceTemplatesInsert where
         type Rs InstanceTemplatesInsert = Operation
-        requestClient InstanceTemplatesInsert{..}
+        type Scopes InstanceTemplatesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstanceTemplatesInsert'{..}
           = go _itiProject (Just AltJSON) _itiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/InstanceTemplates/List.hs b/gen/Network/Google/Resource/Compute/InstanceTemplates/List.hs
--- a/gen/Network/Google/Resource/Compute/InstanceTemplates/List.hs
+++ b/gen/Network/Google/Resource/Compute/InstanceTemplates/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.InstanceTemplates.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project and zone.
 --
 -- /See:/ 'instanceTemplatesList' smart constructor.
-data InstanceTemplatesList = InstanceTemplatesList
+data InstanceTemplatesList = InstanceTemplatesList'
     { _itlProject    :: !Text
     , _itlFilter     :: !(Maybe Text)
     , _itlPageToken  :: !(Maybe Text)
@@ -84,41 +84,53 @@
     :: Text -- ^ 'itlProject'
     -> InstanceTemplatesList
 instanceTemplatesList pItlProject_ =
-    InstanceTemplatesList
+    InstanceTemplatesList'
     { _itlProject = pItlProject_
     , _itlFilter = Nothing
     , _itlPageToken = Nothing
     , _itlMaxResults = 500
     }
 
--- | The project ID for this request.
+-- | Project ID for this request.
 itlProject :: Lens' InstanceTemplatesList Text
 itlProject
   = lens _itlProject (\ s a -> s{_itlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 itlFilter :: Lens' InstanceTemplatesList (Maybe Text)
 itlFilter
   = lens _itlFilter (\ s a -> s{_itlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 itlPageToken :: Lens' InstanceTemplatesList (Maybe Text)
 itlPageToken
   = lens _itlPageToken (\ s a -> s{_itlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 itlMaxResults :: Lens' InstanceTemplatesList Word32
 itlMaxResults
   = lens _itlMaxResults
@@ -127,7 +139,11 @@
 
 instance GoogleRequest InstanceTemplatesList where
         type Rs InstanceTemplatesList = InstanceTemplateList
-        requestClient InstanceTemplatesList{..}
+        type Scopes InstanceTemplatesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstanceTemplatesList'{..}
           = go _itlProject _itlFilter _itlPageToken
               (Just _itlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Instances/AddAccessConfig.hs b/gen/Network/Google/Resource/Compute/Instances/AddAccessConfig.hs
--- a/gen/Network/Google/Resource/Compute/Instances/AddAccessConfig.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/AddAccessConfig.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.AddAccessConfig
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -63,7 +63,7 @@
 -- | Adds an access config to an instance\'s network interface.
 --
 -- /See:/ 'instancesAddAccessConfig' smart constructor.
-data InstancesAddAccessConfig = InstancesAddAccessConfig
+data InstancesAddAccessConfig = InstancesAddAccessConfig'
     { _iaacProject          :: !Text
     , _iaacNetworkInterface :: !Text
     , _iaacZone             :: !Text
@@ -92,7 +92,7 @@
     -> Text -- ^ 'iaacInstance'
     -> InstancesAddAccessConfig
 instancesAddAccessConfig pIaacProject_ pIaacNetworkInterface_ pIaacZone_ pIaacPayload_ pIaacInstance_ =
-    InstancesAddAccessConfig
+    InstancesAddAccessConfig'
     { _iaacProject = pIaacProject_
     , _iaacNetworkInterface = pIaacNetworkInterface_
     , _iaacZone = pIaacZone_
@@ -127,7 +127,10 @@
 
 instance GoogleRequest InstancesAddAccessConfig where
         type Rs InstancesAddAccessConfig = Operation
-        requestClient InstancesAddAccessConfig{..}
+        type Scopes InstancesAddAccessConfig =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesAddAccessConfig'{..}
           = go _iaacProject _iaacZone _iaacInstance
               (Just _iaacNetworkInterface)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Instances/AggregatedList.hs b/gen/Network/Google/Resource/Compute/Instances/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/Instances/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves aggregated list of instance resources.
+-- Retrieves aggregated list of instances.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.aggregatedList@.
 module Network.Google.Resource.Compute.Instances.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] InstanceAggregatedList
 
--- | Retrieves aggregated list of instance resources.
+-- | Retrieves aggregated list of instances.
 --
 -- /See:/ 'instancesAggregatedList' smart constructor.
-data InstancesAggregatedList = InstancesAggregatedList
+data InstancesAggregatedList = InstancesAggregatedList'
     { _ialProject    :: !Text
     , _ialFilter     :: !(Maybe Text)
     , _ialPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'ialProject'
     -> InstancesAggregatedList
 instancesAggregatedList pIalProject_ =
-    InstancesAggregatedList
+    InstancesAggregatedList'
     { _ialProject = pIalProject_
     , _ialFilter = Nothing
     , _ialPageToken = Nothing
@@ -95,28 +95,40 @@
   = lens _ialProject (\ s a -> s{_ialProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 ialFilter :: Lens' InstancesAggregatedList (Maybe Text)
 ialFilter
   = lens _ialFilter (\ s a -> s{_ialFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 ialPageToken :: Lens' InstancesAggregatedList (Maybe Text)
 ialPageToken
   = lens _ialPageToken (\ s a -> s{_ialPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 ialMaxResults :: Lens' InstancesAggregatedList Word32
 ialMaxResults
   = lens _ialMaxResults
@@ -126,7 +138,11 @@
 instance GoogleRequest InstancesAggregatedList where
         type Rs InstancesAggregatedList =
              InstanceAggregatedList
-        requestClient InstancesAggregatedList{..}
+        type Scopes InstancesAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstancesAggregatedList'{..}
           = go _ialProject _ialFilter _ialPageToken
               (Just _ialMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Instances/AttachDisk.hs b/gen/Network/Google/Resource/Compute/Instances/AttachDisk.hs
--- a/gen/Network/Google/Resource/Compute/Instances/AttachDisk.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/AttachDisk.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.AttachDisk
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- | Attaches a Disk resource to an instance.
 --
 -- /See:/ 'instancesAttachDisk' smart constructor.
-data InstancesAttachDisk = InstancesAttachDisk
+data InstancesAttachDisk = InstancesAttachDisk'
     { _iadProject  :: !Text
     , _iadZone     :: !Text
     , _iadPayload  :: !AttachedDisk
@@ -86,7 +86,7 @@
     -> Text -- ^ 'iadInstance'
     -> InstancesAttachDisk
 instancesAttachDisk pIadProject_ pIadZone_ pIadPayload_ pIadInstance_ =
-    InstancesAttachDisk
+    InstancesAttachDisk'
     { _iadProject = pIadProject_
     , _iadZone = pIadZone_
     , _iadPayload = pIadPayload_
@@ -107,14 +107,17 @@
 iadPayload
   = lens _iadPayload (\ s a -> s{_iadPayload = a})
 
--- | Instance name.
+-- | The instance name for this request.
 iadInstance :: Lens' InstancesAttachDisk Text
 iadInstance
   = lens _iadInstance (\ s a -> s{_iadInstance = a})
 
 instance GoogleRequest InstancesAttachDisk where
         type Rs InstancesAttachDisk = Operation
-        requestClient InstancesAttachDisk{..}
+        type Scopes InstancesAttachDisk =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesAttachDisk'{..}
           = go _iadProject _iadZone _iadInstance (Just AltJSON)
               _iadPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Instances/Delete.hs b/gen/Network/Google/Resource/Compute/Instances/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Instances/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/Delete.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified Instance resource. For more information, see
--- Shutting down an instance.
+-- Stopping or Deleting an Instance.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.delete@.
 module Network.Google.Resource.Compute.Instances.Delete
@@ -56,10 +56,10 @@
                      QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
 -- | Deletes the specified Instance resource. For more information, see
--- Shutting down an instance.
+-- Stopping or Deleting an Instance.
 --
 -- /See:/ 'instancesDelete' smart constructor.
-data InstancesDelete = InstancesDelete
+data InstancesDelete = InstancesDelete'
     { _idProject  :: !Text
     , _idZone     :: !Text
     , _idInstance :: !Text
@@ -80,7 +80,7 @@
     -> Text -- ^ 'idInstance'
     -> InstancesDelete
 instancesDelete pIdProject_ pIdZone_ pIdInstance_ =
-    InstancesDelete
+    InstancesDelete'
     { _idProject = pIdProject_
     , _idZone = pIdZone_
     , _idInstance = pIdInstance_
@@ -102,7 +102,10 @@
 
 instance GoogleRequest InstancesDelete where
         type Rs InstancesDelete = Operation
-        requestClient InstancesDelete{..}
+        type Scopes InstancesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesDelete'{..}
           = go _idProject _idZone _idInstance (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Instances/DeleteAccessConfig.hs b/gen/Network/Google/Resource/Compute/Instances/DeleteAccessConfig.hs
--- a/gen/Network/Google/Resource/Compute/Instances/DeleteAccessConfig.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/DeleteAccessConfig.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.DeleteAccessConfig
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- | Deletes an access config from an instance\'s network interface.
 --
 -- /See:/ 'instancesDeleteAccessConfig' smart constructor.
-data InstancesDeleteAccessConfig = InstancesDeleteAccessConfig
+data InstancesDeleteAccessConfig = InstancesDeleteAccessConfig'
     { _idacProject          :: !Text
     , _idacNetworkInterface :: !Text
     , _idacZone             :: !Text
@@ -91,7 +91,7 @@
     -> Text -- ^ 'idacInstance'
     -> InstancesDeleteAccessConfig
 instancesDeleteAccessConfig pIdacProject_ pIdacNetworkInterface_ pIdacZone_ pIdacAccessConfig_ pIdacInstance_ =
-    InstancesDeleteAccessConfig
+    InstancesDeleteAccessConfig'
     { _idacProject = pIdacProject_
     , _idacNetworkInterface = pIdacNetworkInterface_
     , _idacZone = pIdacZone_
@@ -128,7 +128,10 @@
 instance GoogleRequest InstancesDeleteAccessConfig
          where
         type Rs InstancesDeleteAccessConfig = Operation
-        requestClient InstancesDeleteAccessConfig{..}
+        type Scopes InstancesDeleteAccessConfig =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesDeleteAccessConfig'{..}
           = go _idacProject _idacZone _idacInstance
               (Just _idacAccessConfig)
               (Just _idacNetworkInterface)
diff --git a/gen/Network/Google/Resource/Compute/Instances/DetachDisk.hs b/gen/Network/Google/Resource/Compute/Instances/DetachDisk.hs
--- a/gen/Network/Google/Resource/Compute/Instances/DetachDisk.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/DetachDisk.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.DetachDisk
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- | Detaches a disk from an instance.
 --
 -- /See:/ 'instancesDetachDisk' smart constructor.
-data InstancesDetachDisk = InstancesDetachDisk
+data InstancesDetachDisk = InstancesDetachDisk'
     { _iddProject    :: !Text
     , _iddZone       :: !Text
     , _iddDeviceName :: !Text
@@ -85,7 +85,7 @@
     -> Text -- ^ 'iddInstance'
     -> InstancesDetachDisk
 instancesDetachDisk pIddProject_ pIddZone_ pIddDeviceName_ pIddInstance_ =
-    InstancesDetachDisk
+    InstancesDetachDisk'
     { _iddProject = pIddProject_
     , _iddZone = pIddZone_
     , _iddDeviceName = pIddDeviceName_
@@ -114,7 +114,10 @@
 
 instance GoogleRequest InstancesDetachDisk where
         type Rs InstancesDetachDisk = Operation
-        requestClient InstancesDetachDisk{..}
+        type Scopes InstancesDetachDisk =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesDetachDisk'{..}
           = go _iddProject _iddZone _iddInstance
               (Just _iddDeviceName)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Instances/Get.hs b/gen/Network/Google/Resource/Compute/Instances/Get.hs
--- a/gen/Network/Google/Resource/Compute/Instances/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified instance resource.
+-- Returns the specified Instance resource. Get a list of available
+-- instances by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.get@.
 module Network.Google.Resource.Compute.Instances.Get
@@ -54,10 +55,11 @@
                    Capture "instance" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] Instance
 
--- | Returns the specified instance resource.
+-- | Returns the specified Instance resource. Get a list of available
+-- instances by making a list() request.
 --
 -- /See:/ 'instancesGet' smart constructor.
-data InstancesGet = InstancesGet
+data InstancesGet = InstancesGet'
     { _igProject  :: !Text
     , _igZone     :: !Text
     , _igInstance :: !Text
@@ -78,7 +80,7 @@
     -> Text -- ^ 'igInstance'
     -> InstancesGet
 instancesGet pIgProject_ pIgZone_ pIgInstance_ =
-    InstancesGet
+    InstancesGet'
     { _igProject = pIgProject_
     , _igZone = pIgZone_
     , _igInstance = pIgInstance_
@@ -100,7 +102,11 @@
 
 instance GoogleRequest InstancesGet where
         type Rs InstancesGet = Instance
-        requestClient InstancesGet{..}
+        type Scopes InstancesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstancesGet'{..}
           = go _igProject _igZone _igInstance (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Instances/GetSerialPortOutput.hs b/gen/Network/Google/Resource/Compute/Instances/GetSerialPortOutput.hs
--- a/gen/Network/Google/Resource/Compute/Instances/GetSerialPortOutput.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/GetSerialPortOutput.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.GetSerialPortOutput
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- | Returns the specified instance\'s serial port output.
 --
 -- /See:/ 'instancesGetSerialPortOutput' smart constructor.
-data InstancesGetSerialPortOutput = InstancesGetSerialPortOutput
+data InstancesGetSerialPortOutput = InstancesGetSerialPortOutput'
     { _igspoProject  :: !Text
     , _igspoZone     :: !Text
     , _igspoPort     :: !(Textual Int32)
@@ -85,7 +85,7 @@
     -> Text -- ^ 'igspoInstance'
     -> InstancesGetSerialPortOutput
 instancesGetSerialPortOutput pIgspoProject_ pIgspoZone_ pIgspoInstance_ =
-    InstancesGetSerialPortOutput
+    InstancesGetSerialPortOutput'
     { _igspoProject = pIgspoProject_
     , _igspoZone = pIgspoZone_
     , _igspoPort = 1
@@ -118,7 +118,11 @@
          where
         type Rs InstancesGetSerialPortOutput =
              SerialPortOutput
-        requestClient InstancesGetSerialPortOutput{..}
+        type Scopes InstancesGetSerialPortOutput =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstancesGetSerialPortOutput'{..}
           = go _igspoProject _igspoZone _igspoInstance
               (Just _igspoPort)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Instances/Insert.hs b/gen/Network/Google/Resource/Compute/Instances/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Instances/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- included in the request.
 --
 -- /See:/ 'instancesInsert' smart constructor.
-data InstancesInsert = InstancesInsert
+data InstancesInsert = InstancesInsert'
     { _iiiProject :: !Text
     , _iiiZone    :: !Text
     , _iiiPayload :: !Instance
@@ -80,7 +80,7 @@
     -> Instance -- ^ 'iiiPayload'
     -> InstancesInsert
 instancesInsert pIiiProject_ pIiiZone_ pIiiPayload_ =
-    InstancesInsert
+    InstancesInsert'
     { _iiiProject = pIiiProject_
     , _iiiZone = pIiiZone_
     , _iiiPayload = pIiiPayload_
@@ -102,7 +102,10 @@
 
 instance GoogleRequest InstancesInsert where
         type Rs InstancesInsert = Operation
-        requestClient InstancesInsert{..}
+        type Scopes InstancesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesInsert'{..}
           = go _iiiProject _iiiZone (Just AltJSON) _iiiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Instances/List.hs b/gen/Network/Google/Resource/Compute/Instances/List.hs
--- a/gen/Network/Google/Resource/Compute/Instances/List.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of instance resources contained within the specified
--- zone.
+-- Retrieves the list of instances contained within the specified zone.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.list@.
 module Network.Google.Resource.Compute.Instances.List
@@ -59,11 +58,10 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] InstanceList
 
--- | Retrieves the list of instance resources contained within the specified
--- zone.
+-- | Retrieves the list of instances contained within the specified zone.
 --
 -- /See:/ 'instancesList' smart constructor.
-data InstancesList = InstancesList
+data InstancesList = InstancesList'
     { _ilProject    :: !Text
     , _ilZone       :: !Text
     , _ilFilter     :: !(Maybe Text)
@@ -89,7 +87,7 @@
     -> Text -- ^ 'ilZone'
     -> InstancesList
 instancesList pIlProject_ pIlZone_ =
-    InstancesList
+    InstancesList'
     { _ilProject = pIlProject_
     , _ilZone = pIlZone_
     , _ilFilter = Nothing
@@ -107,27 +105,39 @@
 ilZone = lens _ilZone (\ s a -> s{_ilZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 ilFilter :: Lens' InstancesList (Maybe Text)
 ilFilter = lens _ilFilter (\ s a -> s{_ilFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 ilPageToken :: Lens' InstancesList (Maybe Text)
 ilPageToken
   = lens _ilPageToken (\ s a -> s{_ilPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 ilMaxResults :: Lens' InstancesList Word32
 ilMaxResults
   = lens _ilMaxResults (\ s a -> s{_ilMaxResults = a})
@@ -135,7 +145,11 @@
 
 instance GoogleRequest InstancesList where
         type Rs InstancesList = InstanceList
-        requestClient InstancesList{..}
+        type Scopes InstancesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient InstancesList'{..}
           = go _ilProject _ilZone _ilFilter _ilPageToken
               (Just _ilMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Instances/Reset.hs b/gen/Network/Google/Resource/Compute/Instances/Reset.hs
--- a/gen/Network/Google/Resource/Compute/Instances/Reset.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/Reset.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.Reset
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Performs a hard reset on the instance.
 --
 -- /See:/ 'instancesReset' smart constructor.
-data InstancesReset = InstancesReset
+data InstancesReset = InstancesReset'
     { _irProject  :: !Text
     , _irZone     :: !Text
     , _irInstance :: !Text
@@ -79,7 +79,7 @@
     -> Text -- ^ 'irInstance'
     -> InstancesReset
 instancesReset pIrProject_ pIrZone_ pIrInstance_ =
-    InstancesReset
+    InstancesReset'
     { _irProject = pIrProject_
     , _irZone = pIrZone_
     , _irInstance = pIrInstance_
@@ -101,7 +101,10 @@
 
 instance GoogleRequest InstancesReset where
         type Rs InstancesReset = Operation
-        requestClient InstancesReset{..}
+        type Scopes InstancesReset =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesReset'{..}
           = go _irProject _irZone _irInstance (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Instances/SetDiskAutoDelete.hs b/gen/Network/Google/Resource/Compute/Instances/SetDiskAutoDelete.hs
--- a/gen/Network/Google/Resource/Compute/Instances/SetDiskAutoDelete.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/SetDiskAutoDelete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.SetDiskAutoDelete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- | Sets the auto-delete flag for a disk attached to an instance.
 --
 -- /See:/ 'instancesSetDiskAutoDelete' smart constructor.
-data InstancesSetDiskAutoDelete = InstancesSetDiskAutoDelete
+data InstancesSetDiskAutoDelete = InstancesSetDiskAutoDelete'
     { _isdadProject    :: !Text
     , _isdadAutoDelete :: !Bool
     , _isdadZone       :: !Text
@@ -91,7 +91,7 @@
     -> Text -- ^ 'isdadInstance'
     -> InstancesSetDiskAutoDelete
 instancesSetDiskAutoDelete pIsdadProject_ pIsdadAutoDelete_ pIsdadZone_ pIsdadDeviceName_ pIsdadInstance_ =
-    InstancesSetDiskAutoDelete
+    InstancesSetDiskAutoDelete'
     { _isdadProject = pIsdadProject_
     , _isdadAutoDelete = pIsdadAutoDelete_
     , _isdadZone = pIsdadZone_
@@ -130,7 +130,10 @@
 instance GoogleRequest InstancesSetDiskAutoDelete
          where
         type Rs InstancesSetDiskAutoDelete = Operation
-        requestClient InstancesSetDiskAutoDelete{..}
+        type Scopes InstancesSetDiskAutoDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesSetDiskAutoDelete'{..}
           = go _isdadProject _isdadZone _isdadInstance
               (Just _isdadAutoDelete)
               (Just _isdadDeviceName)
diff --git a/gen/Network/Google/Resource/Compute/Instances/SetMachineType.hs b/gen/Network/Google/Resource/Compute/Instances/SetMachineType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Instances/SetMachineType.hs
@@ -0,0 +1,130 @@
+{-# 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.Compute.Instances.SetMachineType
+-- 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)
+--
+-- Changes the machine type for a stopped instance to the machine type
+-- specified in the request.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.setMachineType@.
+module Network.Google.Resource.Compute.Instances.SetMachineType
+    (
+    -- * REST Resource
+      InstancesSetMachineTypeResource
+
+    -- * Creating a Request
+    , instancesSetMachineType
+    , InstancesSetMachineType
+
+    -- * Request Lenses
+    , ismtProject
+    , ismtZone
+    , ismtPayload
+    , ismtInstance
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.instances.setMachineType@ method which the
+-- 'InstancesSetMachineType' request conforms to.
+type InstancesSetMachineTypeResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "zones" :>
+               Capture "zone" Text :>
+                 "instances" :>
+                   Capture "instance" Text :>
+                     "setMachineType" :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] InstancesSetMachineTypeRequest :>
+                           Post '[JSON] Operation
+
+-- | Changes the machine type for a stopped instance to the machine type
+-- specified in the request.
+--
+-- /See:/ 'instancesSetMachineType' smart constructor.
+data InstancesSetMachineType = InstancesSetMachineType'
+    { _ismtProject  :: !Text
+    , _ismtZone     :: !Text
+    , _ismtPayload  :: !InstancesSetMachineTypeRequest
+    , _ismtInstance :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstancesSetMachineType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ismtProject'
+--
+-- * 'ismtZone'
+--
+-- * 'ismtPayload'
+--
+-- * 'ismtInstance'
+instancesSetMachineType
+    :: Text -- ^ 'ismtProject'
+    -> Text -- ^ 'ismtZone'
+    -> InstancesSetMachineTypeRequest -- ^ 'ismtPayload'
+    -> Text -- ^ 'ismtInstance'
+    -> InstancesSetMachineType
+instancesSetMachineType pIsmtProject_ pIsmtZone_ pIsmtPayload_ pIsmtInstance_ =
+    InstancesSetMachineType'
+    { _ismtProject = pIsmtProject_
+    , _ismtZone = pIsmtZone_
+    , _ismtPayload = pIsmtPayload_
+    , _ismtInstance = pIsmtInstance_
+    }
+
+-- | Project ID for this request.
+ismtProject :: Lens' InstancesSetMachineType Text
+ismtProject
+  = lens _ismtProject (\ s a -> s{_ismtProject = a})
+
+-- | The name of the zone for this request.
+ismtZone :: Lens' InstancesSetMachineType Text
+ismtZone = lens _ismtZone (\ s a -> s{_ismtZone = a})
+
+-- | Multipart request metadata.
+ismtPayload :: Lens' InstancesSetMachineType InstancesSetMachineTypeRequest
+ismtPayload
+  = lens _ismtPayload (\ s a -> s{_ismtPayload = a})
+
+-- | Name of the instance scoping this request.
+ismtInstance :: Lens' InstancesSetMachineType Text
+ismtInstance
+  = lens _ismtInstance (\ s a -> s{_ismtInstance = a})
+
+instance GoogleRequest InstancesSetMachineType where
+        type Rs InstancesSetMachineType = Operation
+        type Scopes InstancesSetMachineType =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesSetMachineType'{..}
+          = go _ismtProject _ismtZone _ismtInstance
+              (Just AltJSON)
+              _ismtPayload
+              computeService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy InstancesSetMachineTypeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Instances/SetMetadata.hs b/gen/Network/Google/Resource/Compute/Instances/SetMetadata.hs
--- a/gen/Network/Google/Resource/Compute/Instances/SetMetadata.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/SetMetadata.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.SetMetadata
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- request.
 --
 -- /See:/ 'instancesSetMetadata' smart constructor.
-data InstancesSetMetadata = InstancesSetMetadata
+data InstancesSetMetadata = InstancesSetMetadata'
     { _ismProject  :: !Text
     , _ismZone     :: !Text
     , _ismPayload  :: !Metadata
@@ -87,7 +87,7 @@
     -> Text -- ^ 'ismInstance'
     -> InstancesSetMetadata
 instancesSetMetadata pIsmProject_ pIsmZone_ pIsmPayload_ pIsmInstance_ =
-    InstancesSetMetadata
+    InstancesSetMetadata'
     { _ismProject = pIsmProject_
     , _ismZone = pIsmZone_
     , _ismPayload = pIsmPayload_
@@ -115,7 +115,10 @@
 
 instance GoogleRequest InstancesSetMetadata where
         type Rs InstancesSetMetadata = Operation
-        requestClient InstancesSetMetadata{..}
+        type Scopes InstancesSetMetadata =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesSetMetadata'{..}
           = go _ismProject _ismZone _ismInstance (Just AltJSON)
               _ismPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Instances/SetScheduling.hs b/gen/Network/Google/Resource/Compute/Instances/SetScheduling.hs
--- a/gen/Network/Google/Resource/Compute/Instances/SetScheduling.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/SetScheduling.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.SetScheduling
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- | Sets an instance\'s scheduling options.
 --
 -- /See:/ 'instancesSetScheduling' smart constructor.
-data InstancesSetScheduling = InstancesSetScheduling
+data InstancesSetScheduling = InstancesSetScheduling'
     { _issProject  :: !Text
     , _issZone     :: !Text
     , _issPayload  :: !Scheduling
@@ -85,7 +85,7 @@
     -> Text -- ^ 'issInstance'
     -> InstancesSetScheduling
 instancesSetScheduling pIssProject_ pIssZone_ pIssPayload_ pIssInstance_ =
-    InstancesSetScheduling
+    InstancesSetScheduling'
     { _issProject = pIssProject_
     , _issZone = pIssZone_
     , _issPayload = pIssPayload_
@@ -113,7 +113,10 @@
 
 instance GoogleRequest InstancesSetScheduling where
         type Rs InstancesSetScheduling = Operation
-        requestClient InstancesSetScheduling{..}
+        type Scopes InstancesSetScheduling =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesSetScheduling'{..}
           = go _issProject _issZone _issInstance (Just AltJSON)
               _issPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Instances/SetTags.hs b/gen/Network/Google/Resource/Compute/Instances/SetTags.hs
--- a/gen/Network/Google/Resource/Compute/Instances/SetTags.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/SetTags.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.SetTags
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- request.
 --
 -- /See:/ 'instancesSetTags' smart constructor.
-data InstancesSetTags = InstancesSetTags
+data InstancesSetTags = InstancesSetTags'
     { _istProject  :: !Text
     , _istZone     :: !Text
     , _istPayload  :: !Tags
@@ -87,7 +87,7 @@
     -> Text -- ^ 'istInstance'
     -> InstancesSetTags
 instancesSetTags pIstProject_ pIstZone_ pIstPayload_ pIstInstance_ =
-    InstancesSetTags
+    InstancesSetTags'
     { _istProject = pIstProject_
     , _istZone = pIstZone_
     , _istPayload = pIstPayload_
@@ -115,7 +115,10 @@
 
 instance GoogleRequest InstancesSetTags where
         type Rs InstancesSetTags = Operation
-        requestClient InstancesSetTags{..}
+        type Scopes InstancesSetTags =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesSetTags'{..}
           = go _istProject _istZone _istInstance (Just AltJSON)
               _istPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/Instances/Start.hs b/gen/Network/Google/Resource/Compute/Instances/Start.hs
--- a/gen/Network/Google/Resource/Compute/Instances/Start.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/Start.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.Start
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- This method starts an instance that was stopped using the using the
--- instances().stop method. For more information, see Restart an instance.
+-- Starts an instance that was stopped using the using the instances().stop
+-- method. For more information, see Restart an instance.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.start@.
 module Network.Google.Resource.Compute.Instances.Start
@@ -56,11 +56,11 @@
                      "start" :>
                        QueryParam "alt" AltJSON :> Post '[JSON] Operation
 
--- | This method starts an instance that was stopped using the using the
--- instances().stop method. For more information, see Restart an instance.
+-- | Starts an instance that was stopped using the using the instances().stop
+-- method. For more information, see Restart an instance.
 --
 -- /See:/ 'instancesStart' smart constructor.
-data InstancesStart = InstancesStart
+data InstancesStart = InstancesStart'
     { _insProject  :: !Text
     , _insZone     :: !Text
     , _insInstance :: !Text
@@ -81,7 +81,7 @@
     -> Text -- ^ 'insInstance'
     -> InstancesStart
 instancesStart pInsProject_ pInsZone_ pInsInstance_ =
-    InstancesStart
+    InstancesStart'
     { _insProject = pInsProject_
     , _insZone = pInsZone_
     , _insInstance = pInsInstance_
@@ -103,7 +103,10 @@
 
 instance GoogleRequest InstancesStart where
         type Rs InstancesStart = Operation
-        requestClient InstancesStart{..}
+        type Scopes InstancesStart =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesStart'{..}
           = go _insProject _insZone _insInstance (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Instances/Stop.hs b/gen/Network/Google/Resource/Compute/Instances/Stop.hs
--- a/gen/Network/Google/Resource/Compute/Instances/Stop.hs
+++ b/gen/Network/Google/Resource/Compute/Instances/Stop.hs
@@ -14,18 +14,18 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Instances.Stop
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- This method stops a running instance, shutting it down cleanly, and
--- allows you to restart the instance at a later time. Stopped instances do
--- not incur per-minute, virtual machine usage charges while they are
--- stopped, but any resources that the virtual machine is using, such as
--- persistent disks and static IP addresses,will continue to be charged
--- until they are deleted. For more information, see Stopping an instance.
+-- Stops a running instance, shutting it down cleanly, and allows you to
+-- restart the instance at a later time. Stopped instances do not incur
+-- per-minute, virtual machine usage charges while they are stopped, but
+-- any resources that the virtual machine is using, such as persistent
+-- disks and static IP addresses, will continue to be charged until they
+-- are deleted. For more information, see Stopping an instance.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.instances.stop@.
 module Network.Google.Resource.Compute.Instances.Stop
@@ -60,15 +60,15 @@
                      "stop" :>
                        QueryParam "alt" AltJSON :> Post '[JSON] Operation
 
--- | This method stops a running instance, shutting it down cleanly, and
--- allows you to restart the instance at a later time. Stopped instances do
--- not incur per-minute, virtual machine usage charges while they are
--- stopped, but any resources that the virtual machine is using, such as
--- persistent disks and static IP addresses,will continue to be charged
--- until they are deleted. For more information, see Stopping an instance.
+-- | Stops a running instance, shutting it down cleanly, and allows you to
+-- restart the instance at a later time. Stopped instances do not incur
+-- per-minute, virtual machine usage charges while they are stopped, but
+-- any resources that the virtual machine is using, such as persistent
+-- disks and static IP addresses, will continue to be charged until they
+-- are deleted. For more information, see Stopping an instance.
 --
 -- /See:/ 'instancesStop' smart constructor.
-data InstancesStop = InstancesStop
+data InstancesStop = InstancesStop'
     { _isProject  :: !Text
     , _isZone     :: !Text
     , _isInstance :: !Text
@@ -89,7 +89,7 @@
     -> Text -- ^ 'isInstance'
     -> InstancesStop
 instancesStop pIsProject_ pIsZone_ pIsInstance_ =
-    InstancesStop
+    InstancesStop'
     { _isProject = pIsProject_
     , _isZone = pIsZone_
     , _isInstance = pIsInstance_
@@ -111,7 +111,10 @@
 
 instance GoogleRequest InstancesStop where
         type Rs InstancesStop = Operation
-        requestClient InstancesStop{..}
+        type Scopes InstancesStop =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient InstancesStop'{..}
           = go _isProject _isZone _isInstance (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Licenses/Get.hs b/gen/Network/Google/Resource/Compute/Licenses/Get.hs
--- a/gen/Network/Google/Resource/Compute/Licenses/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Licenses/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Licenses.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified license resource.
+-- Returns the specified License resource. Get a list of available licenses
+-- by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.licenses.get@.
 module Network.Google.Resource.Compute.Licenses.Get
@@ -52,10 +53,11 @@
                  Capture "license" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] License
 
--- | Returns the specified license resource.
+-- | Returns the specified License resource. Get a list of available licenses
+-- by making a list() request.
 --
 -- /See:/ 'licensesGet' smart constructor.
-data LicensesGet = LicensesGet
+data LicensesGet = LicensesGet'
     { _lgProject :: !Text
     , _lgLicense :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +74,7 @@
     -> Text -- ^ 'lgLicense'
     -> LicensesGet
 licensesGet pLgProject_ pLgLicense_ =
-    LicensesGet
+    LicensesGet'
     { _lgProject = pLgProject_
     , _lgLicense = pLgLicense_
     }
@@ -82,14 +84,18 @@
 lgProject
   = lens _lgProject (\ s a -> s{_lgProject = a})
 
--- | Name of the license resource to return.
+-- | Name of the License resource to return.
 lgLicense :: Lens' LicensesGet Text
 lgLicense
   = lens _lgLicense (\ s a -> s{_lgLicense = a})
 
 instance GoogleRequest LicensesGet where
         type Rs LicensesGet = License
-        requestClient LicensesGet{..}
+        type Scopes LicensesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient LicensesGet'{..}
           = go _lgProject _lgLicense (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/MachineTypes/AggregatedList.hs b/gen/Network/Google/Resource/Compute/MachineTypes/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/MachineTypes/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/MachineTypes/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.MachineTypes.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of machine type resources grouped by scope.
+-- Retrieves an aggregated list of machine types.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.machineTypes.aggregatedList@.
 module Network.Google.Resource.Compute.MachineTypes.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] MachineTypeAggregatedList
 
--- | Retrieves the list of machine type resources grouped by scope.
+-- | Retrieves an aggregated list of machine types.
 --
 -- /See:/ 'machineTypesAggregatedList' smart constructor.
-data MachineTypesAggregatedList = MachineTypesAggregatedList
+data MachineTypesAggregatedList = MachineTypesAggregatedList'
     { _mtalProject    :: !Text
     , _mtalFilter     :: !(Maybe Text)
     , _mtalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'mtalProject'
     -> MachineTypesAggregatedList
 machineTypesAggregatedList pMtalProject_ =
-    MachineTypesAggregatedList
+    MachineTypesAggregatedList'
     { _mtalProject = pMtalProject_
     , _mtalFilter = Nothing
     , _mtalPageToken = Nothing
@@ -95,29 +95,41 @@
   = lens _mtalProject (\ s a -> s{_mtalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 mtalFilter :: Lens' MachineTypesAggregatedList (Maybe Text)
 mtalFilter
   = lens _mtalFilter (\ s a -> s{_mtalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 mtalPageToken :: Lens' MachineTypesAggregatedList (Maybe Text)
 mtalPageToken
   = lens _mtalPageToken
       (\ s a -> s{_mtalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 mtalMaxResults :: Lens' MachineTypesAggregatedList Word32
 mtalMaxResults
   = lens _mtalMaxResults
@@ -128,7 +140,11 @@
          where
         type Rs MachineTypesAggregatedList =
              MachineTypeAggregatedList
-        requestClient MachineTypesAggregatedList{..}
+        type Scopes MachineTypesAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient MachineTypesAggregatedList'{..}
           = go _mtalProject _mtalFilter _mtalPageToken
               (Just _mtalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/MachineTypes/Get.hs b/gen/Network/Google/Resource/Compute/MachineTypes/Get.hs
--- a/gen/Network/Google/Resource/Compute/MachineTypes/Get.hs
+++ b/gen/Network/Google/Resource/Compute/MachineTypes/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.MachineTypes.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified machine type resource.
+-- Returns the specified machine type. Get a list of available machine
+-- types by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.machineTypes.get@.
 module Network.Google.Resource.Compute.MachineTypes.Get
@@ -54,10 +55,11 @@
                    Capture "machineType" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] MachineType
 
--- | Returns the specified machine type resource.
+-- | Returns the specified machine type. Get a list of available machine
+-- types by making a list() request.
 --
 -- /See:/ 'machineTypesGet' smart constructor.
-data MachineTypesGet = MachineTypesGet
+data MachineTypesGet = MachineTypesGet'
     { _mtgProject     :: !Text
     , _mtgZone        :: !Text
     , _mtgMachineType :: !Text
@@ -78,7 +80,7 @@
     -> Text -- ^ 'mtgMachineType'
     -> MachineTypesGet
 machineTypesGet pMtgProject_ pMtgZone_ pMtgMachineType_ =
-    MachineTypesGet
+    MachineTypesGet'
     { _mtgProject = pMtgProject_
     , _mtgZone = pMtgZone_
     , _mtgMachineType = pMtgMachineType_
@@ -93,7 +95,7 @@
 mtgZone :: Lens' MachineTypesGet Text
 mtgZone = lens _mtgZone (\ s a -> s{_mtgZone = a})
 
--- | Name of the machine type resource to return.
+-- | Name of the machine type to return.
 mtgMachineType :: Lens' MachineTypesGet Text
 mtgMachineType
   = lens _mtgMachineType
@@ -101,7 +103,11 @@
 
 instance GoogleRequest MachineTypesGet where
         type Rs MachineTypesGet = MachineType
-        requestClient MachineTypesGet{..}
+        type Scopes MachineTypesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient MachineTypesGet'{..}
           = go _mtgProject _mtgZone _mtgMachineType
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/MachineTypes/List.hs b/gen/Network/Google/Resource/Compute/MachineTypes/List.hs
--- a/gen/Network/Google/Resource/Compute/MachineTypes/List.hs
+++ b/gen/Network/Google/Resource/Compute/MachineTypes/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.MachineTypes.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of machine type resources available to the specified
--- project.
+-- Retrieves a list of machine types available to the specified project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.machineTypes.list@.
 module Network.Google.Resource.Compute.MachineTypes.List
@@ -60,11 +59,10 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] MachineTypeList
 
--- | Retrieves the list of machine type resources available to the specified
--- project.
+-- | Retrieves a list of machine types available to the specified project.
 --
 -- /See:/ 'machineTypesList' smart constructor.
-data MachineTypesList = MachineTypesList
+data MachineTypesList = MachineTypesList'
     { _mtlProject    :: !Text
     , _mtlZone       :: !Text
     , _mtlFilter     :: !(Maybe Text)
@@ -90,7 +88,7 @@
     -> Text -- ^ 'mtlZone'
     -> MachineTypesList
 machineTypesList pMtlProject_ pMtlZone_ =
-    MachineTypesList
+    MachineTypesList'
     { _mtlProject = pMtlProject_
     , _mtlZone = pMtlZone_
     , _mtlFilter = Nothing
@@ -108,28 +106,40 @@
 mtlZone = lens _mtlZone (\ s a -> s{_mtlZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 mtlFilter :: Lens' MachineTypesList (Maybe Text)
 mtlFilter
   = lens _mtlFilter (\ s a -> s{_mtlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 mtlPageToken :: Lens' MachineTypesList (Maybe Text)
 mtlPageToken
   = lens _mtlPageToken (\ s a -> s{_mtlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 mtlMaxResults :: Lens' MachineTypesList Word32
 mtlMaxResults
   = lens _mtlMaxResults
@@ -138,7 +148,11 @@
 
 instance GoogleRequest MachineTypesList where
         type Rs MachineTypesList = MachineTypeList
-        requestClient MachineTypesList{..}
+        type Scopes MachineTypesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient MachineTypesList'{..}
           = go _mtlProject _mtlZone _mtlFilter _mtlPageToken
               (Just _mtlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Networks/Delete.hs b/gen/Network/Google/Resource/Compute/Networks/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Networks/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Networks/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Networks.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified network resource.
+-- Deletes the specified network.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.networks.delete@.
 module Network.Google.Resource.Compute.Networks.Delete
@@ -52,10 +52,10 @@
                  Capture "network" Text :>
                    QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified network resource.
+-- | Deletes the specified network.
 --
 -- /See:/ 'networksDelete' smart constructor.
-data NetworksDelete = NetworksDelete
+data NetworksDelete = NetworksDelete'
     { _ndProject :: !Text
     , _ndNetwork :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'ndNetwork'
     -> NetworksDelete
 networksDelete pNdProject_ pNdNetwork_ =
-    NetworksDelete
+    NetworksDelete'
     { _ndProject = pNdProject_
     , _ndNetwork = pNdNetwork_
     }
@@ -82,14 +82,17 @@
 ndProject
   = lens _ndProject (\ s a -> s{_ndProject = a})
 
--- | Name of the network resource to delete.
+-- | Name of the network to delete.
 ndNetwork :: Lens' NetworksDelete Text
 ndNetwork
   = lens _ndNetwork (\ s a -> s{_ndNetwork = a})
 
 instance GoogleRequest NetworksDelete where
         type Rs NetworksDelete = Operation
-        requestClient NetworksDelete{..}
+        type Scopes NetworksDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient NetworksDelete'{..}
           = go _ndProject _ndNetwork (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Networks/Get.hs b/gen/Network/Google/Resource/Compute/Networks/Get.hs
--- a/gen/Network/Google/Resource/Compute/Networks/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Networks/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Networks.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified network resource.
+-- Returns the specified network. Get a list of available networks by
+-- making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.networks.get@.
 module Network.Google.Resource.Compute.Networks.Get
@@ -52,10 +53,11 @@
                  Capture "network" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Network
 
--- | Returns the specified network resource.
+-- | Returns the specified network. Get a list of available networks by
+-- making a list() request.
 --
 -- /See:/ 'networksGet' smart constructor.
-data NetworksGet = NetworksGet
+data NetworksGet = NetworksGet'
     { _ngProject :: !Text
     , _ngNetwork :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +74,7 @@
     -> Text -- ^ 'ngNetwork'
     -> NetworksGet
 networksGet pNgProject_ pNgNetwork_ =
-    NetworksGet
+    NetworksGet'
     { _ngProject = pNgProject_
     , _ngNetwork = pNgNetwork_
     }
@@ -82,14 +84,18 @@
 ngProject
   = lens _ngProject (\ s a -> s{_ngProject = a})
 
--- | Name of the network resource to return.
+-- | Name of the network to return.
 ngNetwork :: Lens' NetworksGet Text
 ngNetwork
   = lens _ngNetwork (\ s a -> s{_ngNetwork = a})
 
 instance GoogleRequest NetworksGet where
         type Rs NetworksGet = Network
-        requestClient NetworksGet{..}
+        type Scopes NetworksGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient NetworksGet'{..}
           = go _ngProject _ngNetwork (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Networks/Insert.hs b/gen/Network/Google/Resource/Compute/Networks/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Networks/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Networks/Insert.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Networks.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 network resource in the specified project using the data
--- included in the request.
+-- Creates a network in the specified project using the data included in
+-- the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.networks.insert@.
 module Network.Google.Resource.Compute.Networks.Insert
@@ -53,11 +53,11 @@
                  QueryParam "alt" AltJSON :>
                    ReqBody '[JSON] Network :> Post '[JSON] Operation
 
--- | Creates a network resource in the specified project using the data
--- included in the request.
+-- | Creates a network in the specified project using the data included in
+-- the request.
 --
 -- /See:/ 'networksInsert' smart constructor.
-data NetworksInsert = NetworksInsert
+data NetworksInsert = NetworksInsert'
     { _niProject :: !Text
     , _niPayload :: !Network
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,7 +74,7 @@
     -> Network -- ^ 'niPayload'
     -> NetworksInsert
 networksInsert pNiProject_ pNiPayload_ =
-    NetworksInsert
+    NetworksInsert'
     { _niProject = pNiProject_
     , _niPayload = pNiPayload_
     }
@@ -91,7 +91,10 @@
 
 instance GoogleRequest NetworksInsert where
         type Rs NetworksInsert = Operation
-        requestClient NetworksInsert{..}
+        type Scopes NetworksInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient NetworksInsert'{..}
           = go _niProject (Just AltJSON) _niPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Networks/List.hs b/gen/Network/Google/Resource/Compute/Networks/List.hs
--- a/gen/Network/Google/Resource/Compute/Networks/List.hs
+++ b/gen/Network/Google/Resource/Compute/Networks/List.hs
@@ -14,14 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Networks.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of network resources available to the specified
--- project.
+-- Retrieves the list of networks available to the specified project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.networks.list@.
 module Network.Google.Resource.Compute.Networks.List
@@ -57,11 +56,10 @@
                      QueryParam "maxResults" (Textual Word32) :>
                        QueryParam "alt" AltJSON :> Get '[JSON] NetworkList
 
--- | Retrieves the list of network resources available to the specified
--- project.
+-- | Retrieves the list of networks available to the specified project.
 --
 -- /See:/ 'networksList' smart constructor.
-data NetworksList = NetworksList
+data NetworksList = NetworksList'
     { _nlProject    :: !Text
     , _nlFilter     :: !(Maybe Text)
     , _nlPageToken  :: !(Maybe Text)
@@ -83,7 +81,7 @@
     :: Text -- ^ 'nlProject'
     -> NetworksList
 networksList pNlProject_ =
-    NetworksList
+    NetworksList'
     { _nlProject = pNlProject_
     , _nlFilter = Nothing
     , _nlPageToken = Nothing
@@ -96,27 +94,39 @@
   = lens _nlProject (\ s a -> s{_nlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 nlFilter :: Lens' NetworksList (Maybe Text)
 nlFilter = lens _nlFilter (\ s a -> s{_nlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 nlPageToken :: Lens' NetworksList (Maybe Text)
 nlPageToken
   = lens _nlPageToken (\ s a -> s{_nlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 nlMaxResults :: Lens' NetworksList Word32
 nlMaxResults
   = lens _nlMaxResults (\ s a -> s{_nlMaxResults = a})
@@ -124,7 +134,11 @@
 
 instance GoogleRequest NetworksList where
         type Rs NetworksList = NetworkList
-        requestClient NetworksList{..}
+        type Scopes NetworksList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient NetworksList'{..}
           = go _nlProject _nlFilter _nlPageToken
               (Just _nlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Projects/Get.hs b/gen/Network/Google/Resource/Compute/Projects/Get.hs
--- a/gen/Network/Google/Resource/Compute/Projects/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Projects/Get.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Projects.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified project resource.
+-- Returns the specified Project resource.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.projects.get@.
 module Network.Google.Resource.Compute.Projects.Get
@@ -48,10 +48,10 @@
            Capture "project" Text :>
              QueryParam "alt" AltJSON :> Get '[JSON] Project
 
--- | Returns the specified project resource.
+-- | Returns the specified Project resource.
 --
 -- /See:/ 'projectsGet' smart constructor.
-newtype ProjectsGet = ProjectsGet
+newtype ProjectsGet = ProjectsGet'
     { _pgProject :: Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -64,7 +64,7 @@
     :: Text -- ^ 'pgProject'
     -> ProjectsGet
 projectsGet pPgProject_ =
-    ProjectsGet
+    ProjectsGet'
     { _pgProject = pPgProject_
     }
 
@@ -75,7 +75,11 @@
 
 instance GoogleRequest ProjectsGet where
         type Rs ProjectsGet = Project
-        requestClient ProjectsGet{..}
+        type Scopes ProjectsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ProjectsGet'{..}
           = go _pgProject (Just AltJSON) computeService
           where go
                   = buildClient (Proxy :: Proxy ProjectsGetResource)
diff --git a/gen/Network/Google/Resource/Compute/Projects/MoveDisk.hs b/gen/Network/Google/Resource/Compute/Projects/MoveDisk.hs
--- a/gen/Network/Google/Resource/Compute/Projects/MoveDisk.hs
+++ b/gen/Network/Google/Resource/Compute/Projects/MoveDisk.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Projects.MoveDisk
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Moves a persistent disk from one zone to another.
 --
 -- /See:/ 'projectsMoveDisk' smart constructor.
-data ProjectsMoveDisk = ProjectsMoveDisk
+data ProjectsMoveDisk = ProjectsMoveDisk'
     { _pmdProject :: !Text
     , _pmdPayload :: !DiskMoveRequest
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> DiskMoveRequest -- ^ 'pmdPayload'
     -> ProjectsMoveDisk
 projectsMoveDisk pPmdProject_ pPmdPayload_ =
-    ProjectsMoveDisk
+    ProjectsMoveDisk'
     { _pmdProject = pPmdProject_
     , _pmdPayload = pPmdPayload_
     }
@@ -89,7 +89,10 @@
 
 instance GoogleRequest ProjectsMoveDisk where
         type Rs ProjectsMoveDisk = Operation
-        requestClient ProjectsMoveDisk{..}
+        type Scopes ProjectsMoveDisk =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ProjectsMoveDisk'{..}
           = go _pmdProject (Just AltJSON) _pmdPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Projects/MoveInstance.hs b/gen/Network/Google/Resource/Compute/Projects/MoveInstance.hs
--- a/gen/Network/Google/Resource/Compute/Projects/MoveInstance.hs
+++ b/gen/Network/Google/Resource/Compute/Projects/MoveInstance.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Projects.MoveInstance
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- another.
 --
 -- /See:/ 'projectsMoveInstance' smart constructor.
-data ProjectsMoveInstance = ProjectsMoveInstance
+data ProjectsMoveInstance = ProjectsMoveInstance'
     { _pmiProject :: !Text
     , _pmiPayload :: !InstanceMoveRequest
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,7 +74,7 @@
     -> InstanceMoveRequest -- ^ 'pmiPayload'
     -> ProjectsMoveInstance
 projectsMoveInstance pPmiProject_ pPmiPayload_ =
-    ProjectsMoveInstance
+    ProjectsMoveInstance'
     { _pmiProject = pPmiProject_
     , _pmiPayload = pPmiPayload_
     }
@@ -91,7 +91,10 @@
 
 instance GoogleRequest ProjectsMoveInstance where
         type Rs ProjectsMoveInstance = Operation
-        requestClient ProjectsMoveInstance{..}
+        type Scopes ProjectsMoveInstance =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ProjectsMoveInstance'{..}
           = go _pmiProject (Just AltJSON) _pmiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Projects/SetCommonInstanceMetadata.hs b/gen/Network/Google/Resource/Compute/Projects/SetCommonInstanceMetadata.hs
--- a/gen/Network/Google/Resource/Compute/Projects/SetCommonInstanceMetadata.hs
+++ b/gen/Network/Google/Resource/Compute/Projects/SetCommonInstanceMetadata.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Projects.SetCommonInstanceMetadata
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -56,7 +56,7 @@
 -- the data included in the request.
 --
 -- /See:/ 'projectsSetCommonInstanceMetadata' smart constructor.
-data ProjectsSetCommonInstanceMetadata = ProjectsSetCommonInstanceMetadata
+data ProjectsSetCommonInstanceMetadata = ProjectsSetCommonInstanceMetadata'
     { _pscimProject :: !Text
     , _pscimPayload :: !Metadata
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,7 +73,7 @@
     -> Metadata -- ^ 'pscimPayload'
     -> ProjectsSetCommonInstanceMetadata
 projectsSetCommonInstanceMetadata pPscimProject_ pPscimPayload_ =
-    ProjectsSetCommonInstanceMetadata
+    ProjectsSetCommonInstanceMetadata'
     { _pscimProject = pPscimProject_
     , _pscimPayload = pPscimPayload_
     }
@@ -91,7 +91,10 @@
 instance GoogleRequest
          ProjectsSetCommonInstanceMetadata where
         type Rs ProjectsSetCommonInstanceMetadata = Operation
-        requestClient ProjectsSetCommonInstanceMetadata{..}
+        type Scopes ProjectsSetCommonInstanceMetadata =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ProjectsSetCommonInstanceMetadata'{..}
           = go _pscimProject (Just AltJSON) _pscimPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Projects/SetUsageExportBucket.hs b/gen/Network/Google/Resource/Compute/Projects/SetUsageExportBucket.hs
--- a/gen/Network/Google/Resource/Compute/Projects/SetUsageExportBucket.hs
+++ b/gen/Network/Google/Resource/Compute/Projects/SetUsageExportBucket.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Projects.SetUsageExportBucket
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- method, the usage export feature will be disabled.
 --
 -- /See:/ 'projectsSetUsageExportBucket' smart constructor.
-data ProjectsSetUsageExportBucket = ProjectsSetUsageExportBucket
+data ProjectsSetUsageExportBucket = ProjectsSetUsageExportBucket'
     { _psuebProject :: !Text
     , _psuebPayload :: !UsageExportLocation
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -76,7 +76,7 @@
     -> UsageExportLocation -- ^ 'psuebPayload'
     -> ProjectsSetUsageExportBucket
 projectsSetUsageExportBucket pPsuebProject_ pPsuebPayload_ =
-    ProjectsSetUsageExportBucket
+    ProjectsSetUsageExportBucket'
     { _psuebProject = pPsuebProject_
     , _psuebPayload = pPsuebPayload_
     }
@@ -94,7 +94,13 @@
 instance GoogleRequest ProjectsSetUsageExportBucket
          where
         type Rs ProjectsSetUsageExportBucket = Operation
-        requestClient ProjectsSetUsageExportBucket{..}
+        type Scopes ProjectsSetUsageExportBucket =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/devstorage.full_control",
+               "https://www.googleapis.com/auth/devstorage.read_only",
+               "https://www.googleapis.com/auth/devstorage.read_write"]
+        requestClient ProjectsSetUsageExportBucket'{..}
           = go _psuebProject (Just AltJSON) _psuebPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/RegionOperations/Delete.hs b/gen/Network/Google/Resource/Compute/RegionOperations/Delete.hs
--- a/gen/Network/Google/Resource/Compute/RegionOperations/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/RegionOperations/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.RegionOperations.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Deletes the specified region-specific Operations resource.
 --
 -- /See:/ 'regionOperationsDelete' smart constructor.
-data RegionOperationsDelete = RegionOperationsDelete
+data RegionOperationsDelete = RegionOperationsDelete'
     { _rodProject   :: !Text
     , _rodOperation :: !Text
     , _rodRegion    :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'rodRegion'
     -> RegionOperationsDelete
 regionOperationsDelete pRodProject_ pRodOperation_ pRodRegion_ =
-    RegionOperationsDelete
+    RegionOperationsDelete'
     { _rodProject = pRodProject_
     , _rodOperation = pRodOperation_
     , _rodRegion = pRodRegion_
@@ -94,14 +94,17 @@
 rodOperation
   = lens _rodOperation (\ s a -> s{_rodOperation = a})
 
--- | Name of the region scoping this request.
+-- | Name of the region for this request.
 rodRegion :: Lens' RegionOperationsDelete Text
 rodRegion
   = lens _rodRegion (\ s a -> s{_rodRegion = a})
 
 instance GoogleRequest RegionOperationsDelete where
         type Rs RegionOperationsDelete = ()
-        requestClient RegionOperationsDelete{..}
+        type Scopes RegionOperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient RegionOperationsDelete'{..}
           = go _rodProject _rodRegion _rodOperation
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/RegionOperations/Get.hs b/gen/Network/Google/Resource/Compute/RegionOperations/Get.hs
--- a/gen/Network/Google/Resource/Compute/RegionOperations/Get.hs
+++ b/gen/Network/Google/Resource/Compute/RegionOperations/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.RegionOperations.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Retrieves the specified region-specific Operations resource.
 --
 -- /See:/ 'regionOperationsGet' smart constructor.
-data RegionOperationsGet = RegionOperationsGet
+data RegionOperationsGet = RegionOperationsGet'
     { _rogProject   :: !Text
     , _rogOperation :: !Text
     , _rogRegion    :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'rogRegion'
     -> RegionOperationsGet
 regionOperationsGet pRogProject_ pRogOperation_ pRogRegion_ =
-    RegionOperationsGet
+    RegionOperationsGet'
     { _rogProject = pRogProject_
     , _rogOperation = pRogOperation_
     , _rogRegion = pRogRegion_
@@ -94,14 +94,18 @@
 rogOperation
   = lens _rogOperation (\ s a -> s{_rogOperation = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the region for this request.
 rogRegion :: Lens' RegionOperationsGet Text
 rogRegion
   = lens _rogRegion (\ s a -> s{_rogRegion = a})
 
 instance GoogleRequest RegionOperationsGet where
         type Rs RegionOperationsGet = Operation
-        requestClient RegionOperationsGet{..}
+        type Scopes RegionOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient RegionOperationsGet'{..}
           = go _rogProject _rogRegion _rogOperation
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/RegionOperations/List.hs b/gen/Network/Google/Resource/Compute/RegionOperations/List.hs
--- a/gen/Network/Google/Resource/Compute/RegionOperations/List.hs
+++ b/gen/Network/Google/Resource/Compute/RegionOperations/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.RegionOperations.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of Operation resources contained within the specified
+-- Retrieves a list of Operation resources contained within the specified
 -- region.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.regionOperations.list@.
@@ -59,11 +59,11 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] OperationList
 
--- | Retrieves the list of Operation resources contained within the specified
+-- | Retrieves a list of Operation resources contained within the specified
 -- region.
 --
 -- /See:/ 'regionOperationsList' smart constructor.
-data RegionOperationsList = RegionOperationsList
+data RegionOperationsList = RegionOperationsList'
     { _rolProject    :: !Text
     , _rolFilter     :: !(Maybe Text)
     , _rolRegion     :: !Text
@@ -89,7 +89,7 @@
     -> Text -- ^ 'rolRegion'
     -> RegionOperationsList
 regionOperationsList pRolProject_ pRolRegion_ =
-    RegionOperationsList
+    RegionOperationsList'
     { _rolProject = pRolProject_
     , _rolFilter = Nothing
     , _rolRegion = pRolRegion_
@@ -103,33 +103,45 @@
   = lens _rolProject (\ s a -> s{_rolProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 rolFilter :: Lens' RegionOperationsList (Maybe Text)
 rolFilter
   = lens _rolFilter (\ s a -> s{_rolFilter = a})
 
--- | Name of the region scoping this request.
+-- | Name of the region for this request.
 rolRegion :: Lens' RegionOperationsList Text
 rolRegion
   = lens _rolRegion (\ s a -> s{_rolRegion = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 rolPageToken :: Lens' RegionOperationsList (Maybe Text)
 rolPageToken
   = lens _rolPageToken (\ s a -> s{_rolPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 rolMaxResults :: Lens' RegionOperationsList Word32
 rolMaxResults
   = lens _rolMaxResults
@@ -138,7 +150,11 @@
 
 instance GoogleRequest RegionOperationsList where
         type Rs RegionOperationsList = OperationList
-        requestClient RegionOperationsList{..}
+        type Scopes RegionOperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient RegionOperationsList'{..}
           = go _rolProject _rolRegion _rolFilter _rolPageToken
               (Just _rolMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Regions/Get.hs b/gen/Network/Google/Resource/Compute/Regions/Get.hs
--- a/gen/Network/Google/Resource/Compute/Regions/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Regions/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Regions.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified region resource.
+-- Returns the specified Region resource. Get a list of available regions
+-- by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.regions.get@.
 module Network.Google.Resource.Compute.Regions.Get
@@ -51,10 +52,11 @@
                Capture "region" Text :>
                  QueryParam "alt" AltJSON :> Get '[JSON] Region
 
--- | Returns the specified region resource.
+-- | Returns the specified Region resource. Get a list of available regions
+-- by making a list() request.
 --
 -- /See:/ 'regionsGet' smart constructor.
-data RegionsGet = RegionsGet
+data RegionsGet = RegionsGet'
     { _rgProject :: !Text
     , _rgRegion  :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -71,7 +73,7 @@
     -> Text -- ^ 'rgRegion'
     -> RegionsGet
 regionsGet pRgProject_ pRgRegion_ =
-    RegionsGet
+    RegionsGet'
     { _rgProject = pRgProject_
     , _rgRegion = pRgRegion_
     }
@@ -87,7 +89,11 @@
 
 instance GoogleRequest RegionsGet where
         type Rs RegionsGet = Region
-        requestClient RegionsGet{..}
+        type Scopes RegionsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient RegionsGet'{..}
           = go _rgProject _rgRegion (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Regions/List.hs b/gen/Network/Google/Resource/Compute/Regions/List.hs
--- a/gen/Network/Google/Resource/Compute/Regions/List.hs
+++ b/gen/Network/Google/Resource/Compute/Regions/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Regions.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- project.
 --
 -- /See:/ 'regionsList' smart constructor.
-data RegionsList = RegionsList
+data RegionsList = RegionsList'
     { _rProject    :: !Text
     , _rFilter     :: !(Maybe Text)
     , _rPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'rProject'
     -> RegionsList
 regionsList pRProject_ =
-    RegionsList
+    RegionsList'
     { _rProject = pRProject_
     , _rFilter = Nothing
     , _rPageToken = Nothing
@@ -94,27 +94,39 @@
 rProject = lens _rProject (\ s a -> s{_rProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 rFilter :: Lens' RegionsList (Maybe Text)
 rFilter = lens _rFilter (\ s a -> s{_rFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 rPageToken :: Lens' RegionsList (Maybe Text)
 rPageToken
   = lens _rPageToken (\ s a -> s{_rPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 rMaxResults :: Lens' RegionsList Word32
 rMaxResults
   = lens _rMaxResults (\ s a -> s{_rMaxResults = a}) .
@@ -122,7 +134,11 @@
 
 instance GoogleRequest RegionsList where
         type Rs RegionsList = RegionList
-        requestClient RegionsList{..}
+        type Scopes RegionsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient RegionsList'{..}
           = go _rProject _rFilter _rPageToken
               (Just _rMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Routes/Delete.hs b/gen/Network/Google/Resource/Compute/Routes/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Routes/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Routes/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Routes.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified route resource.
+-- Deletes the specified Route resource.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.routes.delete@.
 module Network.Google.Resource.Compute.Routes.Delete
@@ -52,10 +52,10 @@
                  Capture "route" Text :>
                    QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified route resource.
+-- | Deletes the specified Route resource.
 --
 -- /See:/ 'routesDelete' smart constructor.
-data RoutesDelete = RoutesDelete
+data RoutesDelete = RoutesDelete'
     { _rdProject :: !Text
     , _rdRoute   :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,23 +72,26 @@
     -> Text -- ^ 'rdRoute'
     -> RoutesDelete
 routesDelete pRdProject_ pRdRoute_ =
-    RoutesDelete
+    RoutesDelete'
     { _rdProject = pRdProject_
     , _rdRoute = pRdRoute_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 rdProject :: Lens' RoutesDelete Text
 rdProject
   = lens _rdProject (\ s a -> s{_rdProject = a})
 
--- | Name of the route resource to delete.
+-- | Name of the Route resource to delete.
 rdRoute :: Lens' RoutesDelete Text
 rdRoute = lens _rdRoute (\ s a -> s{_rdRoute = a})
 
 instance GoogleRequest RoutesDelete where
         type Rs RoutesDelete = Operation
-        requestClient RoutesDelete{..}
+        type Scopes RoutesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient RoutesDelete'{..}
           = go _rdProject _rdRoute (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Routes/Get.hs b/gen/Network/Google/Resource/Compute/Routes/Get.hs
--- a/gen/Network/Google/Resource/Compute/Routes/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Routes/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Routes.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified route resource.
+-- Returns the specified Route resource. Get a list of available routes by
+-- making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.routes.get@.
 module Network.Google.Resource.Compute.Routes.Get
@@ -52,10 +53,11 @@
                  Capture "route" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Route
 
--- | Returns the specified route resource.
+-- | Returns the specified Route resource. Get a list of available routes by
+-- making a list() request.
 --
 -- /See:/ 'routesGet' smart constructor.
-data RoutesGet = RoutesGet
+data RoutesGet = RoutesGet'
     { _rouProject :: !Text
     , _rouRoute   :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,23 +74,27 @@
     -> Text -- ^ 'rouRoute'
     -> RoutesGet
 routesGet pRouProject_ pRouRoute_ =
-    RoutesGet
+    RoutesGet'
     { _rouProject = pRouProject_
     , _rouRoute = pRouRoute_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 rouProject :: Lens' RoutesGet Text
 rouProject
   = lens _rouProject (\ s a -> s{_rouProject = a})
 
--- | Name of the route resource to return.
+-- | Name of the Route resource to return.
 rouRoute :: Lens' RoutesGet Text
 rouRoute = lens _rouRoute (\ s a -> s{_rouRoute = a})
 
 instance GoogleRequest RoutesGet where
         type Rs RoutesGet = Route
-        requestClient RoutesGet{..}
+        type Scopes RoutesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient RoutesGet'{..}
           = go _rouProject _rouRoute (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Routes/Insert.hs b/gen/Network/Google/Resource/Compute/Routes/Insert.hs
--- a/gen/Network/Google/Resource/Compute/Routes/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/Routes/Insert.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Routes.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 route resource in the specified project using the data
+-- Creates a Route resource in the specified project using the data
 -- included in the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.routes.insert@.
@@ -53,11 +53,11 @@
                  QueryParam "alt" AltJSON :>
                    ReqBody '[JSON] Route :> Post '[JSON] Operation
 
--- | Creates a route resource in the specified project using the data
+-- | Creates a Route resource in the specified project using the data
 -- included in the request.
 --
 -- /See:/ 'routesInsert' smart constructor.
-data RoutesInsert = RoutesInsert
+data RoutesInsert = RoutesInsert'
     { _riProject :: !Text
     , _riPayload :: !Route
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,12 +74,12 @@
     -> Route -- ^ 'riPayload'
     -> RoutesInsert
 routesInsert pRiProject_ pRiPayload_ =
-    RoutesInsert
+    RoutesInsert'
     { _riProject = pRiProject_
     , _riPayload = pRiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 riProject :: Lens' RoutesInsert Text
 riProject
   = lens _riProject (\ s a -> s{_riProject = a})
@@ -91,7 +91,10 @@
 
 instance GoogleRequest RoutesInsert where
         type Rs RoutesInsert = Operation
-        requestClient RoutesInsert{..}
+        type Scopes RoutesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient RoutesInsert'{..}
           = go _riProject (Just AltJSON) _riPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Routes/List.hs b/gen/Network/Google/Resource/Compute/Routes/List.hs
--- a/gen/Network/Google/Resource/Compute/Routes/List.hs
+++ b/gen/Network/Google/Resource/Compute/Routes/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Routes.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of route resources available to the specified
+-- Retrieves the list of Route resources available to the specified
 -- project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.routes.list@.
@@ -57,11 +57,11 @@
                      QueryParam "maxResults" (Textual Word32) :>
                        QueryParam "alt" AltJSON :> Get '[JSON] RouteList
 
--- | Retrieves the list of route resources available to the specified
+-- | Retrieves the list of Route resources available to the specified
 -- project.
 --
 -- /See:/ 'routesList' smart constructor.
-data RoutesList = RoutesList
+data RoutesList = RoutesList'
     { _rlProject    :: !Text
     , _rlFilter     :: !(Maybe Text)
     , _rlPageToken  :: !(Maybe Text)
@@ -83,40 +83,52 @@
     :: Text -- ^ 'rlProject'
     -> RoutesList
 routesList pRlProject_ =
-    RoutesList
+    RoutesList'
     { _rlProject = pRlProject_
     , _rlFilter = Nothing
     , _rlPageToken = Nothing
     , _rlMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 rlProject :: Lens' RoutesList Text
 rlProject
   = lens _rlProject (\ s a -> s{_rlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 rlFilter :: Lens' RoutesList (Maybe Text)
 rlFilter = lens _rlFilter (\ s a -> s{_rlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 rlPageToken :: Lens' RoutesList (Maybe Text)
 rlPageToken
   = lens _rlPageToken (\ s a -> s{_rlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 rlMaxResults :: Lens' RoutesList Word32
 rlMaxResults
   = lens _rlMaxResults (\ s a -> s{_rlMaxResults = a})
@@ -124,7 +136,11 @@
 
 instance GoogleRequest RoutesList where
         type Rs RoutesList = RouteList
-        requestClient RoutesList{..}
+        type Scopes RoutesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient RoutesList'{..}
           = go _rlProject _rlFilter _rlPageToken
               (Just _rlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/SSLCertificates/Delete.hs b/gen/Network/Google/Resource/Compute/SSLCertificates/Delete.hs
--- a/gen/Network/Google/Resource/Compute/SSLCertificates/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/SSLCertificates/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.SSLCertificates.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified SslCertificate resource.
 --
 -- /See:/ 'sslCertificatesDelete' smart constructor.
-data SSLCertificatesDelete = SSLCertificatesDelete
+data SSLCertificatesDelete = SSLCertificatesDelete'
     { _scdProject        :: !Text
     , _scdSSLCertificate :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'scdSSLCertificate'
     -> SSLCertificatesDelete
 sslCertificatesDelete pScdProject_ pScdSSLCertificate_ =
-    SSLCertificatesDelete
+    SSLCertificatesDelete'
     { _scdProject = pScdProject_
     , _scdSSLCertificate = pScdSSLCertificate_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 scdProject :: Lens' SSLCertificatesDelete Text
 scdProject
   = lens _scdProject (\ s a -> s{_scdProject = a})
@@ -90,7 +90,10 @@
 
 instance GoogleRequest SSLCertificatesDelete where
         type Rs SSLCertificatesDelete = Operation
-        requestClient SSLCertificatesDelete{..}
+        type Scopes SSLCertificatesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient SSLCertificatesDelete'{..}
           = go _scdProject _scdSSLCertificate (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/SSLCertificates/Get.hs b/gen/Network/Google/Resource/Compute/SSLCertificates/Get.hs
--- a/gen/Network/Google/Resource/Compute/SSLCertificates/Get.hs
+++ b/gen/Network/Google/Resource/Compute/SSLCertificates/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.SSLCertificates.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified SslCertificate resource.
+-- Returns the specified SslCertificate resource. Get a list of available
+-- SSL certificates by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.sslCertificates.get@.
 module Network.Google.Resource.Compute.SSLCertificates.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] SSLCertificate
 
--- | Returns the specified SslCertificate resource.
+-- | Returns the specified SslCertificate resource. Get a list of available
+-- SSL certificates by making a list() request.
 --
 -- /See:/ 'sslCertificatesGet' smart constructor.
-data SSLCertificatesGet = SSLCertificatesGet
+data SSLCertificatesGet = SSLCertificatesGet'
     { _scgProject        :: !Text
     , _scgSSLCertificate :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'scgSSLCertificate'
     -> SSLCertificatesGet
 sslCertificatesGet pScgProject_ pScgSSLCertificate_ =
-    SSLCertificatesGet
+    SSLCertificatesGet'
     { _scgProject = pScgProject_
     , _scgSSLCertificate = pScgSSLCertificate_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 scgProject :: Lens' SSLCertificatesGet Text
 scgProject
   = lens _scgProject (\ s a -> s{_scgProject = a})
@@ -91,7 +93,11 @@
 
 instance GoogleRequest SSLCertificatesGet where
         type Rs SSLCertificatesGet = SSLCertificate
-        requestClient SSLCertificatesGet{..}
+        type Scopes SSLCertificatesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SSLCertificatesGet'{..}
           = go _scgProject _scgSSLCertificate (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/SSLCertificates/Insert.hs b/gen/Network/Google/Resource/Compute/SSLCertificates/Insert.hs
--- a/gen/Network/Google/Resource/Compute/SSLCertificates/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/SSLCertificates/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.SSLCertificates.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- data included in the request.
 --
 -- /See:/ 'sslCertificatesInsert' smart constructor.
-data SSLCertificatesInsert = SSLCertificatesInsert
+data SSLCertificatesInsert = SSLCertificatesInsert'
     { _sciProject :: !Text
     , _sciPayload :: !SSLCertificate
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +75,12 @@
     -> SSLCertificate -- ^ 'sciPayload'
     -> SSLCertificatesInsert
 sslCertificatesInsert pSciProject_ pSciPayload_ =
-    SSLCertificatesInsert
+    SSLCertificatesInsert'
     { _sciProject = pSciProject_
     , _sciPayload = pSciPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 sciProject :: Lens' SSLCertificatesInsert Text
 sciProject
   = lens _sciProject (\ s a -> s{_sciProject = a})
@@ -92,7 +92,10 @@
 
 instance GoogleRequest SSLCertificatesInsert where
         type Rs SSLCertificatesInsert = Operation
-        requestClient SSLCertificatesInsert{..}
+        type Scopes SSLCertificatesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient SSLCertificatesInsert'{..}
           = go _sciProject (Just AltJSON) _sciPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/SSLCertificates/List.hs b/gen/Network/Google/Resource/Compute/SSLCertificates/List.hs
--- a/gen/Network/Google/Resource/Compute/SSLCertificates/List.hs
+++ b/gen/Network/Google/Resource/Compute/SSLCertificates/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.SSLCertificates.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project.
 --
 -- /See:/ 'sslCertificatesList' smart constructor.
-data SSLCertificatesList = SSLCertificatesList
+data SSLCertificatesList = SSLCertificatesList'
     { _sclProject    :: !Text
     , _sclFilter     :: !(Maybe Text)
     , _sclPageToken  :: !(Maybe Text)
@@ -84,41 +84,53 @@
     :: Text -- ^ 'sclProject'
     -> SSLCertificatesList
 sslCertificatesList pSclProject_ =
-    SSLCertificatesList
+    SSLCertificatesList'
     { _sclProject = pSclProject_
     , _sclFilter = Nothing
     , _sclPageToken = Nothing
     , _sclMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 sclProject :: Lens' SSLCertificatesList Text
 sclProject
   = lens _sclProject (\ s a -> s{_sclProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 sclFilter :: Lens' SSLCertificatesList (Maybe Text)
 sclFilter
   = lens _sclFilter (\ s a -> s{_sclFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 sclPageToken :: Lens' SSLCertificatesList (Maybe Text)
 sclPageToken
   = lens _sclPageToken (\ s a -> s{_sclPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 sclMaxResults :: Lens' SSLCertificatesList Word32
 sclMaxResults
   = lens _sclMaxResults
@@ -127,7 +139,11 @@
 
 instance GoogleRequest SSLCertificatesList where
         type Rs SSLCertificatesList = SSLCertificateList
-        requestClient SSLCertificatesList{..}
+        type Scopes SSLCertificatesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SSLCertificatesList'{..}
           = go _sclProject _sclFilter _sclPageToken
               (Just _sclMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Snapshots/Delete.hs b/gen/Network/Google/Resource/Compute/Snapshots/Delete.hs
--- a/gen/Network/Google/Resource/Compute/Snapshots/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/Snapshots/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Snapshots.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -37,8 +37,8 @@
     , SnapshotsDelete
 
     -- * Request Lenses
-    , sdSnapshot
-    , sdProject
+    , snaSnapshot
+    , snaProject
     ) where
 
 import           Network.Google.Compute.Types
@@ -63,42 +63,45 @@
 -- corresponding snapshot. For more information, see Deleting snaphots.
 --
 -- /See:/ 'snapshotsDelete' smart constructor.
-data SnapshotsDelete = SnapshotsDelete
-    { _sdSnapshot :: !Text
-    , _sdProject  :: !Text
+data SnapshotsDelete = SnapshotsDelete'
+    { _snaSnapshot :: !Text
+    , _snaProject  :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'SnapshotsDelete' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sdSnapshot'
+-- * 'snaSnapshot'
 --
--- * 'sdProject'
+-- * 'snaProject'
 snapshotsDelete
-    :: Text -- ^ 'sdSnapshot'
-    -> Text -- ^ 'sdProject'
+    :: Text -- ^ 'snaSnapshot'
+    -> Text -- ^ 'snaProject'
     -> SnapshotsDelete
-snapshotsDelete pSdSnapshot_ pSdProject_ =
-    SnapshotsDelete
-    { _sdSnapshot = pSdSnapshot_
-    , _sdProject = pSdProject_
+snapshotsDelete pSnaSnapshot_ pSnaProject_ =
+    SnapshotsDelete'
+    { _snaSnapshot = pSnaSnapshot_
+    , _snaProject = pSnaProject_
     }
 
 -- | Name of the Snapshot resource to delete.
-sdSnapshot :: Lens' SnapshotsDelete Text
-sdSnapshot
-  = lens _sdSnapshot (\ s a -> s{_sdSnapshot = a})
+snaSnapshot :: Lens' SnapshotsDelete Text
+snaSnapshot
+  = lens _snaSnapshot (\ s a -> s{_snaSnapshot = a})
 
--- | Name of the project scoping this request.
-sdProject :: Lens' SnapshotsDelete Text
-sdProject
-  = lens _sdProject (\ s a -> s{_sdProject = a})
+-- | Project ID for this request.
+snaProject :: Lens' SnapshotsDelete Text
+snaProject
+  = lens _snaProject (\ s a -> s{_snaProject = a})
 
 instance GoogleRequest SnapshotsDelete where
         type Rs SnapshotsDelete = Operation
-        requestClient SnapshotsDelete{..}
-          = go _sdProject _sdSnapshot (Just AltJSON)
+        type Scopes SnapshotsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient SnapshotsDelete'{..}
+          = go _snaProject _snaSnapshot (Just AltJSON)
               computeService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Compute/Snapshots/Get.hs b/gen/Network/Google/Resource/Compute/Snapshots/Get.hs
--- a/gen/Network/Google/Resource/Compute/Snapshots/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Snapshots/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Snapshots.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified Snapshot resource.
+-- Returns the specified Snapshot resource. Get a list of available
+-- snapshots by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.snapshots.get@.
 module Network.Google.Resource.Compute.Snapshots.Get
@@ -33,8 +34,8 @@
     , SnapshotsGet
 
     -- * Request Lenses
-    , sgSnapshot
-    , sgProject
+    , sggSnapshot
+    , sggProject
     ) where
 
 import           Network.Google.Compute.Types
@@ -52,45 +53,50 @@
                  Capture "snapshot" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] Snapshot
 
--- | Returns the specified Snapshot resource.
+-- | Returns the specified Snapshot resource. Get a list of available
+-- snapshots by making a list() request.
 --
 -- /See:/ 'snapshotsGet' smart constructor.
-data SnapshotsGet = SnapshotsGet
-    { _sgSnapshot :: !Text
-    , _sgProject  :: !Text
+data SnapshotsGet = SnapshotsGet'
+    { _sggSnapshot :: !Text
+    , _sggProject  :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'SnapshotsGet' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sgSnapshot'
+-- * 'sggSnapshot'
 --
--- * 'sgProject'
+-- * 'sggProject'
 snapshotsGet
-    :: Text -- ^ 'sgSnapshot'
-    -> Text -- ^ 'sgProject'
+    :: Text -- ^ 'sggSnapshot'
+    -> Text -- ^ 'sggProject'
     -> SnapshotsGet
-snapshotsGet pSgSnapshot_ pSgProject_ =
-    SnapshotsGet
-    { _sgSnapshot = pSgSnapshot_
-    , _sgProject = pSgProject_
+snapshotsGet pSggSnapshot_ pSggProject_ =
+    SnapshotsGet'
+    { _sggSnapshot = pSggSnapshot_
+    , _sggProject = pSggProject_
     }
 
 -- | Name of the Snapshot resource to return.
-sgSnapshot :: Lens' SnapshotsGet Text
-sgSnapshot
-  = lens _sgSnapshot (\ s a -> s{_sgSnapshot = a})
+sggSnapshot :: Lens' SnapshotsGet Text
+sggSnapshot
+  = lens _sggSnapshot (\ s a -> s{_sggSnapshot = a})
 
--- | Name of the project scoping this request.
-sgProject :: Lens' SnapshotsGet Text
-sgProject
-  = lens _sgProject (\ s a -> s{_sgProject = a})
+-- | Project ID for this request.
+sggProject :: Lens' SnapshotsGet Text
+sggProject
+  = lens _sggProject (\ s a -> s{_sggProject = a})
 
 instance GoogleRequest SnapshotsGet where
         type Rs SnapshotsGet = Snapshot
-        requestClient SnapshotsGet{..}
-          = go _sgProject _sgSnapshot (Just AltJSON)
+        type Scopes SnapshotsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SnapshotsGet'{..}
+          = go _sggProject _sggSnapshot (Just AltJSON)
               computeService
           where go
                   = buildClient (Proxy :: Proxy SnapshotsGetResource)
diff --git a/gen/Network/Google/Resource/Compute/Snapshots/List.hs b/gen/Network/Google/Resource/Compute/Snapshots/List.hs
--- a/gen/Network/Google/Resource/Compute/Snapshots/List.hs
+++ b/gen/Network/Google/Resource/Compute/Snapshots/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Snapshots.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -34,10 +34,10 @@
     , SnapshotsList
 
     -- * Request Lenses
-    , slProject
-    , slFilter
-    , slPageToken
-    , slMaxResults
+    , sProject
+    , sFilter
+    , sPageToken
+    , sMaxResults
     ) where
 
 import           Network.Google.Compute.Types
@@ -61,72 +61,87 @@
 -- project.
 --
 -- /See:/ 'snapshotsList' smart constructor.
-data SnapshotsList = SnapshotsList
-    { _slProject    :: !Text
-    , _slFilter     :: !(Maybe Text)
-    , _slPageToken  :: !(Maybe Text)
-    , _slMaxResults :: !(Textual Word32)
+data SnapshotsList = SnapshotsList'
+    { _sProject    :: !Text
+    , _sFilter     :: !(Maybe Text)
+    , _sPageToken  :: !(Maybe Text)
+    , _sMaxResults :: !(Textual Word32)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'SnapshotsList' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'slProject'
+-- * 'sProject'
 --
--- * 'slFilter'
+-- * 'sFilter'
 --
--- * 'slPageToken'
+-- * 'sPageToken'
 --
--- * 'slMaxResults'
+-- * 'sMaxResults'
 snapshotsList
-    :: Text -- ^ 'slProject'
+    :: Text -- ^ 'sProject'
     -> SnapshotsList
-snapshotsList pSlProject_ =
-    SnapshotsList
-    { _slProject = pSlProject_
-    , _slFilter = Nothing
-    , _slPageToken = Nothing
-    , _slMaxResults = 500
+snapshotsList pSProject_ =
+    SnapshotsList'
+    { _sProject = pSProject_
+    , _sFilter = Nothing
+    , _sPageToken = Nothing
+    , _sMaxResults = 500
     }
 
--- | Name of the project scoping this request.
-slProject :: Lens' SnapshotsList Text
-slProject
-  = lens _slProject (\ s a -> s{_slProject = a})
+-- | Project ID for this request.
+sProject :: Lens' SnapshotsList Text
+sProject = lens _sProject (\ s a -> s{_sProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
-slFilter :: Lens' SnapshotsList (Maybe Text)
-slFilter = lens _slFilter (\ s a -> s{_slFilter = a})
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
+sFilter :: Lens' SnapshotsList (Maybe Text)
+sFilter = lens _sFilter (\ s a -> s{_sFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
-slPageToken :: Lens' SnapshotsList (Maybe Text)
-slPageToken
-  = lens _slPageToken (\ s a -> s{_slPageToken = a})
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
+sPageToken :: Lens' SnapshotsList (Maybe Text)
+sPageToken
+  = lens _sPageToken (\ s a -> s{_sPageToken = a})
 
--- | Maximum count of results to be returned.
-slMaxResults :: Lens' SnapshotsList Word32
-slMaxResults
-  = lens _slMaxResults (\ s a -> s{_slMaxResults = a})
-      . _Coerce
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
+sMaxResults :: Lens' SnapshotsList Word32
+sMaxResults
+  = lens _sMaxResults (\ s a -> s{_sMaxResults = a}) .
+      _Coerce
 
 instance GoogleRequest SnapshotsList where
         type Rs SnapshotsList = SnapshotList
-        requestClient SnapshotsList{..}
-          = go _slProject _slFilter _slPageToken
-              (Just _slMaxResults)
+        type Scopes SnapshotsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SnapshotsList'{..}
+          = go _sProject _sFilter _sPageToken
+              (Just _sMaxResults)
               (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/Subnetworks/AggregatedList.hs b/gen/Network/Google/Resource/Compute/Subnetworks/AggregatedList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Subnetworks/AggregatedList.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Compute.Subnetworks.AggregatedList
+-- 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)
+--
+-- Retrieves an aggregated list of subnetworks.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.subnetworks.aggregatedList@.
+module Network.Google.Resource.Compute.Subnetworks.AggregatedList
+    (
+    -- * REST Resource
+      SubnetworksAggregatedListResource
+
+    -- * Creating a Request
+    , subnetworksAggregatedList
+    , SubnetworksAggregatedList
+
+    -- * Request Lenses
+    , salProject
+    , salFilter
+    , salPageToken
+    , salMaxResults
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.subnetworks.aggregatedList@ method which the
+-- 'SubnetworksAggregatedList' request conforms to.
+type SubnetworksAggregatedListResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "aggregated" :>
+               "subnetworks" :>
+                 QueryParam "filter" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] SubnetworkAggregatedList
+
+-- | Retrieves an aggregated list of subnetworks.
+--
+-- /See:/ 'subnetworksAggregatedList' smart constructor.
+data SubnetworksAggregatedList = SubnetworksAggregatedList'
+    { _salProject    :: !Text
+    , _salFilter     :: !(Maybe Text)
+    , _salPageToken  :: !(Maybe Text)
+    , _salMaxResults :: !(Textual Word32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksAggregatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'salProject'
+--
+-- * 'salFilter'
+--
+-- * 'salPageToken'
+--
+-- * 'salMaxResults'
+subnetworksAggregatedList
+    :: Text -- ^ 'salProject'
+    -> SubnetworksAggregatedList
+subnetworksAggregatedList pSalProject_ =
+    SubnetworksAggregatedList'
+    { _salProject = pSalProject_
+    , _salFilter = Nothing
+    , _salPageToken = Nothing
+    , _salMaxResults = 500
+    }
+
+-- | Project ID for this request.
+salProject :: Lens' SubnetworksAggregatedList Text
+salProject
+  = lens _salProject (\ s a -> s{_salProject = a})
+
+-- | Sets a filter expression for filtering listed resources, in the form
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
+-- field you want to compare. Only atomic field types are supported
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
+salFilter :: Lens' SubnetworksAggregatedList (Maybe Text)
+salFilter
+  = lens _salFilter (\ s a -> s{_salFilter = a})
+
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
+salPageToken :: Lens' SubnetworksAggregatedList (Maybe Text)
+salPageToken
+  = lens _salPageToken (\ s a -> s{_salPageToken = a})
+
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
+salMaxResults :: Lens' SubnetworksAggregatedList Word32
+salMaxResults
+  = lens _salMaxResults
+      (\ s a -> s{_salMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest SubnetworksAggregatedList
+         where
+        type Rs SubnetworksAggregatedList =
+             SubnetworkAggregatedList
+        type Scopes SubnetworksAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SubnetworksAggregatedList'{..}
+          = go _salProject _salFilter _salPageToken
+              (Just _salMaxResults)
+              (Just AltJSON)
+              computeService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SubnetworksAggregatedListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Subnetworks/Delete.hs b/gen/Network/Google/Resource/Compute/Subnetworks/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Subnetworks/Delete.hs
@@ -0,0 +1,113 @@
+{-# 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.Compute.Subnetworks.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 the specified subnetwork.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.subnetworks.delete@.
+module Network.Google.Resource.Compute.Subnetworks.Delete
+    (
+    -- * REST Resource
+      SubnetworksDeleteResource
+
+    -- * Creating a Request
+    , subnetworksDelete
+    , SubnetworksDelete
+
+    -- * Request Lenses
+    , sdProject
+    , sdSubnetwork
+    , sdRegion
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.subnetworks.delete@ method which the
+-- 'SubnetworksDelete' request conforms to.
+type SubnetworksDeleteResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "regions" :>
+               Capture "region" Text :>
+                 "subnetworks" :>
+                   Capture "subnetwork" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] Operation
+
+-- | Deletes the specified subnetwork.
+--
+-- /See:/ 'subnetworksDelete' smart constructor.
+data SubnetworksDelete = SubnetworksDelete'
+    { _sdProject    :: !Text
+    , _sdSubnetwork :: !Text
+    , _sdRegion     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdProject'
+--
+-- * 'sdSubnetwork'
+--
+-- * 'sdRegion'
+subnetworksDelete
+    :: Text -- ^ 'sdProject'
+    -> Text -- ^ 'sdSubnetwork'
+    -> Text -- ^ 'sdRegion'
+    -> SubnetworksDelete
+subnetworksDelete pSdProject_ pSdSubnetwork_ pSdRegion_ =
+    SubnetworksDelete'
+    { _sdProject = pSdProject_
+    , _sdSubnetwork = pSdSubnetwork_
+    , _sdRegion = pSdRegion_
+    }
+
+-- | Project ID for this request.
+sdProject :: Lens' SubnetworksDelete Text
+sdProject
+  = lens _sdProject (\ s a -> s{_sdProject = a})
+
+-- | Name of the Subnetwork resource to delete.
+sdSubnetwork :: Lens' SubnetworksDelete Text
+sdSubnetwork
+  = lens _sdSubnetwork (\ s a -> s{_sdSubnetwork = a})
+
+-- | Name of the region scoping this request.
+sdRegion :: Lens' SubnetworksDelete Text
+sdRegion = lens _sdRegion (\ s a -> s{_sdRegion = a})
+
+instance GoogleRequest SubnetworksDelete where
+        type Rs SubnetworksDelete = Operation
+        type Scopes SubnetworksDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient SubnetworksDelete'{..}
+          = go _sdProject _sdRegion _sdSubnetwork
+              (Just AltJSON)
+              computeService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SubnetworksDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Subnetworks/Get.hs b/gen/Network/Google/Resource/Compute/Subnetworks/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Subnetworks/Get.hs
@@ -0,0 +1,115 @@
+{-# 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.Compute.Subnetworks.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 the specified subnetwork. Get a list of available subnetworks
+-- list() request.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.subnetworks.get@.
+module Network.Google.Resource.Compute.Subnetworks.Get
+    (
+    -- * REST Resource
+      SubnetworksGetResource
+
+    -- * Creating a Request
+    , subnetworksGet
+    , SubnetworksGet
+
+    -- * Request Lenses
+    , sgProject
+    , sgSubnetwork
+    , sgRegion
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.subnetworks.get@ method which the
+-- 'SubnetworksGet' request conforms to.
+type SubnetworksGetResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "regions" :>
+               Capture "region" Text :>
+                 "subnetworks" :>
+                   Capture "subnetwork" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Subnetwork
+
+-- | Returns the specified subnetwork. Get a list of available subnetworks
+-- list() request.
+--
+-- /See:/ 'subnetworksGet' smart constructor.
+data SubnetworksGet = SubnetworksGet'
+    { _sgProject    :: !Text
+    , _sgSubnetwork :: !Text
+    , _sgRegion     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgProject'
+--
+-- * 'sgSubnetwork'
+--
+-- * 'sgRegion'
+subnetworksGet
+    :: Text -- ^ 'sgProject'
+    -> Text -- ^ 'sgSubnetwork'
+    -> Text -- ^ 'sgRegion'
+    -> SubnetworksGet
+subnetworksGet pSgProject_ pSgSubnetwork_ pSgRegion_ =
+    SubnetworksGet'
+    { _sgProject = pSgProject_
+    , _sgSubnetwork = pSgSubnetwork_
+    , _sgRegion = pSgRegion_
+    }
+
+-- | Project ID for this request.
+sgProject :: Lens' SubnetworksGet Text
+sgProject
+  = lens _sgProject (\ s a -> s{_sgProject = a})
+
+-- | Name of the Subnetwork resource to return.
+sgSubnetwork :: Lens' SubnetworksGet Text
+sgSubnetwork
+  = lens _sgSubnetwork (\ s a -> s{_sgSubnetwork = a})
+
+-- | Name of the region scoping this request.
+sgRegion :: Lens' SubnetworksGet Text
+sgRegion = lens _sgRegion (\ s a -> s{_sgRegion = a})
+
+instance GoogleRequest SubnetworksGet where
+        type Rs SubnetworksGet = Subnetwork
+        type Scopes SubnetworksGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SubnetworksGet'{..}
+          = go _sgProject _sgRegion _sgSubnetwork
+              (Just AltJSON)
+              computeService
+          where go
+                  = buildClient (Proxy :: Proxy SubnetworksGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Subnetworks/Insert.hs b/gen/Network/Google/Resource/Compute/Subnetworks/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Subnetworks/Insert.hs
@@ -0,0 +1,114 @@
+{-# 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.Compute.Subnetworks.Insert
+-- 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 subnetwork in the specified project using the data included in
+-- the request.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.subnetworks.insert@.
+module Network.Google.Resource.Compute.Subnetworks.Insert
+    (
+    -- * REST Resource
+      SubnetworksInsertResource
+
+    -- * Creating a Request
+    , subnetworksInsert
+    , SubnetworksInsert
+
+    -- * Request Lenses
+    , siProject
+    , siPayload
+    , siRegion
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.subnetworks.insert@ method which the
+-- 'SubnetworksInsert' request conforms to.
+type SubnetworksInsertResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "regions" :>
+               Capture "region" Text :>
+                 "subnetworks" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Subnetwork :> Post '[JSON] Operation
+
+-- | Creates a subnetwork in the specified project using the data included in
+-- the request.
+--
+-- /See:/ 'subnetworksInsert' smart constructor.
+data SubnetworksInsert = SubnetworksInsert'
+    { _siProject :: !Text
+    , _siPayload :: !Subnetwork
+    , _siRegion  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siProject'
+--
+-- * 'siPayload'
+--
+-- * 'siRegion'
+subnetworksInsert
+    :: Text -- ^ 'siProject'
+    -> Subnetwork -- ^ 'siPayload'
+    -> Text -- ^ 'siRegion'
+    -> SubnetworksInsert
+subnetworksInsert pSiProject_ pSiPayload_ pSiRegion_ =
+    SubnetworksInsert'
+    { _siProject = pSiProject_
+    , _siPayload = pSiPayload_
+    , _siRegion = pSiRegion_
+    }
+
+-- | Project ID for this request.
+siProject :: Lens' SubnetworksInsert Text
+siProject
+  = lens _siProject (\ s a -> s{_siProject = a})
+
+-- | Multipart request metadata.
+siPayload :: Lens' SubnetworksInsert Subnetwork
+siPayload
+  = lens _siPayload (\ s a -> s{_siPayload = a})
+
+-- | Name of the region scoping this request.
+siRegion :: Lens' SubnetworksInsert Text
+siRegion = lens _siRegion (\ s a -> s{_siRegion = a})
+
+instance GoogleRequest SubnetworksInsert where
+        type Rs SubnetworksInsert = Operation
+        type Scopes SubnetworksInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient SubnetworksInsert'{..}
+          = go _siProject _siRegion (Just AltJSON) _siPayload
+              computeService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SubnetworksInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/Subnetworks/List.hs b/gen/Network/Google/Resource/Compute/Subnetworks/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Compute/Subnetworks/List.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Compute.Subnetworks.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)
+--
+-- Retrieves a list of subnetworks available to the specified project.
+--
+-- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.subnetworks.list@.
+module Network.Google.Resource.Compute.Subnetworks.List
+    (
+    -- * REST Resource
+      SubnetworksListResource
+
+    -- * Creating a Request
+    , subnetworksList
+    , SubnetworksList
+
+    -- * Request Lenses
+    , slProject
+    , slFilter
+    , slRegion
+    , slPageToken
+    , slMaxResults
+    ) where
+
+import           Network.Google.Compute.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @compute.subnetworks.list@ method which the
+-- 'SubnetworksList' request conforms to.
+type SubnetworksListResource =
+     "compute" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "regions" :>
+               Capture "region" Text :>
+                 "subnetworks" :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] SubnetworkList
+
+-- | Retrieves a list of subnetworks available to the specified project.
+--
+-- /See:/ 'subnetworksList' smart constructor.
+data SubnetworksList = SubnetworksList'
+    { _slProject    :: !Text
+    , _slFilter     :: !(Maybe Text)
+    , _slRegion     :: !Text
+    , _slPageToken  :: !(Maybe Text)
+    , _slMaxResults :: !(Textual Word32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubnetworksList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slProject'
+--
+-- * 'slFilter'
+--
+-- * 'slRegion'
+--
+-- * 'slPageToken'
+--
+-- * 'slMaxResults'
+subnetworksList
+    :: Text -- ^ 'slProject'
+    -> Text -- ^ 'slRegion'
+    -> SubnetworksList
+subnetworksList pSlProject_ pSlRegion_ =
+    SubnetworksList'
+    { _slProject = pSlProject_
+    , _slFilter = Nothing
+    , _slRegion = pSlRegion_
+    , _slPageToken = Nothing
+    , _slMaxResults = 500
+    }
+
+-- | Project ID for this request.
+slProject :: Lens' SubnetworksList Text
+slProject
+  = lens _slProject (\ s a -> s{_slProject = a})
+
+-- | Sets a filter expression for filtering listed resources, in the form
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
+-- field you want to compare. Only atomic field types are supported
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
+slFilter :: Lens' SubnetworksList (Maybe Text)
+slFilter = lens _slFilter (\ s a -> s{_slFilter = a})
+
+-- | Name of the region scoping this request.
+slRegion :: Lens' SubnetworksList Text
+slRegion = lens _slRegion (\ s a -> s{_slRegion = a})
+
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
+slPageToken :: Lens' SubnetworksList (Maybe Text)
+slPageToken
+  = lens _slPageToken (\ s a -> s{_slPageToken = a})
+
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
+slMaxResults :: Lens' SubnetworksList Word32
+slMaxResults
+  = lens _slMaxResults (\ s a -> s{_slMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest SubnetworksList where
+        type Rs SubnetworksList = SubnetworkList
+        type Scopes SubnetworksList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient SubnetworksList'{..}
+          = go _slProject _slRegion _slFilter _slPageToken
+              (Just _slMaxResults)
+              (Just AltJSON)
+              computeService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SubnetworksListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Delete.hs b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Delete.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPProxies.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified TargetHttpProxy resource.
 --
 -- /See:/ 'targetHTTPProxiesDelete' smart constructor.
-data TargetHTTPProxiesDelete = TargetHTTPProxiesDelete
+data TargetHTTPProxiesDelete = TargetHTTPProxiesDelete'
     { _thttppdProject         :: !Text
     , _thttppdTargetHTTPProxy :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'thttppdTargetHTTPProxy'
     -> TargetHTTPProxiesDelete
 targetHTTPProxiesDelete pThttppdProject_ pThttppdTargetHTTPProxy_ =
-    TargetHTTPProxiesDelete
+    TargetHTTPProxiesDelete'
     { _thttppdProject = pThttppdProject_
     , _thttppdTargetHTTPProxy = pThttppdTargetHTTPProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thttppdProject :: Lens' TargetHTTPProxiesDelete Text
 thttppdProject
   = lens _thttppdProject
@@ -91,7 +91,10 @@
 
 instance GoogleRequest TargetHTTPProxiesDelete where
         type Rs TargetHTTPProxiesDelete = Operation
-        requestClient TargetHTTPProxiesDelete{..}
+        type Scopes TargetHTTPProxiesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetHTTPProxiesDelete'{..}
           = go _thttppdProject _thttppdTargetHTTPProxy
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Get.hs b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Get.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Get.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPProxies.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified TargetHttpProxy resource.
+-- Returns the specified TargetHttpProxy resource. Get a list of available
+-- target HTTP proxies by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetHttpProxies.get@.
 module Network.Google.Resource.Compute.TargetHTTPProxies.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] TargetHTTPProxy
 
--- | Returns the specified TargetHttpProxy resource.
+-- | Returns the specified TargetHttpProxy resource. Get a list of available
+-- target HTTP proxies by making a list() request.
 --
 -- /See:/ 'targetHTTPProxiesGet' smart constructor.
-data TargetHTTPProxiesGet = TargetHTTPProxiesGet
+data TargetHTTPProxiesGet = TargetHTTPProxiesGet'
     { _thttppgProject         :: !Text
     , _thttppgTargetHTTPProxy :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'thttppgTargetHTTPProxy'
     -> TargetHTTPProxiesGet
 targetHTTPProxiesGet pThttppgProject_ pThttppgTargetHTTPProxy_ =
-    TargetHTTPProxiesGet
+    TargetHTTPProxiesGet'
     { _thttppgProject = pThttppgProject_
     , _thttppgTargetHTTPProxy = pThttppgTargetHTTPProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thttppgProject :: Lens' TargetHTTPProxiesGet Text
 thttppgProject
   = lens _thttppgProject
@@ -92,7 +94,11 @@
 
 instance GoogleRequest TargetHTTPProxiesGet where
         type Rs TargetHTTPProxiesGet = TargetHTTPProxy
-        requestClient TargetHTTPProxiesGet{..}
+        type Scopes TargetHTTPProxiesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetHTTPProxiesGet'{..}
           = go _thttppgProject _thttppgTargetHTTPProxy
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Insert.hs b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Insert.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPProxies.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- data included in the request.
 --
 -- /See:/ 'targetHTTPProxiesInsert' smart constructor.
-data TargetHTTPProxiesInsert = TargetHTTPProxiesInsert
+data TargetHTTPProxiesInsert = TargetHTTPProxiesInsert'
     { _thttppiProject :: !Text
     , _thttppiPayload :: !TargetHTTPProxy
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +75,12 @@
     -> TargetHTTPProxy -- ^ 'thttppiPayload'
     -> TargetHTTPProxiesInsert
 targetHTTPProxiesInsert pThttppiProject_ pThttppiPayload_ =
-    TargetHTTPProxiesInsert
+    TargetHTTPProxiesInsert'
     { _thttppiProject = pThttppiProject_
     , _thttppiPayload = pThttppiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thttppiProject :: Lens' TargetHTTPProxiesInsert Text
 thttppiProject
   = lens _thttppiProject
@@ -94,7 +94,10 @@
 
 instance GoogleRequest TargetHTTPProxiesInsert where
         type Rs TargetHTTPProxiesInsert = Operation
-        requestClient TargetHTTPProxiesInsert{..}
+        type Scopes TargetHTTPProxiesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetHTTPProxiesInsert'{..}
           = go _thttppiProject (Just AltJSON) _thttppiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/List.hs b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/List.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/List.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPProxies.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project.
 --
 -- /See:/ 'targetHTTPProxiesList' smart constructor.
-data TargetHTTPProxiesList = TargetHTTPProxiesList
+data TargetHTTPProxiesList = TargetHTTPProxiesList'
     { _thttpplProject    :: !Text
     , _thttpplFilter     :: !(Maybe Text)
     , _thttpplPageToken  :: !(Maybe Text)
@@ -84,44 +84,56 @@
     :: Text -- ^ 'thttpplProject'
     -> TargetHTTPProxiesList
 targetHTTPProxiesList pThttpplProject_ =
-    TargetHTTPProxiesList
+    TargetHTTPProxiesList'
     { _thttpplProject = pThttpplProject_
     , _thttpplFilter = Nothing
     , _thttpplPageToken = Nothing
     , _thttpplMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thttpplProject :: Lens' TargetHTTPProxiesList Text
 thttpplProject
   = lens _thttpplProject
       (\ s a -> s{_thttpplProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 thttpplFilter :: Lens' TargetHTTPProxiesList (Maybe Text)
 thttpplFilter
   = lens _thttpplFilter
       (\ s a -> s{_thttpplFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 thttpplPageToken :: Lens' TargetHTTPProxiesList (Maybe Text)
 thttpplPageToken
   = lens _thttpplPageToken
       (\ s a -> s{_thttpplPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 thttpplMaxResults :: Lens' TargetHTTPProxiesList Word32
 thttpplMaxResults
   = lens _thttpplMaxResults
@@ -130,7 +142,11 @@
 
 instance GoogleRequest TargetHTTPProxiesList where
         type Rs TargetHTTPProxiesList = TargetHTTPProxyList
-        requestClient TargetHTTPProxiesList{..}
+        type Scopes TargetHTTPProxiesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetHTTPProxiesList'{..}
           = go _thttpplProject _thttpplFilter _thttpplPageToken
               (Just _thttpplMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/SetURLMap.hs b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/SetURLMap.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPProxies/SetURLMap.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPProxies/SetURLMap.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPProxies.SetURLMap
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Changes the URL map for TargetHttpProxy.
 --
 -- /See:/ 'targetHTTPProxiesSetURLMap' smart constructor.
-data TargetHTTPProxiesSetURLMap = TargetHTTPProxiesSetURLMap
+data TargetHTTPProxiesSetURLMap = TargetHTTPProxiesSetURLMap'
     { _thttppsumProject         :: !Text
     , _thttppsumPayload         :: !URLMapReference
     , _thttppsumTargetHTTPProxy :: !Text
@@ -79,13 +79,13 @@
     -> Text -- ^ 'thttppsumTargetHTTPProxy'
     -> TargetHTTPProxiesSetURLMap
 targetHTTPProxiesSetURLMap pThttppsumProject_ pThttppsumPayload_ pThttppsumTargetHTTPProxy_ =
-    TargetHTTPProxiesSetURLMap
+    TargetHTTPProxiesSetURLMap'
     { _thttppsumProject = pThttppsumProject_
     , _thttppsumPayload = pThttppsumPayload_
     , _thttppsumTargetHTTPProxy = pThttppsumTargetHTTPProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thttppsumProject :: Lens' TargetHTTPProxiesSetURLMap Text
 thttppsumProject
   = lens _thttppsumProject
@@ -97,7 +97,7 @@
   = lens _thttppsumPayload
       (\ s a -> s{_thttppsumPayload = a})
 
--- | Name of the TargetHttpProxy resource whose URL map is to be set.
+-- | Name of the TargetHttpProxy to set a URL map for.
 thttppsumTargetHTTPProxy :: Lens' TargetHTTPProxiesSetURLMap Text
 thttppsumTargetHTTPProxy
   = lens _thttppsumTargetHTTPProxy
@@ -106,7 +106,10 @@
 instance GoogleRequest TargetHTTPProxiesSetURLMap
          where
         type Rs TargetHTTPProxiesSetURLMap = Operation
-        requestClient TargetHTTPProxiesSetURLMap{..}
+        type Scopes TargetHTTPProxiesSetURLMap =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetHTTPProxiesSetURLMap'{..}
           = go _thttppsumProject _thttppsumTargetHTTPProxy
               (Just AltJSON)
               _thttppsumPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Delete.hs b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Delete.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPSProxies.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified TargetHttpsProxy resource.
 --
 -- /See:/ 'targetHTTPSProxiesDelete' smart constructor.
-data TargetHTTPSProxiesDelete = TargetHTTPSProxiesDelete
+data TargetHTTPSProxiesDelete = TargetHTTPSProxiesDelete'
     { _thpdProject          :: !Text
     , _thpdTargetHTTPSProxy :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,12 +72,12 @@
     -> Text -- ^ 'thpdTargetHTTPSProxy'
     -> TargetHTTPSProxiesDelete
 targetHTTPSProxiesDelete pThpdProject_ pThpdTargetHTTPSProxy_ =
-    TargetHTTPSProxiesDelete
+    TargetHTTPSProxiesDelete'
     { _thpdProject = pThpdProject_
     , _thpdTargetHTTPSProxy = pThpdTargetHTTPSProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thpdProject :: Lens' TargetHTTPSProxiesDelete Text
 thpdProject
   = lens _thpdProject (\ s a -> s{_thpdProject = a})
@@ -90,7 +90,10 @@
 
 instance GoogleRequest TargetHTTPSProxiesDelete where
         type Rs TargetHTTPSProxiesDelete = Operation
-        requestClient TargetHTTPSProxiesDelete{..}
+        type Scopes TargetHTTPSProxiesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetHTTPSProxiesDelete'{..}
           = go _thpdProject _thpdTargetHTTPSProxy
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Get.hs b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Get.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Get.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPSProxies.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified TargetHttpsProxy resource.
+-- Returns the specified TargetHttpsProxy resource. Get a list of available
+-- target HTTPS proxies by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetHttpsProxies.get@.
 module Network.Google.Resource.Compute.TargetHTTPSProxies.Get
@@ -53,10 +54,11 @@
                    QueryParam "alt" AltJSON :>
                      Get '[JSON] TargetHTTPSProxy
 
--- | Returns the specified TargetHttpsProxy resource.
+-- | Returns the specified TargetHttpsProxy resource. Get a list of available
+-- target HTTPS proxies by making a list() request.
 --
 -- /See:/ 'targetHTTPSProxiesGet' smart constructor.
-data TargetHTTPSProxiesGet = TargetHTTPSProxiesGet
+data TargetHTTPSProxiesGet = TargetHTTPSProxiesGet'
     { _thpgProject          :: !Text
     , _thpgTargetHTTPSProxy :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -73,12 +75,12 @@
     -> Text -- ^ 'thpgTargetHTTPSProxy'
     -> TargetHTTPSProxiesGet
 targetHTTPSProxiesGet pThpgProject_ pThpgTargetHTTPSProxy_ =
-    TargetHTTPSProxiesGet
+    TargetHTTPSProxiesGet'
     { _thpgProject = pThpgProject_
     , _thpgTargetHTTPSProxy = pThpgTargetHTTPSProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thpgProject :: Lens' TargetHTTPSProxiesGet Text
 thpgProject
   = lens _thpgProject (\ s a -> s{_thpgProject = a})
@@ -91,7 +93,11 @@
 
 instance GoogleRequest TargetHTTPSProxiesGet where
         type Rs TargetHTTPSProxiesGet = TargetHTTPSProxy
-        requestClient TargetHTTPSProxiesGet{..}
+        type Scopes TargetHTTPSProxiesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetHTTPSProxiesGet'{..}
           = go _thpgProject _thpgTargetHTTPSProxy
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Insert.hs b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Insert.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPSProxies.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- data included in the request.
 --
 -- /See:/ 'targetHTTPSProxiesInsert' smart constructor.
-data TargetHTTPSProxiesInsert = TargetHTTPSProxiesInsert
+data TargetHTTPSProxiesInsert = TargetHTTPSProxiesInsert'
     { _thpiProject :: !Text
     , _thpiPayload :: !TargetHTTPSProxy
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -75,12 +75,12 @@
     -> TargetHTTPSProxy -- ^ 'thpiPayload'
     -> TargetHTTPSProxiesInsert
 targetHTTPSProxiesInsert pThpiProject_ pThpiPayload_ =
-    TargetHTTPSProxiesInsert
+    TargetHTTPSProxiesInsert'
     { _thpiProject = pThpiProject_
     , _thpiPayload = pThpiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thpiProject :: Lens' TargetHTTPSProxiesInsert Text
 thpiProject
   = lens _thpiProject (\ s a -> s{_thpiProject = a})
@@ -92,7 +92,10 @@
 
 instance GoogleRequest TargetHTTPSProxiesInsert where
         type Rs TargetHTTPSProxiesInsert = Operation
-        requestClient TargetHTTPSProxiesInsert{..}
+        type Scopes TargetHTTPSProxiesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetHTTPSProxiesInsert'{..}
           = go _thpiProject (Just AltJSON) _thpiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/List.hs b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/List.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/List.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPSProxies.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 -- specified project.
 --
 -- /See:/ 'targetHTTPSProxiesList' smart constructor.
-data TargetHTTPSProxiesList = TargetHTTPSProxiesList
+data TargetHTTPSProxiesList = TargetHTTPSProxiesList'
     { _thplProject    :: !Text
     , _thplFilter     :: !(Maybe Text)
     , _thplPageToken  :: !(Maybe Text)
@@ -84,42 +84,54 @@
     :: Text -- ^ 'thplProject'
     -> TargetHTTPSProxiesList
 targetHTTPSProxiesList pThplProject_ =
-    TargetHTTPSProxiesList
+    TargetHTTPSProxiesList'
     { _thplProject = pThplProject_
     , _thplFilter = Nothing
     , _thplPageToken = Nothing
     , _thplMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thplProject :: Lens' TargetHTTPSProxiesList Text
 thplProject
   = lens _thplProject (\ s a -> s{_thplProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 thplFilter :: Lens' TargetHTTPSProxiesList (Maybe Text)
 thplFilter
   = lens _thplFilter (\ s a -> s{_thplFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 thplPageToken :: Lens' TargetHTTPSProxiesList (Maybe Text)
 thplPageToken
   = lens _thplPageToken
       (\ s a -> s{_thplPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 thplMaxResults :: Lens' TargetHTTPSProxiesList Word32
 thplMaxResults
   = lens _thplMaxResults
@@ -128,7 +140,11 @@
 
 instance GoogleRequest TargetHTTPSProxiesList where
         type Rs TargetHTTPSProxiesList = TargetHTTPSProxyList
-        requestClient TargetHTTPSProxiesList{..}
+        type Scopes TargetHTTPSProxiesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetHTTPSProxiesList'{..}
           = go _thplProject _thplFilter _thplPageToken
               (Just _thplMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetSSLCertificates.hs b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetSSLCertificates.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetSSLCertificates.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetSSLCertificates.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPSProxies.SetSSLCertificates
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- | Replaces SslCertificates for TargetHttpsProxy.
 --
 -- /See:/ 'targetHTTPSProxiesSetSSLCertificates' smart constructor.
-data TargetHTTPSProxiesSetSSLCertificates = TargetHTTPSProxiesSetSSLCertificates
+data TargetHTTPSProxiesSetSSLCertificates = TargetHTTPSProxiesSetSSLCertificates'
     { _thpsscProject          :: !Text
     , _thpsscPayload          :: !TargetHTTPSProxiesSetSSLCertificatesRequest
     , _thpsscTargetHTTPSProxy :: !Text
@@ -80,13 +80,13 @@
     -> Text -- ^ 'thpsscTargetHTTPSProxy'
     -> TargetHTTPSProxiesSetSSLCertificates
 targetHTTPSProxiesSetSSLCertificates pThpsscProject_ pThpsscPayload_ pThpsscTargetHTTPSProxy_ =
-    TargetHTTPSProxiesSetSSLCertificates
+    TargetHTTPSProxiesSetSSLCertificates'
     { _thpsscProject = pThpsscProject_
     , _thpsscPayload = pThpsscPayload_
     , _thpsscTargetHTTPSProxy = pThpsscTargetHTTPSProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thpsscProject :: Lens' TargetHTTPSProxiesSetSSLCertificates Text
 thpsscProject
   = lens _thpsscProject
@@ -98,7 +98,8 @@
   = lens _thpsscPayload
       (\ s a -> s{_thpsscPayload = a})
 
--- | Name of the TargetHttpsProxy resource whose URL map is to be set.
+-- | Name of the TargetHttpsProxy resource to set an SslCertificates resource
+-- for.
 thpsscTargetHTTPSProxy :: Lens' TargetHTTPSProxiesSetSSLCertificates Text
 thpsscTargetHTTPSProxy
   = lens _thpsscTargetHTTPSProxy
@@ -108,8 +109,11 @@
          TargetHTTPSProxiesSetSSLCertificates where
         type Rs TargetHTTPSProxiesSetSSLCertificates =
              Operation
+        type Scopes TargetHTTPSProxiesSetSSLCertificates =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
         requestClient
-          TargetHTTPSProxiesSetSSLCertificates{..}
+          TargetHTTPSProxiesSetSSLCertificates'{..}
           = go _thpsscProject _thpsscTargetHTTPSProxy
               (Just AltJSON)
               _thpsscPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetURLMap.hs b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetURLMap.hs
--- a/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetURLMap.hs
+++ b/gen/Network/Google/Resource/Compute/TargetHTTPSProxies/SetURLMap.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetHTTPSProxies.SetURLMap
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 -- | Changes the URL map for TargetHttpsProxy.
 --
 -- /See:/ 'targetHTTPSProxiesSetURLMap' smart constructor.
-data TargetHTTPSProxiesSetURLMap = TargetHTTPSProxiesSetURLMap
+data TargetHTTPSProxiesSetURLMap = TargetHTTPSProxiesSetURLMap'
     { _thpsumProject          :: !Text
     , _thpsumPayload          :: !URLMapReference
     , _thpsumTargetHTTPSProxy :: !Text
@@ -79,13 +79,13 @@
     -> Text -- ^ 'thpsumTargetHTTPSProxy'
     -> TargetHTTPSProxiesSetURLMap
 targetHTTPSProxiesSetURLMap pThpsumProject_ pThpsumPayload_ pThpsumTargetHTTPSProxy_ =
-    TargetHTTPSProxiesSetURLMap
+    TargetHTTPSProxiesSetURLMap'
     { _thpsumProject = pThpsumProject_
     , _thpsumPayload = pThpsumPayload_
     , _thpsumTargetHTTPSProxy = pThpsumTargetHTTPSProxy_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 thpsumProject :: Lens' TargetHTTPSProxiesSetURLMap Text
 thpsumProject
   = lens _thpsumProject
@@ -106,7 +106,10 @@
 instance GoogleRequest TargetHTTPSProxiesSetURLMap
          where
         type Rs TargetHTTPSProxiesSetURLMap = Operation
-        requestClient TargetHTTPSProxiesSetURLMap{..}
+        type Scopes TargetHTTPSProxiesSetURLMap =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetHTTPSProxiesSetURLMap'{..}
           = go _thpsumProject _thpsumTargetHTTPSProxy
               (Just AltJSON)
               _thpsumPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetInstances/AggregatedList.hs b/gen/Network/Google/Resource/Compute/TargetInstances/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/TargetInstances/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/TargetInstances/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetInstances.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of target instances grouped by scope.
+-- Retrieves an aggregated list of target instances.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetInstances.aggregatedList@.
 module Network.Google.Resource.Compute.TargetInstances.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] TargetInstanceAggregatedList
 
--- | Retrieves the list of target instances grouped by scope.
+-- | Retrieves an aggregated list of target instances.
 --
 -- /See:/ 'targetInstancesAggregatedList' smart constructor.
-data TargetInstancesAggregatedList = TargetInstancesAggregatedList
+data TargetInstancesAggregatedList = TargetInstancesAggregatedList'
     { _tialProject    :: !Text
     , _tialFilter     :: !(Maybe Text)
     , _tialPageToken  :: !(Maybe Text)
@@ -82,42 +82,54 @@
     :: Text -- ^ 'tialProject'
     -> TargetInstancesAggregatedList
 targetInstancesAggregatedList pTialProject_ =
-    TargetInstancesAggregatedList
+    TargetInstancesAggregatedList'
     { _tialProject = pTialProject_
     , _tialFilter = Nothing
     , _tialPageToken = Nothing
     , _tialMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tialProject :: Lens' TargetInstancesAggregatedList Text
 tialProject
   = lens _tialProject (\ s a -> s{_tialProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 tialFilter :: Lens' TargetInstancesAggregatedList (Maybe Text)
 tialFilter
   = lens _tialFilter (\ s a -> s{_tialFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 tialPageToken :: Lens' TargetInstancesAggregatedList (Maybe Text)
 tialPageToken
   = lens _tialPageToken
       (\ s a -> s{_tialPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 tialMaxResults :: Lens' TargetInstancesAggregatedList Word32
 tialMaxResults
   = lens _tialMaxResults
@@ -128,7 +140,11 @@
          where
         type Rs TargetInstancesAggregatedList =
              TargetInstanceAggregatedList
-        requestClient TargetInstancesAggregatedList{..}
+        type Scopes TargetInstancesAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetInstancesAggregatedList'{..}
           = go _tialProject _tialFilter _tialPageToken
               (Just _tialMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetInstances/Delete.hs b/gen/Network/Google/Resource/Compute/TargetInstances/Delete.hs
--- a/gen/Network/Google/Resource/Compute/TargetInstances/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/TargetInstances/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetInstances.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Deletes the specified TargetInstance resource.
 --
 -- /See:/ 'targetInstancesDelete' smart constructor.
-data TargetInstancesDelete = TargetInstancesDelete
+data TargetInstancesDelete = TargetInstancesDelete'
     { _tidProject        :: !Text
     , _tidTargetInstance :: !Text
     , _tidZone           :: !Text
@@ -78,13 +78,13 @@
     -> Text -- ^ 'tidZone'
     -> TargetInstancesDelete
 targetInstancesDelete pTidProject_ pTidTargetInstance_ pTidZone_ =
-    TargetInstancesDelete
+    TargetInstancesDelete'
     { _tidProject = pTidProject_
     , _tidTargetInstance = pTidTargetInstance_
     , _tidZone = pTidZone_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tidProject :: Lens' TargetInstancesDelete Text
 tidProject
   = lens _tidProject (\ s a -> s{_tidProject = a})
@@ -101,7 +101,10 @@
 
 instance GoogleRequest TargetInstancesDelete where
         type Rs TargetInstancesDelete = Operation
-        requestClient TargetInstancesDelete{..}
+        type Scopes TargetInstancesDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetInstancesDelete'{..}
           = go _tidProject _tidZone _tidTargetInstance
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetInstances/Get.hs b/gen/Network/Google/Resource/Compute/TargetInstances/Get.hs
--- a/gen/Network/Google/Resource/Compute/TargetInstances/Get.hs
+++ b/gen/Network/Google/Resource/Compute/TargetInstances/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetInstances.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified TargetInstance resource.
+-- Returns the specified TargetInstance resource. Get a list of available
+-- target instances by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetInstances.get@.
 module Network.Google.Resource.Compute.TargetInstances.Get
@@ -55,10 +56,11 @@
                      QueryParam "alt" AltJSON :>
                        Get '[JSON] TargetInstance
 
--- | Returns the specified TargetInstance resource.
+-- | Returns the specified TargetInstance resource. Get a list of available
+-- target instances by making a list() request.
 --
 -- /See:/ 'targetInstancesGet' smart constructor.
-data TargetInstancesGet = TargetInstancesGet
+data TargetInstancesGet = TargetInstancesGet'
     { _tigProject        :: !Text
     , _tigTargetInstance :: !Text
     , _tigZone           :: !Text
@@ -79,13 +81,13 @@
     -> Text -- ^ 'tigZone'
     -> TargetInstancesGet
 targetInstancesGet pTigProject_ pTigTargetInstance_ pTigZone_ =
-    TargetInstancesGet
+    TargetInstancesGet'
     { _tigProject = pTigProject_
     , _tigTargetInstance = pTigTargetInstance_
     , _tigZone = pTigZone_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tigProject :: Lens' TargetInstancesGet Text
 tigProject
   = lens _tigProject (\ s a -> s{_tigProject = a})
@@ -102,7 +104,11 @@
 
 instance GoogleRequest TargetInstancesGet where
         type Rs TargetInstancesGet = TargetInstance
-        requestClient TargetInstancesGet{..}
+        type Scopes TargetInstancesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetInstancesGet'{..}
           = go _tigProject _tigZone _tigTargetInstance
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetInstances/Insert.hs b/gen/Network/Google/Resource/Compute/TargetInstances/Insert.hs
--- a/gen/Network/Google/Resource/Compute/TargetInstances/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/TargetInstances/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetInstances.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -60,7 +60,7 @@
 -- using the data included in the request.
 --
 -- /See:/ 'targetInstancesInsert' smart constructor.
-data TargetInstancesInsert = TargetInstancesInsert
+data TargetInstancesInsert = TargetInstancesInsert'
     { _tiiProject :: !Text
     , _tiiZone    :: !Text
     , _tiiPayload :: !TargetInstance
@@ -81,13 +81,13 @@
     -> TargetInstance -- ^ 'tiiPayload'
     -> TargetInstancesInsert
 targetInstancesInsert pTiiProject_ pTiiZone_ pTiiPayload_ =
-    TargetInstancesInsert
+    TargetInstancesInsert'
     { _tiiProject = pTiiProject_
     , _tiiZone = pTiiZone_
     , _tiiPayload = pTiiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tiiProject :: Lens' TargetInstancesInsert Text
 tiiProject
   = lens _tiiProject (\ s a -> s{_tiiProject = a})
@@ -103,7 +103,10 @@
 
 instance GoogleRequest TargetInstancesInsert where
         type Rs TargetInstancesInsert = Operation
-        requestClient TargetInstancesInsert{..}
+        type Scopes TargetInstancesInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetInstancesInsert'{..}
           = go _tiiProject _tiiZone (Just AltJSON) _tiiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/TargetInstances/List.hs b/gen/Network/Google/Resource/Compute/TargetInstances/List.hs
--- a/gen/Network/Google/Resource/Compute/TargetInstances/List.hs
+++ b/gen/Network/Google/Resource/Compute/TargetInstances/List.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetInstances.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of TargetInstance resources available to the
--- specified project and zone.
+-- Retrieves a list of TargetInstance resources available to the specified
+-- project and zone.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetInstances.list@.
 module Network.Google.Resource.Compute.TargetInstances.List
@@ -60,11 +60,11 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] TargetInstanceList
 
--- | Retrieves the list of TargetInstance resources available to the
--- specified project and zone.
+-- | Retrieves a list of TargetInstance resources available to the specified
+-- project and zone.
 --
 -- /See:/ 'targetInstancesList' smart constructor.
-data TargetInstancesList = TargetInstancesList
+data TargetInstancesList = TargetInstancesList'
     { _tilProject    :: !Text
     , _tilZone       :: !Text
     , _tilFilter     :: !(Maybe Text)
@@ -90,7 +90,7 @@
     -> Text -- ^ 'tilZone'
     -> TargetInstancesList
 targetInstancesList pTilProject_ pTilZone_ =
-    TargetInstancesList
+    TargetInstancesList'
     { _tilProject = pTilProject_
     , _tilZone = pTilZone_
     , _tilFilter = Nothing
@@ -98,7 +98,7 @@
     , _tilMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tilProject :: Lens' TargetInstancesList Text
 tilProject
   = lens _tilProject (\ s a -> s{_tilProject = a})
@@ -108,28 +108,40 @@
 tilZone = lens _tilZone (\ s a -> s{_tilZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 tilFilter :: Lens' TargetInstancesList (Maybe Text)
 tilFilter
   = lens _tilFilter (\ s a -> s{_tilFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 tilPageToken :: Lens' TargetInstancesList (Maybe Text)
 tilPageToken
   = lens _tilPageToken (\ s a -> s{_tilPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 tilMaxResults :: Lens' TargetInstancesList Word32
 tilMaxResults
   = lens _tilMaxResults
@@ -138,7 +150,11 @@
 
 instance GoogleRequest TargetInstancesList where
         type Rs TargetInstancesList = TargetInstanceList
-        requestClient TargetInstancesList{..}
+        type Scopes TargetInstancesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetInstancesList'{..}
           = go _tilProject _tilZone _tilFilter _tilPageToken
               (Just _tilMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/AddHealthCheck.hs b/gen/Network/Google/Resource/Compute/TargetPools/AddHealthCheck.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/AddHealthCheck.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/AddHealthCheck.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.AddHealthCheck
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Adds health check URL to targetPool.
+-- Adds health check URLs to a target pool.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.addHealthCheck@.
 module Network.Google.Resource.Compute.TargetPools.AddHealthCheck
@@ -58,10 +58,10 @@
                          ReqBody '[JSON] TargetPoolsAddHealthCheckRequest :>
                            Post '[JSON] Operation
 
--- | Adds health check URL to targetPool.
+-- | Adds health check URLs to a target pool.
 --
 -- /See:/ 'targetPoolsAddHealthCheck' smart constructor.
-data TargetPoolsAddHealthCheck = TargetPoolsAddHealthCheck
+data TargetPoolsAddHealthCheck = TargetPoolsAddHealthCheck'
     { _tpahcProject    :: !Text
     , _tpahcTargetPool :: !Text
     , _tpahcPayload    :: !TargetPoolsAddHealthCheckRequest
@@ -86,19 +86,19 @@
     -> Text -- ^ 'tpahcRegion'
     -> TargetPoolsAddHealthCheck
 targetPoolsAddHealthCheck pTpahcProject_ pTpahcTargetPool_ pTpahcPayload_ pTpahcRegion_ =
-    TargetPoolsAddHealthCheck
+    TargetPoolsAddHealthCheck'
     { _tpahcProject = pTpahcProject_
     , _tpahcTargetPool = pTpahcTargetPool_
     , _tpahcPayload = pTpahcPayload_
     , _tpahcRegion = pTpahcRegion_
     }
 
+-- | Project ID for this request.
 tpahcProject :: Lens' TargetPoolsAddHealthCheck Text
 tpahcProject
   = lens _tpahcProject (\ s a -> s{_tpahcProject = a})
 
--- | Name of the TargetPool resource to which health_check_url is to be
--- added.
+-- | Name of the target pool to add a health check to.
 tpahcTargetPool :: Lens' TargetPoolsAddHealthCheck Text
 tpahcTargetPool
   = lens _tpahcTargetPool
@@ -117,7 +117,10 @@
 instance GoogleRequest TargetPoolsAddHealthCheck
          where
         type Rs TargetPoolsAddHealthCheck = Operation
-        requestClient TargetPoolsAddHealthCheck{..}
+        type Scopes TargetPoolsAddHealthCheck =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsAddHealthCheck'{..}
           = go _tpahcProject _tpahcRegion _tpahcTargetPool
               (Just AltJSON)
               _tpahcPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/AddInstance.hs b/gen/Network/Google/Resource/Compute/TargetPools/AddInstance.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/AddInstance.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/AddInstance.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.AddInstance
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Adds instance url to targetPool.
+-- Adds an instance to a target pool.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.addInstance@.
 module Network.Google.Resource.Compute.TargetPools.AddInstance
@@ -58,10 +58,10 @@
                          ReqBody '[JSON] TargetPoolsAddInstanceRequest :>
                            Post '[JSON] Operation
 
--- | Adds instance url to targetPool.
+-- | Adds an instance to a target pool.
 --
 -- /See:/ 'targetPoolsAddInstance' smart constructor.
-data TargetPoolsAddInstance = TargetPoolsAddInstance
+data TargetPoolsAddInstance = TargetPoolsAddInstance'
     { _tpaiProject    :: !Text
     , _tpaiTargetPool :: !Text
     , _tpaiPayload    :: !TargetPoolsAddInstanceRequest
@@ -86,18 +86,19 @@
     -> Text -- ^ 'tpaiRegion'
     -> TargetPoolsAddInstance
 targetPoolsAddInstance pTpaiProject_ pTpaiTargetPool_ pTpaiPayload_ pTpaiRegion_ =
-    TargetPoolsAddInstance
+    TargetPoolsAddInstance'
     { _tpaiProject = pTpaiProject_
     , _tpaiTargetPool = pTpaiTargetPool_
     , _tpaiPayload = pTpaiPayload_
     , _tpaiRegion = pTpaiRegion_
     }
 
+-- | Project ID for this request.
 tpaiProject :: Lens' TargetPoolsAddInstance Text
 tpaiProject
   = lens _tpaiProject (\ s a -> s{_tpaiProject = a})
 
--- | Name of the TargetPool resource to which instance_url is to be added.
+-- | Name of the TargetPool resource to add instances to.
 tpaiTargetPool :: Lens' TargetPoolsAddInstance Text
 tpaiTargetPool
   = lens _tpaiTargetPool
@@ -115,7 +116,10 @@
 
 instance GoogleRequest TargetPoolsAddInstance where
         type Rs TargetPoolsAddInstance = Operation
-        requestClient TargetPoolsAddInstance{..}
+        type Scopes TargetPoolsAddInstance =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsAddInstance'{..}
           = go _tpaiProject _tpaiRegion _tpaiTargetPool
               (Just AltJSON)
               _tpaiPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/AggregatedList.hs b/gen/Network/Google/Resource/Compute/TargetPools/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of target pools grouped by scope.
+-- Retrieves an aggregated list of target pools.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.aggregatedList@.
 module Network.Google.Resource.Compute.TargetPools.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] TargetPoolAggregatedList
 
--- | Retrieves the list of target pools grouped by scope.
+-- | Retrieves an aggregated list of target pools.
 --
 -- /See:/ 'targetPoolsAggregatedList' smart constructor.
-data TargetPoolsAggregatedList = TargetPoolsAggregatedList
+data TargetPoolsAggregatedList = TargetPoolsAggregatedList'
     { _tpalProject    :: !Text
     , _tpalFilter     :: !(Maybe Text)
     , _tpalPageToken  :: !(Maybe Text)
@@ -82,42 +82,54 @@
     :: Text -- ^ 'tpalProject'
     -> TargetPoolsAggregatedList
 targetPoolsAggregatedList pTpalProject_ =
-    TargetPoolsAggregatedList
+    TargetPoolsAggregatedList'
     { _tpalProject = pTpalProject_
     , _tpalFilter = Nothing
     , _tpalPageToken = Nothing
     , _tpalMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tpalProject :: Lens' TargetPoolsAggregatedList Text
 tpalProject
   = lens _tpalProject (\ s a -> s{_tpalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 tpalFilter :: Lens' TargetPoolsAggregatedList (Maybe Text)
 tpalFilter
   = lens _tpalFilter (\ s a -> s{_tpalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 tpalPageToken :: Lens' TargetPoolsAggregatedList (Maybe Text)
 tpalPageToken
   = lens _tpalPageToken
       (\ s a -> s{_tpalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 tpalMaxResults :: Lens' TargetPoolsAggregatedList Word32
 tpalMaxResults
   = lens _tpalMaxResults
@@ -128,7 +140,11 @@
          where
         type Rs TargetPoolsAggregatedList =
              TargetPoolAggregatedList
-        requestClient TargetPoolsAggregatedList{..}
+        type Scopes TargetPoolsAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetPoolsAggregatedList'{..}
           = go _tpalProject _tpalFilter _tpalPageToken
               (Just _tpalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/Delete.hs b/gen/Network/Google/Resource/Compute/TargetPools/Delete.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified TargetPool resource.
+-- Deletes the specified target pool.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.delete@.
 module Network.Google.Resource.Compute.TargetPools.Delete
@@ -54,10 +54,10 @@
                    Capture "targetPool" Text :>
                      QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified TargetPool resource.
+-- | Deletes the specified target pool.
 --
 -- /See:/ 'targetPoolsDelete' smart constructor.
-data TargetPoolsDelete = TargetPoolsDelete
+data TargetPoolsDelete = TargetPoolsDelete'
     { _tpdProject    :: !Text
     , _tpdTargetPool :: !Text
     , _tpdRegion     :: !Text
@@ -78,13 +78,13 @@
     -> Text -- ^ 'tpdRegion'
     -> TargetPoolsDelete
 targetPoolsDelete pTpdProject_ pTpdTargetPool_ pTpdRegion_ =
-    TargetPoolsDelete
+    TargetPoolsDelete'
     { _tpdProject = pTpdProject_
     , _tpdTargetPool = pTpdTargetPool_
     , _tpdRegion = pTpdRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tpdProject :: Lens' TargetPoolsDelete Text
 tpdProject
   = lens _tpdProject (\ s a -> s{_tpdProject = a})
@@ -102,7 +102,10 @@
 
 instance GoogleRequest TargetPoolsDelete where
         type Rs TargetPoolsDelete = Operation
-        requestClient TargetPoolsDelete{..}
+        type Scopes TargetPoolsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsDelete'{..}
           = go _tpdProject _tpdRegion _tpdTargetPool
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/Get.hs b/gen/Network/Google/Resource/Compute/TargetPools/Get.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/Get.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified TargetPool resource.
+-- Returns the specified target pool. Get a list of available target pools
+-- by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.get@.
 module Network.Google.Resource.Compute.TargetPools.Get
@@ -54,10 +55,11 @@
                    Capture "targetPool" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] TargetPool
 
--- | Returns the specified TargetPool resource.
+-- | Returns the specified target pool. Get a list of available target pools
+-- by making a list() request.
 --
 -- /See:/ 'targetPoolsGet' smart constructor.
-data TargetPoolsGet = TargetPoolsGet
+data TargetPoolsGet = TargetPoolsGet'
     { _tpgProject    :: !Text
     , _tpgTargetPool :: !Text
     , _tpgRegion     :: !Text
@@ -78,13 +80,13 @@
     -> Text -- ^ 'tpgRegion'
     -> TargetPoolsGet
 targetPoolsGet pTpgProject_ pTpgTargetPool_ pTpgRegion_ =
-    TargetPoolsGet
+    TargetPoolsGet'
     { _tpgProject = pTpgProject_
     , _tpgTargetPool = pTpgTargetPool_
     , _tpgRegion = pTpgRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tpgProject :: Lens' TargetPoolsGet Text
 tpgProject
   = lens _tpgProject (\ s a -> s{_tpgProject = a})
@@ -102,7 +104,11 @@
 
 instance GoogleRequest TargetPoolsGet where
         type Rs TargetPoolsGet = TargetPool
-        requestClient TargetPoolsGet{..}
+        type Scopes TargetPoolsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetPoolsGet'{..}
           = go _tpgProject _tpgRegion _tpgTargetPool
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/GetHealth.hs b/gen/Network/Google/Resource/Compute/TargetPools/GetHealth.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/GetHealth.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/GetHealth.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.GetHealth
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 most recent health check results for each IP for the given
--- instance that is referenced by given TargetPool.
+-- Gets the most recent health check results for each IP for the instance
+-- that is referenced by the given target pool.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.getHealth@.
 module Network.Google.Resource.Compute.TargetPools.GetHealth
@@ -59,11 +59,11 @@
                          ReqBody '[JSON] InstanceReference :>
                            Post '[JSON] TargetPoolInstanceHealth
 
--- | Gets the most recent health check results for each IP for the given
--- instance that is referenced by given TargetPool.
+-- | Gets the most recent health check results for each IP for the instance
+-- that is referenced by the given target pool.
 --
 -- /See:/ 'targetPoolsGetHealth' smart constructor.
-data TargetPoolsGetHealth = TargetPoolsGetHealth
+data TargetPoolsGetHealth = TargetPoolsGetHealth'
     { _tpghProject    :: !Text
     , _tpghTargetPool :: !Text
     , _tpghPayload    :: !InstanceReference
@@ -88,13 +88,14 @@
     -> Text -- ^ 'tpghRegion'
     -> TargetPoolsGetHealth
 targetPoolsGetHealth pTpghProject_ pTpghTargetPool_ pTpghPayload_ pTpghRegion_ =
-    TargetPoolsGetHealth
+    TargetPoolsGetHealth'
     { _tpghProject = pTpghProject_
     , _tpghTargetPool = pTpghTargetPool_
     , _tpghPayload = pTpghPayload_
     , _tpghRegion = pTpghRegion_
     }
 
+-- | Project ID for this request.
 tpghProject :: Lens' TargetPoolsGetHealth Text
 tpghProject
   = lens _tpghProject (\ s a -> s{_tpghProject = a})
@@ -118,7 +119,11 @@
 instance GoogleRequest TargetPoolsGetHealth where
         type Rs TargetPoolsGetHealth =
              TargetPoolInstanceHealth
-        requestClient TargetPoolsGetHealth{..}
+        type Scopes TargetPoolsGetHealth =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetPoolsGetHealth'{..}
           = go _tpghProject _tpghRegion _tpghTargetPool
               (Just AltJSON)
               _tpghPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/Insert.hs b/gen/Network/Google/Resource/Compute/TargetPools/Insert.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/Insert.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 TargetPool resource in the specified project and region using
--- the data included in the request.
+-- Creates a target pool in the specified project and region using the data
+-- included in the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.insert@.
 module Network.Google.Resource.Compute.TargetPools.Insert
@@ -55,11 +55,11 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] TargetPool :> Post '[JSON] Operation
 
--- | Creates a TargetPool resource in the specified project and region using
--- the data included in the request.
+-- | Creates a target pool in the specified project and region using the data
+-- included in the request.
 --
 -- /See:/ 'targetPoolsInsert' smart constructor.
-data TargetPoolsInsert = TargetPoolsInsert
+data TargetPoolsInsert = TargetPoolsInsert'
     { _tpiProject :: !Text
     , _tpiPayload :: !TargetPool
     , _tpiRegion  :: !Text
@@ -80,13 +80,13 @@
     -> Text -- ^ 'tpiRegion'
     -> TargetPoolsInsert
 targetPoolsInsert pTpiProject_ pTpiPayload_ pTpiRegion_ =
-    TargetPoolsInsert
+    TargetPoolsInsert'
     { _tpiProject = pTpiProject_
     , _tpiPayload = pTpiPayload_
     , _tpiRegion = pTpiRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tpiProject :: Lens' TargetPoolsInsert Text
 tpiProject
   = lens _tpiProject (\ s a -> s{_tpiProject = a})
@@ -103,7 +103,10 @@
 
 instance GoogleRequest TargetPoolsInsert where
         type Rs TargetPoolsInsert = Operation
-        requestClient TargetPoolsInsert{..}
+        type Scopes TargetPoolsInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsInsert'{..}
           = go _tpiProject _tpiRegion (Just AltJSON)
               _tpiPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/List.hs b/gen/Network/Google/Resource/Compute/TargetPools/List.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/List.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/List.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of TargetPool resources available to the specified
--- project and region.
+-- Retrieves a list of target pools available to the specified project and
+-- region.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.list@.
 module Network.Google.Resource.Compute.TargetPools.List
@@ -60,11 +60,11 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] TargetPoolList
 
--- | Retrieves the list of TargetPool resources available to the specified
--- project and region.
+-- | Retrieves a list of target pools available to the specified project and
+-- region.
 --
 -- /See:/ 'targetPoolsList' smart constructor.
-data TargetPoolsList = TargetPoolsList
+data TargetPoolsList = TargetPoolsList'
     { _tplProject    :: !Text
     , _tplFilter     :: !(Maybe Text)
     , _tplRegion     :: !Text
@@ -90,7 +90,7 @@
     -> Text -- ^ 'tplRegion'
     -> TargetPoolsList
 targetPoolsList pTplProject_ pTplRegion_ =
-    TargetPoolsList
+    TargetPoolsList'
     { _tplProject = pTplProject_
     , _tplFilter = Nothing
     , _tplRegion = pTplRegion_
@@ -98,22 +98,32 @@
     , _tplMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tplProject :: Lens' TargetPoolsList Text
 tplProject
   = lens _tplProject (\ s a -> s{_tplProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 tplFilter :: Lens' TargetPoolsList (Maybe Text)
 tplFilter
   = lens _tplFilter (\ s a -> s{_tplFilter = a})
@@ -123,14 +133,16 @@
 tplRegion
   = lens _tplRegion (\ s a -> s{_tplRegion = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 tplPageToken :: Lens' TargetPoolsList (Maybe Text)
 tplPageToken
   = lens _tplPageToken (\ s a -> s{_tplPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 tplMaxResults :: Lens' TargetPoolsList Word32
 tplMaxResults
   = lens _tplMaxResults
@@ -139,7 +151,11 @@
 
 instance GoogleRequest TargetPoolsList where
         type Rs TargetPoolsList = TargetPoolList
-        requestClient TargetPoolsList{..}
+        type Scopes TargetPoolsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetPoolsList'{..}
           = go _tplProject _tplRegion _tplFilter _tplPageToken
               (Just _tplMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/RemoveHealthCheck.hs b/gen/Network/Google/Resource/Compute/TargetPools/RemoveHealthCheck.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/RemoveHealthCheck.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/RemoveHealthCheck.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.RemoveHealthCheck
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Removes health check URL from targetPool.
+-- Removes health check URL from a target pool.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.removeHealthCheck@.
 module Network.Google.Resource.Compute.TargetPools.RemoveHealthCheck
@@ -58,10 +58,10 @@
                          ReqBody '[JSON] TargetPoolsRemoveHealthCheckRequest
                            :> Post '[JSON] Operation
 
--- | Removes health check URL from targetPool.
+-- | Removes health check URL from a target pool.
 --
 -- /See:/ 'targetPoolsRemoveHealthCheck' smart constructor.
-data TargetPoolsRemoveHealthCheck = TargetPoolsRemoveHealthCheck
+data TargetPoolsRemoveHealthCheck = TargetPoolsRemoveHealthCheck'
     { _tprhcProject    :: !Text
     , _tprhcTargetPool :: !Text
     , _tprhcPayload    :: !TargetPoolsRemoveHealthCheckRequest
@@ -86,19 +86,19 @@
     -> Text -- ^ 'tprhcRegion'
     -> TargetPoolsRemoveHealthCheck
 targetPoolsRemoveHealthCheck pTprhcProject_ pTprhcTargetPool_ pTprhcPayload_ pTprhcRegion_ =
-    TargetPoolsRemoveHealthCheck
+    TargetPoolsRemoveHealthCheck'
     { _tprhcProject = pTprhcProject_
     , _tprhcTargetPool = pTprhcTargetPool_
     , _tprhcPayload = pTprhcPayload_
     , _tprhcRegion = pTprhcRegion_
     }
 
+-- | Project ID for this request.
 tprhcProject :: Lens' TargetPoolsRemoveHealthCheck Text
 tprhcProject
   = lens _tprhcProject (\ s a -> s{_tprhcProject = a})
 
--- | Name of the TargetPool resource to which health_check_url is to be
--- removed.
+-- | Name of the target pool to remove health checks from.
 tprhcTargetPool :: Lens' TargetPoolsRemoveHealthCheck Text
 tprhcTargetPool
   = lens _tprhcTargetPool
@@ -109,7 +109,7 @@
 tprhcPayload
   = lens _tprhcPayload (\ s a -> s{_tprhcPayload = a})
 
--- | Name of the region scoping this request.
+-- | Name of the region for this request.
 tprhcRegion :: Lens' TargetPoolsRemoveHealthCheck Text
 tprhcRegion
   = lens _tprhcRegion (\ s a -> s{_tprhcRegion = a})
@@ -117,7 +117,10 @@
 instance GoogleRequest TargetPoolsRemoveHealthCheck
          where
         type Rs TargetPoolsRemoveHealthCheck = Operation
-        requestClient TargetPoolsRemoveHealthCheck{..}
+        type Scopes TargetPoolsRemoveHealthCheck =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsRemoveHealthCheck'{..}
           = go _tprhcProject _tprhcRegion _tprhcTargetPool
               (Just AltJSON)
               _tprhcPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/RemoveInstance.hs b/gen/Network/Google/Resource/Compute/TargetPools/RemoveInstance.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/RemoveInstance.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/RemoveInstance.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.RemoveInstance
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Removes instance URL from targetPool.
+-- Removes instance URL from a target pool.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.removeInstance@.
 module Network.Google.Resource.Compute.TargetPools.RemoveInstance
@@ -58,10 +58,10 @@
                          ReqBody '[JSON] TargetPoolsRemoveInstanceRequest :>
                            Post '[JSON] Operation
 
--- | Removes instance URL from targetPool.
+-- | Removes instance URL from a target pool.
 --
 -- /See:/ 'targetPoolsRemoveInstance' smart constructor.
-data TargetPoolsRemoveInstance = TargetPoolsRemoveInstance
+data TargetPoolsRemoveInstance = TargetPoolsRemoveInstance'
     { _tpriProject    :: !Text
     , _tpriTargetPool :: !Text
     , _tpriPayload    :: !TargetPoolsRemoveInstanceRequest
@@ -86,18 +86,19 @@
     -> Text -- ^ 'tpriRegion'
     -> TargetPoolsRemoveInstance
 targetPoolsRemoveInstance pTpriProject_ pTpriTargetPool_ pTpriPayload_ pTpriRegion_ =
-    TargetPoolsRemoveInstance
+    TargetPoolsRemoveInstance'
     { _tpriProject = pTpriProject_
     , _tpriTargetPool = pTpriTargetPool_
     , _tpriPayload = pTpriPayload_
     , _tpriRegion = pTpriRegion_
     }
 
+-- | Project ID for this request.
 tpriProject :: Lens' TargetPoolsRemoveInstance Text
 tpriProject
   = lens _tpriProject (\ s a -> s{_tpriProject = a})
 
--- | Name of the TargetPool resource to which instance_url is to be removed.
+-- | Name of the TargetPool resource to remove instances from.
 tpriTargetPool :: Lens' TargetPoolsRemoveInstance Text
 tpriTargetPool
   = lens _tpriTargetPool
@@ -116,7 +117,10 @@
 instance GoogleRequest TargetPoolsRemoveInstance
          where
         type Rs TargetPoolsRemoveInstance = Operation
-        requestClient TargetPoolsRemoveInstance{..}
+        type Scopes TargetPoolsRemoveInstance =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsRemoveInstance'{..}
           = go _tpriProject _tpriRegion _tpriTargetPool
               (Just AltJSON)
               _tpriPayload
diff --git a/gen/Network/Google/Resource/Compute/TargetPools/SetBackup.hs b/gen/Network/Google/Resource/Compute/TargetPools/SetBackup.hs
--- a/gen/Network/Google/Resource/Compute/TargetPools/SetBackup.hs
+++ b/gen/Network/Google/Resource/Compute/TargetPools/SetBackup.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetPools.SetBackup
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Changes backup pool configurations.
+-- Changes a backup target pool\'s configurations.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetPools.setBackup@.
 module Network.Google.Resource.Compute.TargetPools.SetBackup
@@ -60,10 +60,10 @@
                            ReqBody '[JSON] TargetReference :>
                              Post '[JSON] Operation
 
--- | Changes backup pool configurations.
+-- | Changes a backup target pool\'s configurations.
 --
 -- /See:/ 'targetPoolsSetBackup' smart constructor.
-data TargetPoolsSetBackup = TargetPoolsSetBackup
+data TargetPoolsSetBackup = TargetPoolsSetBackup'
     { _tpsbProject       :: !Text
     , _tpsbTargetPool    :: !Text
     , _tpsbPayload       :: !TargetReference
@@ -91,7 +91,7 @@
     -> Text -- ^ 'tpsbRegion'
     -> TargetPoolsSetBackup
 targetPoolsSetBackup pTpsbProject_ pTpsbTargetPool_ pTpsbPayload_ pTpsbRegion_ =
-    TargetPoolsSetBackup
+    TargetPoolsSetBackup'
     { _tpsbProject = pTpsbProject_
     , _tpsbTargetPool = pTpsbTargetPool_
     , _tpsbPayload = pTpsbPayload_
@@ -99,12 +99,12 @@
     , _tpsbRegion = pTpsbRegion_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 tpsbProject :: Lens' TargetPoolsSetBackup Text
 tpsbProject
   = lens _tpsbProject (\ s a -> s{_tpsbProject = a})
 
--- | Name of the TargetPool resource for which the backup is to be set.
+-- | Name of the TargetPool resource to set a backup pool for.
 tpsbTargetPool :: Lens' TargetPoolsSetBackup Text
 tpsbTargetPool
   = lens _tpsbTargetPool
@@ -115,7 +115,7 @@
 tpsbPayload
   = lens _tpsbPayload (\ s a -> s{_tpsbPayload = a})
 
--- | New failoverRatio value for the containing target pool.
+-- | New failoverRatio value for the target pool.
 tpsbFailoverRatio :: Lens' TargetPoolsSetBackup (Maybe Double)
 tpsbFailoverRatio
   = lens _tpsbFailoverRatio
@@ -129,7 +129,10 @@
 
 instance GoogleRequest TargetPoolsSetBackup where
         type Rs TargetPoolsSetBackup = Operation
-        requestClient TargetPoolsSetBackup{..}
+        type Scopes TargetPoolsSetBackup =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetPoolsSetBackup'{..}
           = go _tpsbProject _tpsbRegion _tpsbTargetPool
               _tpsbFailoverRatio
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetVPNGateways/AggregatedList.hs b/gen/Network/Google/Resource/Compute/TargetVPNGateways/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/TargetVPNGateways/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/TargetVPNGateways/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetVPNGateways.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of target VPN gateways grouped by scope.
+-- Retrieves an aggregated list of target VPN gateways.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetVpnGateways.aggregatedList@.
 module Network.Google.Resource.Compute.TargetVPNGateways.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] TargetVPNGatewayAggregatedList
 
--- | Retrieves the list of target VPN gateways grouped by scope.
+-- | Retrieves an aggregated list of target VPN gateways.
 --
 -- /See:/ 'targetVPNGatewaysAggregatedList' smart constructor.
-data TargetVPNGatewaysAggregatedList = TargetVPNGatewaysAggregatedList
+data TargetVPNGatewaysAggregatedList = TargetVPNGatewaysAggregatedList'
     { _tvgalProject    :: !Text
     , _tvgalFilter     :: !(Maybe Text)
     , _tvgalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'tvgalProject'
     -> TargetVPNGatewaysAggregatedList
 targetVPNGatewaysAggregatedList pTvgalProject_ =
-    TargetVPNGatewaysAggregatedList
+    TargetVPNGatewaysAggregatedList'
     { _tvgalProject = pTvgalProject_
     , _tvgalFilter = Nothing
     , _tvgalPageToken = Nothing
@@ -95,29 +95,41 @@
   = lens _tvgalProject (\ s a -> s{_tvgalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 tvgalFilter :: Lens' TargetVPNGatewaysAggregatedList (Maybe Text)
 tvgalFilter
   = lens _tvgalFilter (\ s a -> s{_tvgalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 tvgalPageToken :: Lens' TargetVPNGatewaysAggregatedList (Maybe Text)
 tvgalPageToken
   = lens _tvgalPageToken
       (\ s a -> s{_tvgalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 tvgalMaxResults :: Lens' TargetVPNGatewaysAggregatedList Word32
 tvgalMaxResults
   = lens _tvgalMaxResults
@@ -128,7 +140,11 @@
          TargetVPNGatewaysAggregatedList where
         type Rs TargetVPNGatewaysAggregatedList =
              TargetVPNGatewayAggregatedList
-        requestClient TargetVPNGatewaysAggregatedList{..}
+        type Scopes TargetVPNGatewaysAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetVPNGatewaysAggregatedList'{..}
           = go _tvgalProject _tvgalFilter _tvgalPageToken
               (Just _tvgalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/TargetVPNGateways/Delete.hs b/gen/Network/Google/Resource/Compute/TargetVPNGateways/Delete.hs
--- a/gen/Network/Google/Resource/Compute/TargetVPNGateways/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/TargetVPNGateways/Delete.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetVPNGateways.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified TargetVpnGateway resource.
+-- Deletes the specified target VPN gateway.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetVpnGateways.delete@.
 module Network.Google.Resource.Compute.TargetVPNGateways.Delete
@@ -54,10 +54,10 @@
                    Capture "targetVpnGateway" Text :>
                      QueryParam "alt" AltJSON :> Delete '[JSON] Operation
 
--- | Deletes the specified TargetVpnGateway resource.
+-- | Deletes the specified target VPN gateway.
 --
 -- /See:/ 'targetVPNGatewaysDelete' smart constructor.
-data TargetVPNGatewaysDelete = TargetVPNGatewaysDelete
+data TargetVPNGatewaysDelete = TargetVPNGatewaysDelete'
     { _tvgdProject          :: !Text
     , _tvgdTargetVPNGateway :: !Text
     , _tvgdRegion           :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'tvgdRegion'
     -> TargetVPNGatewaysDelete
 targetVPNGatewaysDelete pTvgdProject_ pTvgdTargetVPNGateway_ pTvgdRegion_ =
-    TargetVPNGatewaysDelete
+    TargetVPNGatewaysDelete'
     { _tvgdProject = pTvgdProject_
     , _tvgdTargetVPNGateway = pTvgdTargetVPNGateway_
     , _tvgdRegion = pTvgdRegion_
@@ -89,20 +89,23 @@
 tvgdProject
   = lens _tvgdProject (\ s a -> s{_tvgdProject = a})
 
--- | Name of the TargetVpnGateway resource to delete.
+-- | Name of the target VPN gateway to delete.
 tvgdTargetVPNGateway :: Lens' TargetVPNGatewaysDelete Text
 tvgdTargetVPNGateway
   = lens _tvgdTargetVPNGateway
       (\ s a -> s{_tvgdTargetVPNGateway = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 tvgdRegion :: Lens' TargetVPNGatewaysDelete Text
 tvgdRegion
   = lens _tvgdRegion (\ s a -> s{_tvgdRegion = a})
 
 instance GoogleRequest TargetVPNGatewaysDelete where
         type Rs TargetVPNGatewaysDelete = Operation
-        requestClient TargetVPNGatewaysDelete{..}
+        type Scopes TargetVPNGatewaysDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetVPNGatewaysDelete'{..}
           = go _tvgdProject _tvgdRegion _tvgdTargetVPNGateway
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetVPNGateways/Get.hs b/gen/Network/Google/Resource/Compute/TargetVPNGateways/Get.hs
--- a/gen/Network/Google/Resource/Compute/TargetVPNGateways/Get.hs
+++ b/gen/Network/Google/Resource/Compute/TargetVPNGateways/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetVPNGateways.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified TargetVpnGateway resource.
+-- Returns the specified target VPN gateway. Get a list of available target
+-- VPN gateways by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetVpnGateways.get@.
 module Network.Google.Resource.Compute.TargetVPNGateways.Get
@@ -55,10 +56,11 @@
                      QueryParam "alt" AltJSON :>
                        Get '[JSON] TargetVPNGateway
 
--- | Returns the specified TargetVpnGateway resource.
+-- | Returns the specified target VPN gateway. Get a list of available target
+-- VPN gateways by making a list() request.
 --
 -- /See:/ 'targetVPNGatewaysGet' smart constructor.
-data TargetVPNGatewaysGet = TargetVPNGatewaysGet
+data TargetVPNGatewaysGet = TargetVPNGatewaysGet'
     { _tvggProject          :: !Text
     , _tvggTargetVPNGateway :: !Text
     , _tvggRegion           :: !Text
@@ -79,7 +81,7 @@
     -> Text -- ^ 'tvggRegion'
     -> TargetVPNGatewaysGet
 targetVPNGatewaysGet pTvggProject_ pTvggTargetVPNGateway_ pTvggRegion_ =
-    TargetVPNGatewaysGet
+    TargetVPNGatewaysGet'
     { _tvggProject = pTvggProject_
     , _tvggTargetVPNGateway = pTvggTargetVPNGateway_
     , _tvggRegion = pTvggRegion_
@@ -90,20 +92,24 @@
 tvggProject
   = lens _tvggProject (\ s a -> s{_tvggProject = a})
 
--- | Name of the TargetVpnGateway resource to return.
+-- | Name of the target VPN gateway to return.
 tvggTargetVPNGateway :: Lens' TargetVPNGatewaysGet Text
 tvggTargetVPNGateway
   = lens _tvggTargetVPNGateway
       (\ s a -> s{_tvggTargetVPNGateway = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 tvggRegion :: Lens' TargetVPNGatewaysGet Text
 tvggRegion
   = lens _tvggRegion (\ s a -> s{_tvggRegion = a})
 
 instance GoogleRequest TargetVPNGatewaysGet where
         type Rs TargetVPNGatewaysGet = TargetVPNGateway
-        requestClient TargetVPNGatewaysGet{..}
+        type Scopes TargetVPNGatewaysGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetVPNGatewaysGet'{..}
           = go _tvggProject _tvggRegion _tvggTargetVPNGateway
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetVPNGateways/Insert.hs b/gen/Network/Google/Resource/Compute/TargetVPNGateways/Insert.hs
--- a/gen/Network/Google/Resource/Compute/TargetVPNGateways/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/TargetVPNGateways/Insert.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetVPNGateways.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 TargetVpnGateway resource in the specified project and region
--- using the data included in the request.
+-- Creates a target VPN gateway in the specified project and region using
+-- the data included in the request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetVpnGateways.insert@.
 module Network.Google.Resource.Compute.TargetVPNGateways.Insert
@@ -56,11 +56,11 @@
                      ReqBody '[JSON] TargetVPNGateway :>
                        Post '[JSON] Operation
 
--- | Creates a TargetVpnGateway resource in the specified project and region
--- using the data included in the request.
+-- | Creates a target VPN gateway in the specified project and region using
+-- the data included in the request.
 --
 -- /See:/ 'targetVPNGatewaysInsert' smart constructor.
-data TargetVPNGatewaysInsert = TargetVPNGatewaysInsert
+data TargetVPNGatewaysInsert = TargetVPNGatewaysInsert'
     { _tvgiProject :: !Text
     , _tvgiPayload :: !TargetVPNGateway
     , _tvgiRegion  :: !Text
@@ -81,7 +81,7 @@
     -> Text -- ^ 'tvgiRegion'
     -> TargetVPNGatewaysInsert
 targetVPNGatewaysInsert pTvgiProject_ pTvgiPayload_ pTvgiRegion_ =
-    TargetVPNGatewaysInsert
+    TargetVPNGatewaysInsert'
     { _tvgiProject = pTvgiProject_
     , _tvgiPayload = pTvgiPayload_
     , _tvgiRegion = pTvgiRegion_
@@ -97,14 +97,17 @@
 tvgiPayload
   = lens _tvgiPayload (\ s a -> s{_tvgiPayload = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 tvgiRegion :: Lens' TargetVPNGatewaysInsert Text
 tvgiRegion
   = lens _tvgiRegion (\ s a -> s{_tvgiRegion = a})
 
 instance GoogleRequest TargetVPNGatewaysInsert where
         type Rs TargetVPNGatewaysInsert = Operation
-        requestClient TargetVPNGatewaysInsert{..}
+        type Scopes TargetVPNGatewaysInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient TargetVPNGatewaysInsert'{..}
           = go _tvgiProject _tvgiRegion (Just AltJSON)
               _tvgiPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/TargetVPNGateways/List.hs b/gen/Network/Google/Resource/Compute/TargetVPNGateways/List.hs
--- a/gen/Network/Google/Resource/Compute/TargetVPNGateways/List.hs
+++ b/gen/Network/Google/Resource/Compute/TargetVPNGateways/List.hs
@@ -14,14 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.TargetVPNGateways.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of TargetVpnGateway resources available to the
--- specified project and region.
+-- Retrieves a list of target VPN gateways available to the specified
+-- project and region.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.targetVpnGateways.list@.
 module Network.Google.Resource.Compute.TargetVPNGateways.List
@@ -60,11 +60,11 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] TargetVPNGatewayList
 
--- | Retrieves the list of TargetVpnGateway resources available to the
--- specified project and region.
+-- | Retrieves a list of target VPN gateways available to the specified
+-- project and region.
 --
 -- /See:/ 'targetVPNGatewaysList' smart constructor.
-data TargetVPNGatewaysList = TargetVPNGatewaysList
+data TargetVPNGatewaysList = TargetVPNGatewaysList'
     { _tvglProject    :: !Text
     , _tvglFilter     :: !(Maybe Text)
     , _tvglRegion     :: !Text
@@ -90,7 +90,7 @@
     -> Text -- ^ 'tvglRegion'
     -> TargetVPNGatewaysList
 targetVPNGatewaysList pTvglProject_ pTvglRegion_ =
-    TargetVPNGatewaysList
+    TargetVPNGatewaysList'
     { _tvglProject = pTvglProject_
     , _tvglFilter = Nothing
     , _tvglRegion = pTvglRegion_
@@ -104,34 +104,46 @@
   = lens _tvglProject (\ s a -> s{_tvglProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 tvglFilter :: Lens' TargetVPNGatewaysList (Maybe Text)
 tvglFilter
   = lens _tvglFilter (\ s a -> s{_tvglFilter = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 tvglRegion :: Lens' TargetVPNGatewaysList Text
 tvglRegion
   = lens _tvglRegion (\ s a -> s{_tvglRegion = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 tvglPageToken :: Lens' TargetVPNGatewaysList (Maybe Text)
 tvglPageToken
   = lens _tvglPageToken
       (\ s a -> s{_tvglPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 tvglMaxResults :: Lens' TargetVPNGatewaysList Word32
 tvglMaxResults
   = lens _tvglMaxResults
@@ -140,7 +152,11 @@
 
 instance GoogleRequest TargetVPNGatewaysList where
         type Rs TargetVPNGatewaysList = TargetVPNGatewayList
-        requestClient TargetVPNGatewaysList{..}
+        type Scopes TargetVPNGatewaysList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient TargetVPNGatewaysList'{..}
           = go _tvglProject _tvglRegion _tvglFilter
               _tvglPageToken
               (Just _tvglMaxResults)
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/Delete.hs b/gen/Network/Google/Resource/Compute/URLMaps/Delete.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -55,7 +55,7 @@
 -- | Deletes the specified UrlMap resource.
 --
 -- /See:/ 'urlMapsDelete' smart constructor.
-data URLMapsDelete = URLMapsDelete
+data URLMapsDelete = URLMapsDelete'
     { _umdURLMap  :: !Text
     , _umdProject :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +72,7 @@
     -> Text -- ^ 'umdProject'
     -> URLMapsDelete
 urlMapsDelete pUmdURLMap_ pUmdProject_ =
-    URLMapsDelete
+    URLMapsDelete'
     { _umdURLMap = pUmdURLMap_
     , _umdProject = pUmdProject_
     }
@@ -82,14 +82,17 @@
 umdURLMap
   = lens _umdURLMap (\ s a -> s{_umdURLMap = a})
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umdProject :: Lens' URLMapsDelete Text
 umdProject
   = lens _umdProject (\ s a -> s{_umdProject = a})
 
 instance GoogleRequest URLMapsDelete where
         type Rs URLMapsDelete = Operation
-        requestClient URLMapsDelete{..}
+        type Scopes URLMapsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient URLMapsDelete'{..}
           = go _umdProject _umdURLMap (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/Get.hs b/gen/Network/Google/Resource/Compute/URLMaps/Get.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/Get.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified UrlMap resource.
+-- Returns the specified UrlMap resource. Get a list of available URL maps
+-- by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.urlMaps.get@.
 module Network.Google.Resource.Compute.URLMaps.Get
@@ -52,10 +53,11 @@
                  Capture "urlMap" Text :>
                    QueryParam "alt" AltJSON :> Get '[JSON] URLMap
 
--- | Returns the specified UrlMap resource.
+-- | Returns the specified UrlMap resource. Get a list of available URL maps
+-- by making a list() request.
 --
 -- /See:/ 'urlMapsGet' smart constructor.
-data URLMapsGet = URLMapsGet
+data URLMapsGet = URLMapsGet'
     { _umgURLMap  :: !Text
     , _umgProject :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -72,7 +74,7 @@
     -> Text -- ^ 'umgProject'
     -> URLMapsGet
 urlMapsGet pUmgURLMap_ pUmgProject_ =
-    URLMapsGet
+    URLMapsGet'
     { _umgURLMap = pUmgURLMap_
     , _umgProject = pUmgProject_
     }
@@ -82,14 +84,18 @@
 umgURLMap
   = lens _umgURLMap (\ s a -> s{_umgURLMap = a})
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umgProject :: Lens' URLMapsGet Text
 umgProject
   = lens _umgProject (\ s a -> s{_umgProject = a})
 
 instance GoogleRequest URLMapsGet where
         type Rs URLMapsGet = URLMap
-        requestClient URLMapsGet{..}
+        type Scopes URLMapsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient URLMapsGet'{..}
           = go _umgProject _umgURLMap (Just AltJSON)
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/Insert.hs b/gen/Network/Google/Resource/Compute/URLMaps/Insert.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- included in the request.
 --
 -- /See:/ 'urlMapsInsert' smart constructor.
-data URLMapsInsert = URLMapsInsert
+data URLMapsInsert = URLMapsInsert'
     { _umiProject :: !Text
     , _umiPayload :: !URLMap
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -74,12 +74,12 @@
     -> URLMap -- ^ 'umiPayload'
     -> URLMapsInsert
 urlMapsInsert pUmiProject_ pUmiPayload_ =
-    URLMapsInsert
+    URLMapsInsert'
     { _umiProject = pUmiProject_
     , _umiPayload = pUmiPayload_
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umiProject :: Lens' URLMapsInsert Text
 umiProject
   = lens _umiProject (\ s a -> s{_umiProject = a})
@@ -91,7 +91,10 @@
 
 instance GoogleRequest URLMapsInsert where
         type Rs URLMapsInsert = Operation
-        requestClient URLMapsInsert{..}
+        type Scopes URLMapsInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient URLMapsInsert'{..}
           = go _umiProject (Just AltJSON) _umiPayload
               computeService
           where go
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/List.hs b/gen/Network/Google/Resource/Compute/URLMaps/List.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/List.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 -- project.
 --
 -- /See:/ 'urlMapsList' smart constructor.
-data URLMapsList = URLMapsList
+data URLMapsList = URLMapsList'
     { _umlProject    :: !Text
     , _umlFilter     :: !(Maybe Text)
     , _umlPageToken  :: !(Maybe Text)
@@ -83,41 +83,53 @@
     :: Text -- ^ 'umlProject'
     -> URLMapsList
 urlMapsList pUmlProject_ =
-    URLMapsList
+    URLMapsList'
     { _umlProject = pUmlProject_
     , _umlFilter = Nothing
     , _umlPageToken = Nothing
     , _umlMaxResults = 500
     }
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umlProject :: Lens' URLMapsList Text
 umlProject
   = lens _umlProject (\ s a -> s{_umlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 umlFilter :: Lens' URLMapsList (Maybe Text)
 umlFilter
   = lens _umlFilter (\ s a -> s{_umlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 umlPageToken :: Lens' URLMapsList (Maybe Text)
 umlPageToken
   = lens _umlPageToken (\ s a -> s{_umlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 umlMaxResults :: Lens' URLMapsList Word32
 umlMaxResults
   = lens _umlMaxResults
@@ -126,7 +138,11 @@
 
 instance GoogleRequest URLMapsList where
         type Rs URLMapsList = URLMapList
-        requestClient URLMapsList{..}
+        type Scopes URLMapsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient URLMapsList'{..}
           = go _umlProject _umlFilter _umlPageToken
               (Just _umlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/Patch.hs b/gen/Network/Google/Resource/Compute/URLMaps/Patch.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/Patch.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/Patch.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Update the entire content of the UrlMap resource. This method supports
+-- Updates the entire content of the UrlMap resource. This method supports
 -- patch semantics.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.urlMaps.patch@.
@@ -55,11 +55,11 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] URLMap :> Patch '[JSON] Operation
 
--- | Update the entire content of the UrlMap resource. This method supports
+-- | Updates the entire content of the UrlMap resource. This method supports
 -- patch semantics.
 --
 -- /See:/ 'urlMapsPatch' smart constructor.
-data URLMapsPatch = URLMapsPatch
+data URLMapsPatch = URLMapsPatch'
     { _umpURLMap  :: !Text
     , _umpProject :: !Text
     , _umpPayload :: !URLMap
@@ -80,7 +80,7 @@
     -> URLMap -- ^ 'umpPayload'
     -> URLMapsPatch
 urlMapsPatch pUmpURLMap_ pUmpProject_ pUmpPayload_ =
-    URLMapsPatch
+    URLMapsPatch'
     { _umpURLMap = pUmpURLMap_
     , _umpProject = pUmpProject_
     , _umpPayload = pUmpPayload_
@@ -91,7 +91,7 @@
 umpURLMap
   = lens _umpURLMap (\ s a -> s{_umpURLMap = a})
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umpProject :: Lens' URLMapsPatch Text
 umpProject
   = lens _umpProject (\ s a -> s{_umpProject = a})
@@ -103,7 +103,10 @@
 
 instance GoogleRequest URLMapsPatch where
         type Rs URLMapsPatch = Operation
-        requestClient URLMapsPatch{..}
+        type Scopes URLMapsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient URLMapsPatch'{..}
           = go _umpProject _umpURLMap (Just AltJSON)
               _umpPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/Update.hs b/gen/Network/Google/Resource/Compute/URLMaps/Update.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/Update.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/Update.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Update the entire content of the UrlMap resource.
+-- Updates the entire content of the UrlMap resource.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.urlMaps.update@.
 module Network.Google.Resource.Compute.URLMaps.Update
@@ -54,10 +54,10 @@
                    QueryParam "alt" AltJSON :>
                      ReqBody '[JSON] URLMap :> Put '[JSON] Operation
 
--- | Update the entire content of the UrlMap resource.
+-- | Updates the entire content of the UrlMap resource.
 --
 -- /See:/ 'urlMapsUpdate' smart constructor.
-data URLMapsUpdate = URLMapsUpdate
+data URLMapsUpdate = URLMapsUpdate'
     { _umuURLMap  :: !Text
     , _umuProject :: !Text
     , _umuPayload :: !URLMap
@@ -78,7 +78,7 @@
     -> URLMap -- ^ 'umuPayload'
     -> URLMapsUpdate
 urlMapsUpdate pUmuURLMap_ pUmuProject_ pUmuPayload_ =
-    URLMapsUpdate
+    URLMapsUpdate'
     { _umuURLMap = pUmuURLMap_
     , _umuProject = pUmuProject_
     , _umuPayload = pUmuPayload_
@@ -89,7 +89,7 @@
 umuURLMap
   = lens _umuURLMap (\ s a -> s{_umuURLMap = a})
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umuProject :: Lens' URLMapsUpdate Text
 umuProject
   = lens _umuProject (\ s a -> s{_umuProject = a})
@@ -101,7 +101,10 @@
 
 instance GoogleRequest URLMapsUpdate where
         type Rs URLMapsUpdate = Operation
-        requestClient URLMapsUpdate{..}
+        type Scopes URLMapsUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient URLMapsUpdate'{..}
           = go _umuProject _umuURLMap (Just AltJSON)
               _umuPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/URLMaps/Validate.hs b/gen/Network/Google/Resource/Compute/URLMaps/Validate.hs
--- a/gen/Network/Google/Resource/Compute/URLMaps/Validate.hs
+++ b/gen/Network/Google/Resource/Compute/URLMaps/Validate.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.URLMaps.Validate
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Run static validation for the UrlMap. In particular, the tests of the
+-- Runs static validation for the UrlMap. In particular, the tests of the
 -- provided UrlMap will be run. Calling this method does NOT create the
 -- UrlMap.
 --
@@ -58,12 +58,12 @@
                        ReqBody '[JSON] URLMapsValidateRequest :>
                          Post '[JSON] URLMapsValidateResponse
 
--- | Run static validation for the UrlMap. In particular, the tests of the
+-- | Runs static validation for the UrlMap. In particular, the tests of the
 -- provided UrlMap will be run. Calling this method does NOT create the
 -- UrlMap.
 --
 -- /See:/ 'urlMapsValidate' smart constructor.
-data URLMapsValidate = URLMapsValidate
+data URLMapsValidate = URLMapsValidate'
     { _umvURLMap  :: !Text
     , _umvProject :: !Text
     , _umvPayload :: !URLMapsValidateRequest
@@ -84,7 +84,7 @@
     -> URLMapsValidateRequest -- ^ 'umvPayload'
     -> URLMapsValidate
 urlMapsValidate pUmvURLMap_ pUmvProject_ pUmvPayload_ =
-    URLMapsValidate
+    URLMapsValidate'
     { _umvURLMap = pUmvURLMap_
     , _umvProject = pUmvProject_
     , _umvPayload = pUmvPayload_
@@ -95,7 +95,7 @@
 umvURLMap
   = lens _umvURLMap (\ s a -> s{_umvURLMap = a})
 
--- | Name of the project scoping this request.
+-- | Project ID for this request.
 umvProject :: Lens' URLMapsValidate Text
 umvProject
   = lens _umvProject (\ s a -> s{_umvProject = a})
@@ -107,7 +107,10 @@
 
 instance GoogleRequest URLMapsValidate where
         type Rs URLMapsValidate = URLMapsValidateResponse
-        requestClient URLMapsValidate{..}
+        type Scopes URLMapsValidate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient URLMapsValidate'{..}
           = go _umvProject _umvURLMap (Just AltJSON)
               _umvPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/VPNTunnels/AggregatedList.hs b/gen/Network/Google/Resource/Compute/VPNTunnels/AggregatedList.hs
--- a/gen/Network/Google/Resource/Compute/VPNTunnels/AggregatedList.hs
+++ b/gen/Network/Google/Resource/Compute/VPNTunnels/AggregatedList.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.VPNTunnels.AggregatedList
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of VPN tunnels grouped by scope.
+-- Retrieves an aggregated list of VPN tunnels.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.vpnTunnels.aggregatedList@.
 module Network.Google.Resource.Compute.VPNTunnels.AggregatedList
@@ -57,10 +57,10 @@
                        QueryParam "alt" AltJSON :>
                          Get '[JSON] VPNTunnelAggregatedList
 
--- | Retrieves the list of VPN tunnels grouped by scope.
+-- | Retrieves an aggregated list of VPN tunnels.
 --
 -- /See:/ 'vpnTunnelsAggregatedList' smart constructor.
-data VPNTunnelsAggregatedList = VPNTunnelsAggregatedList
+data VPNTunnelsAggregatedList = VPNTunnelsAggregatedList'
     { _vtalProject    :: !Text
     , _vtalFilter     :: !(Maybe Text)
     , _vtalPageToken  :: !(Maybe Text)
@@ -82,7 +82,7 @@
     :: Text -- ^ 'vtalProject'
     -> VPNTunnelsAggregatedList
 vpnTunnelsAggregatedList pVtalProject_ =
-    VPNTunnelsAggregatedList
+    VPNTunnelsAggregatedList'
     { _vtalProject = pVtalProject_
     , _vtalFilter = Nothing
     , _vtalPageToken = Nothing
@@ -95,29 +95,41 @@
   = lens _vtalProject (\ s a -> s{_vtalProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 vtalFilter :: Lens' VPNTunnelsAggregatedList (Maybe Text)
 vtalFilter
   = lens _vtalFilter (\ s a -> s{_vtalFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 vtalPageToken :: Lens' VPNTunnelsAggregatedList (Maybe Text)
 vtalPageToken
   = lens _vtalPageToken
       (\ s a -> s{_vtalPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 vtalMaxResults :: Lens' VPNTunnelsAggregatedList Word32
 vtalMaxResults
   = lens _vtalMaxResults
@@ -127,7 +139,11 @@
 instance GoogleRequest VPNTunnelsAggregatedList where
         type Rs VPNTunnelsAggregatedList =
              VPNTunnelAggregatedList
-        requestClient VPNTunnelsAggregatedList{..}
+        type Scopes VPNTunnelsAggregatedList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient VPNTunnelsAggregatedList'{..}
           = go _vtalProject _vtalFilter _vtalPageToken
               (Just _vtalMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/VPNTunnels/Delete.hs b/gen/Network/Google/Resource/Compute/VPNTunnels/Delete.hs
--- a/gen/Network/Google/Resource/Compute/VPNTunnels/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/VPNTunnels/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.VPNTunnels.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Deletes the specified VpnTunnel resource.
 --
 -- /See:/ 'vpnTunnelsDelete' smart constructor.
-data VPNTunnelsDelete = VPNTunnelsDelete
+data VPNTunnelsDelete = VPNTunnelsDelete'
     { _vtdProject   :: !Text
     , _vtdVPNTunnel :: !Text
     , _vtdRegion    :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'vtdRegion'
     -> VPNTunnelsDelete
 vpnTunnelsDelete pVtdProject_ pVtdVPNTunnel_ pVtdRegion_ =
-    VPNTunnelsDelete
+    VPNTunnelsDelete'
     { _vtdProject = pVtdProject_
     , _vtdVPNTunnel = pVtdVPNTunnel_
     , _vtdRegion = pVtdRegion_
@@ -94,14 +94,17 @@
 vtdVPNTunnel
   = lens _vtdVPNTunnel (\ s a -> s{_vtdVPNTunnel = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 vtdRegion :: Lens' VPNTunnelsDelete Text
 vtdRegion
   = lens _vtdRegion (\ s a -> s{_vtdRegion = a})
 
 instance GoogleRequest VPNTunnelsDelete where
         type Rs VPNTunnelsDelete = Operation
-        requestClient VPNTunnelsDelete{..}
+        type Scopes VPNTunnelsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient VPNTunnelsDelete'{..}
           = go _vtdProject _vtdRegion _vtdVPNTunnel
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/VPNTunnels/Get.hs b/gen/Network/Google/Resource/Compute/VPNTunnels/Get.hs
--- a/gen/Network/Google/Resource/Compute/VPNTunnels/Get.hs
+++ b/gen/Network/Google/Resource/Compute/VPNTunnels/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.VPNTunnels.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified VpnTunnel resource.
+-- Returns the specified VpnTunnel resource. Get a list of available VPN
+-- tunnels by making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.vpnTunnels.get@.
 module Network.Google.Resource.Compute.VPNTunnels.Get
@@ -54,10 +55,11 @@
                    Capture "vpnTunnel" Text :>
                      QueryParam "alt" AltJSON :> Get '[JSON] VPNTunnel
 
--- | Returns the specified VpnTunnel resource.
+-- | Returns the specified VpnTunnel resource. Get a list of available VPN
+-- tunnels by making a list() request.
 --
 -- /See:/ 'vpnTunnelsGet' smart constructor.
-data VPNTunnelsGet = VPNTunnelsGet
+data VPNTunnelsGet = VPNTunnelsGet'
     { _vtgProject   :: !Text
     , _vtgVPNTunnel :: !Text
     , _vtgRegion    :: !Text
@@ -78,7 +80,7 @@
     -> Text -- ^ 'vtgRegion'
     -> VPNTunnelsGet
 vpnTunnelsGet pVtgProject_ pVtgVPNTunnel_ pVtgRegion_ =
-    VPNTunnelsGet
+    VPNTunnelsGet'
     { _vtgProject = pVtgProject_
     , _vtgVPNTunnel = pVtgVPNTunnel_
     , _vtgRegion = pVtgRegion_
@@ -94,14 +96,18 @@
 vtgVPNTunnel
   = lens _vtgVPNTunnel (\ s a -> s{_vtgVPNTunnel = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 vtgRegion :: Lens' VPNTunnelsGet Text
 vtgRegion
   = lens _vtgRegion (\ s a -> s{_vtgRegion = a})
 
 instance GoogleRequest VPNTunnelsGet where
         type Rs VPNTunnelsGet = VPNTunnel
-        requestClient VPNTunnelsGet{..}
+        type Scopes VPNTunnelsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient VPNTunnelsGet'{..}
           = go _vtgProject _vtgRegion _vtgVPNTunnel
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/VPNTunnels/Insert.hs b/gen/Network/Google/Resource/Compute/VPNTunnels/Insert.hs
--- a/gen/Network/Google/Resource/Compute/VPNTunnels/Insert.hs
+++ b/gen/Network/Google/Resource/Compute/VPNTunnels/Insert.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.VPNTunnels.Insert
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 -- the data included in the request.
 --
 -- /See:/ 'vpnTunnelsInsert' smart constructor.
-data VPNTunnelsInsert = VPNTunnelsInsert
+data VPNTunnelsInsert = VPNTunnelsInsert'
     { _vtiProject :: !Text
     , _vtiPayload :: !VPNTunnel
     , _vtiRegion  :: !Text
@@ -80,7 +80,7 @@
     -> Text -- ^ 'vtiRegion'
     -> VPNTunnelsInsert
 vpnTunnelsInsert pVtiProject_ pVtiPayload_ pVtiRegion_ =
-    VPNTunnelsInsert
+    VPNTunnelsInsert'
     { _vtiProject = pVtiProject_
     , _vtiPayload = pVtiPayload_
     , _vtiRegion = pVtiRegion_
@@ -96,14 +96,17 @@
 vtiPayload
   = lens _vtiPayload (\ s a -> s{_vtiPayload = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 vtiRegion :: Lens' VPNTunnelsInsert Text
 vtiRegion
   = lens _vtiRegion (\ s a -> s{_vtiRegion = a})
 
 instance GoogleRequest VPNTunnelsInsert where
         type Rs VPNTunnelsInsert = Operation
-        requestClient VPNTunnelsInsert{..}
+        type Scopes VPNTunnelsInsert =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient VPNTunnelsInsert'{..}
           = go _vtiProject _vtiRegion (Just AltJSON)
               _vtiPayload
               computeService
diff --git a/gen/Network/Google/Resource/Compute/VPNTunnels/List.hs b/gen/Network/Google/Resource/Compute/VPNTunnels/List.hs
--- a/gen/Network/Google/Resource/Compute/VPNTunnels/List.hs
+++ b/gen/Network/Google/Resource/Compute/VPNTunnels/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.VPNTunnels.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of VpnTunnel resources contained in the specified
+-- Retrieves a list of VpnTunnel resources contained in the specified
 -- project and region.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.vpnTunnels.list@.
@@ -59,11 +59,11 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] VPNTunnelList
 
--- | Retrieves the list of VpnTunnel resources contained in the specified
+-- | Retrieves a list of VpnTunnel resources contained in the specified
 -- project and region.
 --
 -- /See:/ 'vpnTunnelsList' smart constructor.
-data VPNTunnelsList = VPNTunnelsList
+data VPNTunnelsList = VPNTunnelsList'
     { _vtlProject    :: !Text
     , _vtlFilter     :: !(Maybe Text)
     , _vtlRegion     :: !Text
@@ -89,7 +89,7 @@
     -> Text -- ^ 'vtlRegion'
     -> VPNTunnelsList
 vpnTunnelsList pVtlProject_ pVtlRegion_ =
-    VPNTunnelsList
+    VPNTunnelsList'
     { _vtlProject = pVtlProject_
     , _vtlFilter = Nothing
     , _vtlRegion = pVtlRegion_
@@ -103,33 +103,45 @@
   = lens _vtlProject (\ s a -> s{_vtlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 vtlFilter :: Lens' VPNTunnelsList (Maybe Text)
 vtlFilter
   = lens _vtlFilter (\ s a -> s{_vtlFilter = a})
 
--- | The name of the region for this request.
+-- | Name of the region for this request.
 vtlRegion :: Lens' VPNTunnelsList Text
 vtlRegion
   = lens _vtlRegion (\ s a -> s{_vtlRegion = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 vtlPageToken :: Lens' VPNTunnelsList (Maybe Text)
 vtlPageToken
   = lens _vtlPageToken (\ s a -> s{_vtlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 vtlMaxResults :: Lens' VPNTunnelsList Word32
 vtlMaxResults
   = lens _vtlMaxResults
@@ -138,7 +150,11 @@
 
 instance GoogleRequest VPNTunnelsList where
         type Rs VPNTunnelsList = VPNTunnelList
-        requestClient VPNTunnelsList{..}
+        type Scopes VPNTunnelsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient VPNTunnelsList'{..}
           = go _vtlProject _vtlRegion _vtlFilter _vtlPageToken
               (Just _vtlMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/ZoneOperations/Delete.hs b/gen/Network/Google/Resource/Compute/ZoneOperations/Delete.hs
--- a/gen/Network/Google/Resource/Compute/ZoneOperations/Delete.hs
+++ b/gen/Network/Google/Resource/Compute/ZoneOperations/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ZoneOperations.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Deletes the specified zone-specific Operations resource.
 --
 -- /See:/ 'zoneOperationsDelete' smart constructor.
-data ZoneOperationsDelete = ZoneOperationsDelete
+data ZoneOperationsDelete = ZoneOperationsDelete'
     { _zodProject   :: !Text
     , _zodOperation :: !Text
     , _zodZone      :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'zodZone'
     -> ZoneOperationsDelete
 zoneOperationsDelete pZodProject_ pZodOperation_ pZodZone_ =
-    ZoneOperationsDelete
+    ZoneOperationsDelete'
     { _zodProject = pZodProject_
     , _zodOperation = pZodOperation_
     , _zodZone = pZodZone_
@@ -94,13 +94,16 @@
 zodOperation
   = lens _zodOperation (\ s a -> s{_zodOperation = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 zodZone :: Lens' ZoneOperationsDelete Text
 zodZone = lens _zodZone (\ s a -> s{_zodZone = a})
 
 instance GoogleRequest ZoneOperationsDelete where
         type Rs ZoneOperationsDelete = ()
-        requestClient ZoneOperationsDelete{..}
+        type Scopes ZoneOperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute"]
+        requestClient ZoneOperationsDelete'{..}
           = go _zodProject _zodZone _zodOperation
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/ZoneOperations/Get.hs b/gen/Network/Google/Resource/Compute/ZoneOperations/Get.hs
--- a/gen/Network/Google/Resource/Compute/ZoneOperations/Get.hs
+++ b/gen/Network/Google/Resource/Compute/ZoneOperations/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ZoneOperations.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,7 +57,7 @@
 -- | Retrieves the specified zone-specific Operations resource.
 --
 -- /See:/ 'zoneOperationsGet' smart constructor.
-data ZoneOperationsGet = ZoneOperationsGet
+data ZoneOperationsGet = ZoneOperationsGet'
     { _zogProject   :: !Text
     , _zogOperation :: !Text
     , _zogZone      :: !Text
@@ -78,7 +78,7 @@
     -> Text -- ^ 'zogZone'
     -> ZoneOperationsGet
 zoneOperationsGet pZogProject_ pZogOperation_ pZogZone_ =
-    ZoneOperationsGet
+    ZoneOperationsGet'
     { _zogProject = pZogProject_
     , _zogOperation = pZogOperation_
     , _zogZone = pZogZone_
@@ -94,13 +94,17 @@
 zogOperation
   = lens _zogOperation (\ s a -> s{_zogOperation = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for this request.
 zogZone :: Lens' ZoneOperationsGet Text
 zogZone = lens _zogZone (\ s a -> s{_zogZone = a})
 
 instance GoogleRequest ZoneOperationsGet where
         type Rs ZoneOperationsGet = Operation
-        requestClient ZoneOperationsGet{..}
+        type Scopes ZoneOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ZoneOperationsGet'{..}
           = go _zogProject _zogZone _zogOperation
               (Just AltJSON)
               computeService
diff --git a/gen/Network/Google/Resource/Compute/ZoneOperations/List.hs b/gen/Network/Google/Resource/Compute/ZoneOperations/List.hs
--- a/gen/Network/Google/Resource/Compute/ZoneOperations/List.hs
+++ b/gen/Network/Google/Resource/Compute/ZoneOperations/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.ZoneOperations.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of Operation resources contained within the specified
+-- Retrieves a list of Operation resources contained within the specified
 -- zone.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.zoneOperations.list@.
@@ -59,11 +59,11 @@
                        QueryParam "maxResults" (Textual Word32) :>
                          QueryParam "alt" AltJSON :> Get '[JSON] OperationList
 
--- | Retrieves the list of Operation resources contained within the specified
+-- | Retrieves a list of Operation resources contained within the specified
 -- zone.
 --
 -- /See:/ 'zoneOperationsList' smart constructor.
-data ZoneOperationsList = ZoneOperationsList
+data ZoneOperationsList = ZoneOperationsList'
     { _zolProject    :: !Text
     , _zolZone       :: !Text
     , _zolFilter     :: !(Maybe Text)
@@ -89,7 +89,7 @@
     -> Text -- ^ 'zolZone'
     -> ZoneOperationsList
 zoneOperationsList pZolProject_ pZolZone_ =
-    ZoneOperationsList
+    ZoneOperationsList'
     { _zolProject = pZolProject_
     , _zolZone = pZolZone_
     , _zolFilter = Nothing
@@ -102,33 +102,45 @@
 zolProject
   = lens _zolProject (\ s a -> s{_zolProject = a})
 
--- | Name of the zone scoping this request.
+-- | Name of the zone for request.
 zolZone :: Lens' ZoneOperationsList Text
 zolZone = lens _zolZone (\ s a -> s{_zolZone = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 zolFilter :: Lens' ZoneOperationsList (Maybe Text)
 zolFilter
   = lens _zolFilter (\ s a -> s{_zolFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 zolPageToken :: Lens' ZoneOperationsList (Maybe Text)
 zolPageToken
   = lens _zolPageToken (\ s a -> s{_zolPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 zolMaxResults :: Lens' ZoneOperationsList Word32
 zolMaxResults
   = lens _zolMaxResults
@@ -137,7 +149,11 @@
 
 instance GoogleRequest ZoneOperationsList where
         type Rs ZoneOperationsList = OperationList
-        requestClient ZoneOperationsList{..}
+        type Scopes ZoneOperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ZoneOperationsList'{..}
           = go _zolProject _zolZone _zolFilter _zolPageToken
               (Just _zolMaxResults)
               (Just AltJSON)
diff --git a/gen/Network/Google/Resource/Compute/Zones/Get.hs b/gen/Network/Google/Resource/Compute/Zones/Get.hs
--- a/gen/Network/Google/Resource/Compute/Zones/Get.hs
+++ b/gen/Network/Google/Resource/Compute/Zones/Get.hs
@@ -14,13 +14,14 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Zones.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- 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 the specified zone resource.
+-- Returns the specified Zone resource. Get a list of available zones by
+-- making a list() request.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.zones.get@.
 module Network.Google.Resource.Compute.Zones.Get
@@ -51,10 +52,11 @@
                Capture "zone" Text :>
                  QueryParam "alt" AltJSON :> Get '[JSON] Zone
 
--- | Returns the specified zone resource.
+-- | Returns the specified Zone resource. Get a list of available zones by
+-- making a list() request.
 --
 -- /See:/ 'zonesGet' smart constructor.
-data ZonesGet = ZonesGet
+data ZonesGet = ZonesGet'
     { _zgProject :: !Text
     , _zgZone    :: !Text
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -71,7 +73,7 @@
     -> Text -- ^ 'zgZone'
     -> ZonesGet
 zonesGet pZgProject_ pZgZone_ =
-    ZonesGet
+    ZonesGet'
     { _zgProject = pZgProject_
     , _zgZone = pZgZone_
     }
@@ -87,7 +89,11 @@
 
 instance GoogleRequest ZonesGet where
         type Rs ZonesGet = Zone
-        requestClient ZonesGet{..}
+        type Scopes ZonesGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ZonesGet'{..}
           = go _zgProject _zgZone (Just AltJSON) computeService
           where go
                   = buildClient (Proxy :: Proxy ZonesGetResource)
diff --git a/gen/Network/Google/Resource/Compute/Zones/List.hs b/gen/Network/Google/Resource/Compute/Zones/List.hs
--- a/gen/Network/Google/Resource/Compute/Zones/List.hs
+++ b/gen/Network/Google/Resource/Compute/Zones/List.hs
@@ -14,13 +14,13 @@
 
 -- |
 -- Module      : Network.Google.Resource.Compute.Zones.List
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- Retrieves the list of zone resources available to the specified project.
+-- Retrieves the list of Zone resources available to the specified project.
 --
 -- /See:/ <https://developers.google.com/compute/docs/reference/latest/ Compute Engine API Reference> for @compute.zones.list@.
 module Network.Google.Resource.Compute.Zones.List
@@ -55,10 +55,10 @@
                    QueryParam "maxResults" (Textual Word32) :>
                      QueryParam "alt" AltJSON :> Get '[JSON] ZoneList
 
--- | Retrieves the list of zone resources available to the specified project.
+-- | Retrieves the list of Zone resources available to the specified project.
 --
 -- /See:/ 'zonesList' smart constructor.
-data ZonesList = ZonesList
+data ZonesList = ZonesList'
     { _zlProject    :: !Text
     , _zlFilter     :: !(Maybe Text)
     , _zlPageToken  :: !(Maybe Text)
@@ -80,7 +80,7 @@
     :: Text -- ^ 'zlProject'
     -> ZonesList
 zonesList pZlProject_ =
-    ZonesList
+    ZonesList'
     { _zlProject = pZlProject_
     , _zlFilter = Nothing
     , _zlPageToken = Nothing
@@ -93,27 +93,39 @@
   = lens _zlProject (\ s a -> s{_zlProject = a})
 
 -- | Sets a filter expression for filtering listed resources, in the form
--- filter={expression}. Your {expression} must be in the format: FIELD_NAME
--- COMPARISON_STRING LITERAL_STRING. The FIELD_NAME is the name of the
+-- filter={expression}. Your {expression} must be in the format: field_name
+-- comparison_string literal_string. The field_name is the name of the
 -- field you want to compare. Only atomic field types are supported
--- (string, number, boolean). The COMPARISON_STRING must be either eq
--- (equals) or ne (not equals). The LITERAL_STRING is the string value to
--- filter to. The literal value must be valid for the type of field
--- (string, number, boolean). For string fields, the literal value is
--- interpreted as a regular expression using RE2 syntax. The literal value
--- must match the entire field. For example, filter=name ne
--- example-instance.
+-- (string, number, boolean). The comparison_string must be either eq
+-- (equals) or ne (not equals). The literal_string is the string value to
+-- filter to. The literal value must be valid for the type of field you are
+-- filtering by (string, number, boolean). For string fields, the literal
+-- value is interpreted as a regular expression using RE2 syntax. The
+-- literal value must match the entire field. For example, to filter for
+-- instances that do not have a name of example-instance, you would use
+-- filter=name ne example-instance. Compute Engine Beta API Only: When
+-- filtering in the Beta API, you can also filter on nested fields. For
+-- example, you could filter on instances that have set the
+-- scheduling.automaticRestart field to true. Use filtering on nested
+-- fields to take advantage of labels to organize and search for results
+-- based on label values. The Beta API also supports filtering on multiple
+-- expressions by providing each separate expression within parentheses.
+-- For example, (scheduling.automaticRestart eq true) (zone eq
+-- us-central1-f). Multiple expressions are treated as AND expressions,
+-- meaning that resources must match all expressions to pass the filters.
 zlFilter :: Lens' ZonesList (Maybe Text)
 zlFilter = lens _zlFilter (\ s a -> s{_zlFilter = a})
 
--- | Specifies a page token to use. Use this parameter if you want to list
--- the next page of results. Set pageToken to the nextPageToken returned by
--- a previous list request.
+-- | Specifies a page token to use. Set pageToken to the nextPageToken
+-- returned by a previous list request to get the next page of results.
 zlPageToken :: Lens' ZonesList (Maybe Text)
 zlPageToken
   = lens _zlPageToken (\ s a -> s{_zlPageToken = a})
 
--- | Maximum count of results to be returned.
+-- | The maximum number of results per page that should be returned. If the
+-- number of available results is larger than maxResults, Compute Engine
+-- returns a nextPageToken that can be used to get the next page of results
+-- in subsequent list requests.
 zlMaxResults :: Lens' ZonesList Word32
 zlMaxResults
   = lens _zlMaxResults (\ s a -> s{_zlMaxResults = a})
@@ -121,7 +133,11 @@
 
 instance GoogleRequest ZonesList where
         type Rs ZonesList = ZoneList
-        requestClient ZonesList{..}
+        type Scopes ZonesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/compute",
+               "https://www.googleapis.com/auth/compute.readonly"]
+        requestClient ZonesList'{..}
           = go _zlProject _zlFilter _zlPageToken
               (Just _zlMaxResults)
               (Just AltJSON)
diff --git a/gogol-compute.cabal b/gogol-compute.cabal
--- a/gogol-compute.cabal
+++ b/gogol-compute.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-compute
-version:               0.0.1
+version:               0.1.0
 synopsis:              Google Compute Engine SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -7,14 +7,14 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2015 Brendan Hay
+copyright:             Copyright (c) 2015-2016 Brendan Hay
 category:              Network, Google, Cloud
 build-type:            Simple
 cabal-version:         >= 1.10
 extra-source-files:    README.md
 
 description:
-    API for the Google Compute Engine service.
+    Creates and runs virtual machines on Google Cloud Platform.
     .
     /Warning:/ This is an experimental prototype/preview release which is still
     under exploratory development and not intended for public use, caveat emptor!
@@ -63,6 +63,7 @@
         , Network.Google.Resource.Compute.Disks.Get
         , Network.Google.Resource.Compute.Disks.Insert
         , Network.Google.Resource.Compute.Disks.List
+        , Network.Google.Resource.Compute.Disks.Resize
         , Network.Google.Resource.Compute.Firewalls.Delete
         , Network.Google.Resource.Compute.Firewalls.Get
         , Network.Google.Resource.Compute.Firewalls.Insert
@@ -103,6 +104,7 @@
         , Network.Google.Resource.Compute.Images.Delete
         , Network.Google.Resource.Compute.Images.Deprecate
         , Network.Google.Resource.Compute.Images.Get
+        , Network.Google.Resource.Compute.Images.GetFromFamily
         , Network.Google.Resource.Compute.Images.Insert
         , Network.Google.Resource.Compute.Images.List
         , Network.Google.Resource.Compute.InstanceGroupManagers.AbandonInstances
@@ -142,6 +144,7 @@
         , Network.Google.Resource.Compute.Instances.List
         , Network.Google.Resource.Compute.Instances.Reset
         , Network.Google.Resource.Compute.Instances.SetDiskAutoDelete
+        , Network.Google.Resource.Compute.Instances.SetMachineType
         , Network.Google.Resource.Compute.Instances.SetMetadata
         , Network.Google.Resource.Compute.Instances.SetScheduling
         , Network.Google.Resource.Compute.Instances.SetTags
@@ -176,6 +179,11 @@
         , Network.Google.Resource.Compute.Snapshots.Delete
         , Network.Google.Resource.Compute.Snapshots.Get
         , Network.Google.Resource.Compute.Snapshots.List
+        , Network.Google.Resource.Compute.Subnetworks.AggregatedList
+        , Network.Google.Resource.Compute.Subnetworks.Delete
+        , Network.Google.Resource.Compute.Subnetworks.Get
+        , Network.Google.Resource.Compute.Subnetworks.Insert
+        , Network.Google.Resource.Compute.Subnetworks.List
         , Network.Google.Resource.Compute.TargetHTTPProxies.Delete
         , Network.Google.Resource.Compute.TargetHTTPProxies.Get
         , Network.Google.Resource.Compute.TargetHTTPProxies.Insert
@@ -231,5 +239,5 @@
         , Network.Google.Compute.Types.Sum
 
     build-depends:
-          gogol-core == 0.0.1.*
+          gogol-core == 0.1.0.*
         , base       >= 4.7 && < 5
